Mybatis Generator 生成JSR 校验注解
2017-12-12 本文已影响24人
3c69b7c624d9
背景
目前系统中采用MyBatis Generator来生成DB实体类 参考基于SpringBoot的CodeGenerator
通常生成如下
package com.f6car.base.po.user;
import com.f6car.base.common.Po;
import java.util.Date;
import javax.persistence.*;
@Table(name = "tb_user")
public class TbUser extends Po {
/**
* 主键
*/
@Id
@Column(name = "pk_id")
private String pkId;
/**
* 用户名
*/
private String username;
@Column(name = "cell_phone")
private String cellPhone;
/**
* 密码
*/
private String password;
/**
* 是否管理员
*/
@Column(name = "is_admin")
private Byte isAdmin;
/**
* 角色ID
*/
@Column(name = "id_role")
private String idRole;
/**
* 创建人
*/
private String creator;
/**
* 修改人
*/
private String modifier;
/**
* 修改日期
*/
private Date modifiedtime;
/**
* 创建日期
*/
private Date creationtime;
/**
* 组织
*/
@Column(name = "id_own_org")
private String idOwnOrg;
/**
* 员工ID
*/
@Column(name = "id_employee")
private String idEmployee;
@Column(name = "is_del")
private Byte isDel;
/**
* 向导默认开关:0默认关闭,1默认打开
*/
@Column(name = "is_guide_open")
private Byte isGuideOpen;
/**
* 维小宝用户ID
*/
@Column(name = "id_wxb_user")
private String idWxbUser;
/**
* 维小宝店铺ID
*/
@Column(name = "id_wxb_station")
private String idWxbStation;
private String openid;
/**
* 是否限定PC登录设备 0 不选中 1 选中
*/
@Column(name = "limit_mac")
private Byte limitMac;
/**
* 获取主键
*
* @return pk_id - 主键
*/
public String getPkId() {
return pkId;
}
/**
* 设置主键
*
* @param pkId 主键
*/
public void setPkId(String pkId) {
this.pkId = pkId;
}
/**
* 获取用户名
*
* @return username - 用户名
*/
public String getUsername() {
return username;
}
/**
* 设置用户名
*
* @param username 用户名
*/
public void setUsername(String username) {
this.username = username;
}
/**
* @return cell_phone
*/
public String getCellPhone() {
return cellPhone;
}
/**
* @param cellPhone
*/
public void setCellPhone(String cellPhone) {
this.cellPhone = cellPhone;
}
/**
* 获取密码
*
* @return password - 密码
*/
public String getPassword() {
return password;
}
/**
* 设置密码
*
* @param password 密码
*/
public void setPassword(String password) {
this.password = password;
}
/**
* 获取是否管理员
*
* @return is_admin - 是否管理员
*/
public Byte getIsAdmin() {
return isAdmin;
}
/**
* 设置是否管理员
*
* @param isAdmin 是否管理员
*/
public void setIsAdmin(Byte isAdmin) {
this.isAdmin = isAdmin;
}
/**
* 获取角色ID
*
* @return id_role - 角色ID
*/
public String getIdRole() {
return idRole;
}
/**
* 设置角色ID
*
* @param idRole 角色ID
*/
public void setIdRole(String idRole) {
this.idRole = idRole;
}
/**
* 获取创建人
*
* @return creator - 创建人
*/
public String getCreator() {
return creator;
}
/**
* 设置创建人
*
* @param creator 创建人
*/
public void setCreator(String creator) {
this.creator = creator;
}
/**
* 获取修改人
*
* @return modifier - 修改人
*/
public String getModifier() {
return modifier;
}
/**
* 设置修改人
*
* @param modifier 修改人
*/
public void setModifier(String modifier) {
this.modifier = modifier;
}
/**
* 获取修改日期
*
* @return modifiedtime - 修改日期
*/
public Date getModifiedtime() {
return modifiedtime;
}
/**
* 设置修改日期
*
* @param modifiedtime 修改日期
*/
public void setModifiedtime(Date modifiedtime) {
this.modifiedtime = modifiedtime;
}
/**
* 获取创建日期
*
* @return creationtime - 创建日期
*/
public Date getCreationtime() {
return creationtime;
}
/**
* 设置创建日期
*
* @param creationtime 创建日期
*/
public void setCreationtime(Date creationtime) {
this.creationtime = creationtime;
}
/**
* 获取组织
*
* @return id_own_org - 组织
*/
public String getIdOwnOrg() {
return idOwnOrg;
}
/**
* 设置组织
*
* @param idOwnOrg 组织
*/
public void setIdOwnOrg(String idOwnOrg) {
this.idOwnOrg = idOwnOrg;
}
/**
* 获取员工ID
*
* @return id_employee - 员工ID
*/
public String getIdEmployee() {
return idEmployee;
}
/**
* 设置员工ID
*
* @param idEmployee 员工ID
*/
public void setIdEmployee(String idEmployee) {
this.idEmployee = idEmployee;
}
/**
* @return is_del
*/
public Byte getIsDel() {
return isDel;
}
/**
* @param isDel
*/
public void setIsDel(Byte isDel) {
this.isDel = isDel;
}
/**
* 获取向导默认开关:0默认关闭,1默认打开
*
* @return is_guide_open - 向导默认开关:0默认关闭,1默认打开
*/
public Byte getIsGuideOpen() {
return isGuideOpen;
}
/**
* 设置向导默认开关:0默认关闭,1默认打开
*
* @param isGuideOpen 向导默认开关:0默认关闭,1默认打开
*/
public void setIsGuideOpen(Byte isGuideOpen) {
this.isGuideOpen = isGuideOpen;
}
/**
* 获取维小宝用户ID
*
* @return id_wxb_user - 维小宝用户ID
*/
public String getIdWxbUser() {
return idWxbUser;
}
/**
* 设置维小宝用户ID
*
* @param idWxbUser 维小宝用户ID
*/
public void setIdWxbUser(String idWxbUser) {
this.idWxbUser = idWxbUser;
}
/**
* 获取维小宝店铺ID
*
* @return id_wxb_station - 维小宝店铺ID
*/
public String getIdWxbStation() {
return idWxbStation;
}
/**
* 设置维小宝店铺ID
*
* @param idWxbStation 维小宝店铺ID
*/
public void setIdWxbStation(String idWxbStation) {
this.idWxbStation = idWxbStation;
}
/**
* @return openid
*/
public String getOpenid() {
return openid;
}
/**
* @param openid
*/
public void setOpenid(String openid) {
this.openid = openid;
}
/**
* 获取是否限定PC登录设备 0 不选中 1 选中
*
* @return limit_mac - 是否限定PC登录设备 0 不选中 1 选中
*/
public Byte getLimitMac() {
return limitMac;
}
/**
* 设置是否限定PC登录设备 0 不选中 1 选中
*
* @param limitMac 是否限定PC登录设备 0 不选中 1 选中
*/
public void setLimitMac(Byte limitMac) {
this.limitMac = limitMac;
}
}
但是对于使用hibernate validate来说其实还丢失了部分信息【比如可否为空 字段长度】
因此考虑在代码生成器中加入JSR注解的生成
实现
-
在pom文件加入对应注解依赖包
<dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> </dependency>
-
修改Mapper Plugin
private boolean validate = true; @Override public void setProperties(Properties properties) { String validateStr = properties.getProperty("validate"); if (StringUtility.stringHasValue(validateStr)) { validate = Boolean.parseBoolean(validateStr); } super.setProperties(properties); } @Override public boolean modelFieldGenerated(Field field, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) { if (!introspectedColumn.isNullable() && !introspectedColumn.isAutoIncrement()) { //非主键增加 topLevelClass.addImportedType("javax.validation.constraints.NotNull"); field.addAnnotation("@NotNull"); } if (introspectedColumn.isStringColumn()) { topLevelClass.addImportedType("javax.validation.constraints.Size"); field.addAnnotation("@Size(min = 0, max = " + introspectedColumn.getLength() + " , message = \"长度必须在{min}和{max}之间\")"); } return super.modelFieldGenerated(field, topLevelClass, introspectedColumn, introspectedTable, modelClassType); } ```
-
此处各位可以酌情自己增加业务逻辑
- 根据DB字段如果不可空并且不是自动增加主键【就设置成不可空】
- 如果该字段为String类型并且存在长度限制那么设置Size【其他int等类型的长度和db的length无关】
-
生成代码如下
package com.f6car.base.po.user;
import com.f6car.base.common.Po;
import java.math.BigInteger;
import java.util.Date;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
@Table(name = "tb_user")
public class TbUser extends Po {
/**
* 主键
*/
@Id
@Column(name = "pk_id")
@NotNull
private BigInteger pkId;
/**
* 用户名
*/
@Size(min = 0, max = 20 , message = "长度必须在{min}和{max}之间")
private String username;
@Column(name = "cell_phone")
@NotNull
@Size(min = 0, max = 20 , message = "长度必须在{min}和{max}之间")
private String cellPhone;
/**
* 密码
*/
@Size(min = 0, max = 50 , message = "长度必须在{min}和{max}之间")
private String password;
/**
* 是否管理员
*/
@Column(name = "is_admin")
private Byte isAdmin;
/**
* 角色ID
*/
@Column(name = "id_role")
private BigInteger idRole;
/**
* 创建人
*/
private BigInteger creator;
/**
* 修改人
*/
private BigInteger modifier;
/**
* 修改日期
*/
private Date modifiedtime;
/**
* 创建日期
*/
@NotNull
private Date creationtime;
/**
* 组织
*/
@Column(name = "id_own_org")
private BigInteger idOwnOrg;
/**
* 员工ID
*/
@Column(name = "id_employee")
private BigInteger idEmployee;
@Column(name = "is_del")
private Byte isDel;
/**
* 向导默认开关:0默认关闭,1默认打开
*/
@Column(name = "is_guide_open")
@NotNull
private Byte isGuideOpen;
/**
* 维小宝用户ID
*/
@Column(name = "id_wxb_user")
@Size(min = 0, max = 20 , message = "长度必须在{min}和{max}之间")
private String idWxbUser;
/**
* 维小宝店铺ID
*/
@Column(name = "id_wxb_station")
@Size(min = 0, max = 20 , message = "长度必须在{min}和{max}之间")
private String idWxbStation;
@Size(min = 0, max = 40 , message = "长度必须在{min}和{max}之间")
private String openid;
/**
* 是否限定PC登录设备 0 不选中 1 选中
*/
@Column(name = "limit_mac")
private Byte limitMac;
/**
* 获取主键
*
* @return pk_id - 主键
*/
public BigInteger getPkId() {
return pkId;
}
/**
* 设置主键
*
* @param pkId 主键
*/
public void setPkId(BigInteger pkId) {
this.pkId = pkId;
}
/**
* 获取用户名
*
* @return username - 用户名
*/
public String getUsername() {
return username;
}
/**
* 设置用户名
*
* @param username 用户名
*/
public void setUsername(String username) {
this.username = username;
}
/**
* @return cell_phone
*/
public String getCellPhone() {
return cellPhone;
}
/**
* @param cellPhone
*/
public void setCellPhone(String cellPhone) {
this.cellPhone = cellPhone;
}
/**
* 获取密码
*
* @return password - 密码
*/
public String getPassword() {
return password;
}
/**
* 设置密码
*
* @param password 密码
*/
public void setPassword(String password) {
this.password = password;
}
/**
* 获取是否管理员
*
* @return is_admin - 是否管理员
*/
public Byte getIsAdmin() {
return isAdmin;
}
/**
* 设置是否管理员
*
* @param isAdmin 是否管理员
*/
public void setIsAdmin(Byte isAdmin) {
this.isAdmin = isAdmin;
}
/**
* 获取角色ID
*
* @return id_role - 角色ID
*/
public BigInteger getIdRole() {
return idRole;
}
/**
* 设置角色ID
*
* @param idRole 角色ID
*/
public void setIdRole(BigInteger idRole) {
this.idRole = idRole;
}
/**
* 获取创建人
*
* @return creator - 创建人
*/
public BigInteger getCreator() {
return creator;
}
/**
* 设置创建人
*
* @param creator 创建人
*/
public void setCreator(BigInteger creator) {
this.creator = creator;
}
/**
* 获取修改人
*
* @return modifier - 修改人
*/
public BigInteger getModifier() {
return modifier;
}
/**
* 设置修改人
*
* @param modifier 修改人
*/
public void setModifier(BigInteger modifier) {
this.modifier = modifier;
}
/**
* 获取修改日期
*
* @return modifiedtime - 修改日期
*/
public Date getModifiedtime() {
return modifiedtime;
}
/**
* 设置修改日期
*
* @param modifiedtime 修改日期
*/
public void setModifiedtime(Date modifiedtime) {
this.modifiedtime = modifiedtime;
}
/**
* 获取创建日期
*
* @return creationtime - 创建日期
*/
public Date getCreationtime() {
return creationtime;
}
/**
* 设置创建日期
*
* @param creationtime 创建日期
*/
public void setCreationtime(Date creationtime) {
this.creationtime = creationtime;
}
/**
* 获取组织
*
* @return id_own_org - 组织
*/
public BigInteger getIdOwnOrg() {
return idOwnOrg;
}
/**
* 设置组织
*
* @param idOwnOrg 组织
*/
public void setIdOwnOrg(BigInteger idOwnOrg) {
this.idOwnOrg = idOwnOrg;
}
/**
* 获取员工ID
*
* @return id_employee - 员工ID
*/
public BigInteger getIdEmployee() {
return idEmployee;
}
/**
* 设置员工ID
*
* @param idEmployee 员工ID
*/
public void setIdEmployee(BigInteger idEmployee) {
this.idEmployee = idEmployee;
}
/**
* @return is_del
*/
public Byte getIsDel() {
return isDel;
}
/**
* @param isDel
*/
public void setIsDel(Byte isDel) {
this.isDel = isDel;
}
/**
* 获取向导默认开关:0默认关闭,1默认打开
*
* @return is_guide_open - 向导默认开关:0默认关闭,1默认打开
*/
public Byte getIsGuideOpen() {
return isGuideOpen;
}
/**
* 设置向导默认开关:0默认关闭,1默认打开
*
* @param isGuideOpen 向导默认开关:0默认关闭,1默认打开
*/
public void setIsGuideOpen(Byte isGuideOpen) {
this.isGuideOpen = isGuideOpen;
}
/**
* 获取维小宝用户ID
*
* @return id_wxb_user - 维小宝用户ID
*/
public String getIdWxbUser() {
return idWxbUser;
}
/**
* 设置维小宝用户ID
*
* @param idWxbUser 维小宝用户ID
*/
public void setIdWxbUser(String idWxbUser) {
this.idWxbUser = idWxbUser;
}
/**
* 获取维小宝店铺ID
*
* @return id_wxb_station - 维小宝店铺ID
*/
public String getIdWxbStation() {
return idWxbStation;
}
/**
* 设置维小宝店铺ID
*
* @param idWxbStation 维小宝店铺ID
*/
public void setIdWxbStation(String idWxbStation) {
this.idWxbStation = idWxbStation;
}
/**
* @return openid
*/
public String getOpenid() {
return openid;
}
/**
* @param openid
*/
public void setOpenid(String openid) {
this.openid = openid;
}
/**
* 获取是否限定PC登录设备 0 不选中 1 选中
*
* @return limit_mac - 是否限定PC登录设备 0 不选中 1 选中
*/
public Byte getLimitMac() {
return limitMac;
}
/**
* 设置是否限定PC登录设备 0 不选中 1 选中
*
* @param limitMac 是否限定PC登录设备 0 不选中 1 选中
*/
public void setLimitMac(Byte limitMac) {
this.limitMac = limitMac;
}
}