美文网首页
Mybatis Generator 生成JSR 校验注解

Mybatis Generator 生成JSR 校验注解

作者: 3c69b7c624d9 | 来源:发表于2017-11-28 22:21 被阅读61次

    背景

    目前系统中采用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注解的生成

    实现

    1. 在pom文件加入对应注解依赖包

      <dependency>
             <groupId>javax.validation</groupId>
             <artifactId>validation-api</artifactId>
         </dependency>
      
    2. 修改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);
           
           
          }
         ```
      
      
    3. 此处各位可以酌情自己增加业务逻辑

      1. 根据DB字段如果不可空并且不是自动增加主键【就设置成不可空】
      2. 如果该字段为String类型并且存在长度限制那么设置Size【其他int等类型的长度和db的length无关】
    4. 生成代码如下

            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;
                }
            }
    

    相关文章

      网友评论

          本文标题:Mybatis Generator 生成JSR 校验注解

          本文链接:https://www.haomeiwen.com/subject/wlrybxtx.html