javax.persistence中@Column定义字段类型方式
作者:站在墙头上 发布时间:2021-12-03 21:21:44
javax.persistence中@Column定义字段类型
在@Column中有个比较强大的配置 columnDefinition,如果有不好定义或者java没有这个属性的直接用columnDefinition根据ddl来定义即可,字段的注释也是可以定义的。
package com.ld.entity;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.serializer.SerializerFeature;
import org.springframework.format.annotation.DateTimeFormat;
import javax.persistence.*;
import java.util.Date;
import java.util.List;
@Entity
@Table(name = "banner")
public class BannerN {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column
private Integer id;
@Column(name = "module_id",columnDefinition="bigint(20)")
private Long moduleId;
private String name;
@Column(name = "detail",columnDefinition="varchar(255) comment '详情'")
private String detail;
@Column(name = "banners",columnDefinition="text comment '集合字符串'")
private String banners;
@Transient
private List<Banner> bannerList;
private Integer type;
@Transient
private Integer index;
private Integer orderIndex;
private Long pageId;
static class Banner {
private Long id;
private Date createTime;
private Integer index;
private String pictrue;
private String click_url;//跳转链接
private String click_url_IOS;//跳转链接
private String click_url_Android;//跳转链接
private String copywriting;//文案
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Integer getIndex() {
return index;
}
public void setIndex(Integer index) {
this.index = index;
}
public String getPictrue() {
return pictrue;
}
public void setPictrue(String pictrue) {
this.pictrue = pictrue;
}
public String getClick_url() {
return click_url;
}
public void setClick_url(String click_url) {
this.click_url = click_url;
}
public String getClick_url_IOS() {
return click_url_IOS;
}
public void setClick_url_IOS(String click_url_IOS) {
this.click_url_IOS = click_url_IOS;
}
public String getClick_url_Android() {
return click_url_Android;
}
public void setClick_url_Android(String click_url_Android) {
this.click_url_Android = click_url_Android;
}
public String getCopywriting() {
return copywriting;
}
public void setCopywriting(String copywriting) {
this.copywriting = copywriting;
}
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
。。。
public String getBanners() {
if (this.banners != null) {
this.setBannerList(JSONArray.parseArray(banners, Banner.class));
}
return banners;
}
public void setBanners(String banners) {
this.banners = banners;
this.bannerList = JSONArray.parseArray(banners, Banner.class);
}
public List<Banner> getBannerList() {
return bannerList;
}
public void setBannerList(List<Banner> bannerList) {
this.bannerList = bannerList;
this.banners = JSONArray.toJSONString(bannerList, SerializerFeature.UseISO8601DateFormat);
}
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
public Integer getIndex() {
this.orderIndex = index;
return index;
}
public void setIndex(Integer index) {
this.index = index;
this.orderIndex = index;
}
public Integer getOrderIndex() {
if(orderIndex!=null){
this.index = orderIndex;
}
return orderIndex;
}
public void setOrderIndex(Integer orderIndex) {
this.orderIndex = orderIndex;
if(orderIndex!=null){
this.index = orderIndex;
}
}
@Transient
:自动生成表时忽略该字段。@Id
:主键@GeneratedValue(strategy = GenerationType.IDENTITY)
:主键策略(IDENTITY:自增)
记一个@Column的坑
注解@Column(javax.persistence.Column),我们通常使用在DAO实体类的属性上,一般用来标识该属性的数据库值(name,其他用途不提)。
BUG是这样产生的
项目中的实体类生成时每个字段均生成了@Column注解,且准确无误。
然后通用mapper使用没有任何问题,直到有一次,在*Mapper接口中手写了SQL(查询某表中满足条件的最新的一条记录):
@Select("SELECT * FROM t_test WHERE test_name = #{testName} ORDER BY gmt_create DESC LIMIT 1")
测试时,发现除了单个字段的属性有返回值(如:id、creator),其他多个单词组成的属性均没有值(如:testName、gmtCreate)。
因为找到了这个规律,所以断定是字段映射出错了,后来验证确实如此。
解决方法
在mybatis配置中加上驼峰命名自动转换规则:
mybatis.configuration.map-underscore-to-camel-case=true
由于水平有限,暂不清楚@Column在什么条件下有用。经测试,删除@Column,保留mybatis驼峰命名转换规则,通用mapper查询、*Mapper.java接口手写sql(包括属性写在查询条件中、返回结果中)、*Mapper.xml手写sql,均无问题。
有点不负责任地建议,实体类中不需要添加@Column注解,添加mybatis自动转换规则即可。
来源:https://blog.csdn.net/qq_19674263/article/details/105924391


猜你喜欢
- 小程序官方流程图如下,官方地址 : https://developers.weixin.qq.com/miniprogram/dev/fra
- 本文为大家分享了Swing单选按钮和复选框的使用方法,供大家参考,具体内容如下JRadioButton构造函数:JRadioButton()
- 本文实例讲述了Windows窗体的.Net框架绘图技术实现方法,非常实用,具体内容如下:一般来说,当编写一个典型的Windows 窗体程序时
- Bezier Curve算法是根据参数曲线方程来得到光滑曲线的一种算法,曲线方程的参数由控制点决定。其本质是由调和函数根据控制点插值而成,其
- 用Stream解决两层List属性求和假设一个人有很多个银行账户,每个银行账户中存有不同金额的存款,那么我们如何用Stream求一组人的所有
- 目录1. List1.1 List 的常见方法1.2 代码示例2. ArrayList2.1 介绍2.2 ArrayList 的构造方法2.
- LeetCode54. 螺旋矩阵 java实现题目难度 中给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,
- Java 散列存储Java中散列存储的数据结构主要是指HashSet、HashMap、LinkedHashSet、LinkedHashMap
- C#定义多行字符串的方式在定义的前面加上@符号: string aa = @"asdfsdfsd &n
- 译文链接:https://www.infoworld.com/art...C# 在 3.0 版本中提供了对 扩展方法 的支持,扩展方法常用于
- 最近在定制Android系统音量条,发现代码还是蛮多的,下面总结一下。 代码是基于5.1.1版本的。 系统音量条的代码是在/framewor
- 1.什么是Spring Boot为什么要学Spring Boot?Spring 的诞生是为了简化 Java 程序的开发的, Spring B
- 先决条件先运行mongodb肯定是必须的,然后导入以下包:import com.mongodb.MongoClient;import com
- 本文实例讲述了Android编程防止进程被第三方软件杀死的方法。分享给大家供大家参考,具体如下:项目测试的时候发现,按home键回到桌面,再
- 做个网站的安卓客户端,用户安装到自己手机上,如果我出了新版本怎么办呢?要有版本更新功能。 本来版本检测最好可以自动进行。但如果每次开启程序,
- 本文实例讲述了Java使用自定义注解实现为事件源绑定事件 * 操作。分享给大家供大家参考,具体如下:一 定义注解import java.la
- ButterKnife的最新版本是8.4.0。首先,需要导入ButterKnife的jar包。在AndroidStudio中,File-&g
- 一、重载 1、重载示意 重载(Overload)是重新加载的意思,指的是同一个类中同名,但是参
- 功能描述上传照片文件名及是系统要识别标签或是照片的名称(人物标识)提取照片脸部特征值(调用 facemesh模型)保存特征值添加样本(调用
- 相信大家对SaaS架构都有所了解,这里也不过多介绍,让我们直奔主题。技术框架springboot版本为2.3.4.RELEASE持久层采用J