mybatisplus枚举和代码生成器

1.通用枚举

3.1.0开始,如果你无需使用原生枚举,可配置默认枚举来省略扫描通用枚举配置 默认枚举配置

  • 升级说明:

    3.1.0 以下版本改变了原生默认行为,升级时请将默认枚举设置为EnumOrdinalTypeHandler

  • 影响用户:

    实体中使用原生枚举

  • 其他说明:

    配置枚举包扫描的时候能提前注册使用注解枚举的缓存

1.1、声明通用枚举属性

方式一: 使用 @EnumValue 注解枚举属性

在java下创建枚举包enums,在里面创建枚举类型

@Getter
public enum SexEnum {
    MALE(1,"男"),
    FEMALE(0,"女");

    //将注解标识的值存储到数据库即(0或1),没有有注解则会将其对应的属性值(男或女)存储到数据库
    @EnumValue
    private final Integer gender;

    private final String genderName;

    SexEnum(Integer gender, String genderName) {
        this.gender = gender;
        this.genderName = genderName;
    }
}

实体类添加枚举类型属性:

//生成getter和setter方法
@Data
//无参构造方法
@NoArgsConstructor
//全参构造方法
@AllArgsConstructor
//重写打印方法
@ToString
//将实体类与数据库表形成映射,如果类名和表名一致则可以不加
@TableName("user")
public class User_plus {
    //要是自增策略,在id上加入下列代码
    @TableId(type = IdType.AUTO)
    private Long id;
    //属性与数据库字段名映射
    @TableField(value = "name")
    private String name;
    private Integer age;
    private String email;
    //逻辑删除
    @TableLogic
    private Integer isDeleted;

    //性别为自定义枚举类型
    private SexEnum gender;
}

方式二: 枚举属性,实现 IEnum 接口如下:

@Getter
@AllArgsConstructor
public enum GenderEnum implements IEnum<Integer> {
    MALE(1,"男"),
    FEMALE(0,"女");

    private final Integer gender;
    private final String genderName;

    @Override
    public Integer getValue() {
        return this.gender;
    }
}

实体类添加枚举类型属性:

//生成getter和setter方法
@Data
//无参构造方法
@NoArgsConstructor
//全参构造方法
@AllArgsConstructor
//重写打印方法
@ToString
//将实体类与数据库表形成映射,如果类名和表名一致则可以不加
@TableName("user")
public class User_plus {
    //要是自增策略,在id上加入下列代码
    @TableId(type = IdType.AUTO)
    private Long id;
    //属性与数据库字段名映射
    @TableField(value = "name")
    private String name;
    private Integer age;
    private String email;
    //逻辑删除
    @TableLogic
    private Integer isDeleted;

    //性别实现 IEnum 接口枚举类型
    private GenderEnum gender;
}

在application.yml添加

mybatis-plus:
  #扫描枚举包 支持统配符 * 或者 ; 分割
  type-enums-package: enums

添加测试:

    @Autowired
    User_plusDAO user_plusDAO;

    @Test
    public void enumTest(){
        User_plus user=new User_plus(0L,"admin",21,"sdferfscdsc",0, SexEnum.MALE);
        int i=user_plusDAO.insert(user);
        System.out.println(i);
    }

2.代码生成器

注意

适用版本:mybatis-plus-generator 3.5.1 及其以上版本,对历史版本不兼容!3.5.1 以下的请参考 代码生成器旧

2.1引入依赖

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.5.2</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.freemarker/freemarker -->
<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.31</version>
</dependency>

2.2使用

2.2.1快速生成

创建一个测试类直接使用FastAutoGeneratorTest

@SpringBootTest
public class FastAutoGeneratorTest {
    public static void main(String[] args) {


        //默认配置
        FastAutoGenerator.create("jdbc:mysql://localhost:3306/afx?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC ", "root", "")
                .globalConfig(builder -> {
                    builder.author("baomidou") // 设置作者
                            .enableSwagger() // 开启 swagger 模式
                            //.fileOverride() // 覆盖已生成文件
                            .outputDir("D://java project/mybatisplusFastAutoGeneratorTest"); // 指定输出目录
                })
                .packageConfig(builder -> {
                    builder.parent("samples.generator") // 设置父包名
                            .moduleName("mybatisplusFastAutoGeneratorTest") // 设置父包模块名
                            .pathInfo(Collections.singletonMap(OutputFile.xml, "D://java project/mybatisplusFastAutoGeneratorTest")); // 设置mapperXml生成路径
                })
                .strategyConfig(builder -> {
                    builder.addInclude("tb_students") // 设置需要生成的表名
                            .addTablePrefix("tb_", "c_"); // 设置过滤表前缀
                })
                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
                .execute();


//        自定义配置
//        //表名集合
//        List<String> tables = new ArrayList<>();
//        tables.add("tbl_user");

//        FastAutoGenerator.create("jdbc:mysql://localhost:3306/afx?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC ", "root", "")
//                //全局配置
//                .globalConfig(builder -> {
//                builder.disableOpenDir()  //禁止打开输出目录
//                        .fileOverride() // 覆盖已生成文件
//                        .outputDir("D://java project/mybatisplusFastAutoGeneratorTest")   //指定输出目录
//                        .author("lfh")   //作者名
//    //                            .enableKotlin()      //开启 kotlin 模式
//    //                            .enableSwagger()     //开启 swagger 模式
//                        .dateType(DateType.TIME_PACK)   //时间策略
//                        .commentDate("yyyy-MM-dd");   //注释日期
//        })
//                //包配置
//                .packageConfig(builder -> {
//                    builder.parent("com.example.demo")     //父包名
//                            .entity("bean")                 //Entity 包名
//                            .service("service")             //	Service 包名
//                            .serviceImpl("service.impl")    //Service Impl 包名
//                            .mapper("mapper")               //Mapper 包名
//                            .xml("mapper.xml")              //	Mapper XML 包名
//                            .controller("controller")       //Controller 包名
//                            .other("config")                //自定义文件包名	输出自定义文件时所用到的包名
//                            .pathInfo(Collections.singletonMap(OutputFile.xml, "mybatisplusFastAutoGeneratorTest"));//指定xml位置
//                })
//                //策略配置
//                .strategyConfig(builder -> {
//                    builder.addInclude(tables)
//                            .addTablePrefix("tbl_")//表名前缀,配置后生成的代码不会有此前缀
//                            .serviceBuilder()
//                            .formatServiceFileName("%sService")//服务层接口名后缀
//                            .formatServiceImplFileName("%sServiceImpl")//服务层实现类名后缀
//                            .entityBuilder()
//                            .enableLombok()//实体类使用lombok,需要自己引入依赖
//                            //.logicDeleteColumnName("status")//逻辑删除字段,使用delete方法删除数据时会将status设置为1。调用update方法时并不会将该字段放入修改字段中,而是在条件字段中
//                            .enableTableFieldAnnotation()//加上字段注解@TableField
//                            .controllerBuilder()
//                            .formatFileName("%sController")//控制类名称后缀
//                            .enableRestStyle()
//                            .mapperBuilder()
//                            .superClass(BaseMapper.class)
//                            .formatMapperFileName("%sMapper")
//                            .enableMapperAnnotation()
//                            .formatXmlFileName("%sMapper");
//                })
//                .execute();

    }

}

直接运行即可

2.2.2交互式生成

@SpringBootTest
public class FastAutoGeneratorTest {
    public static void main(String[] args) {



        FastAutoGenerator.create("jdbc:mysql://localhost:3306/afx?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC ", "root", "")
                .globalConfig(builder -> {
                    builder.author("baomidou") // 设置作者
                            .enableSwagger() // 开启 swagger 模式
                            //.fileOverride() // 覆盖已生成文件
                            .outputDir("D://java project/mybatisplusFastAutoGeneratorTest"); // 指定输出目录
                })
                .packageConfig(builder -> {
                    builder.parent("samples.generator") // 设置父包名
                            .moduleName("mybatisplusFastAutoGeneratorTest") // 设置父包模块名
                            .pathInfo(Collections.singletonMap(OutputFile.xml, "D://java project/mybatisplusFastAutoGeneratorTest")); // 设置mapperXml生成路径
                })
                .strategyConfig(builder -> {
                    builder.addInclude("tb_students") // 设置需要生成的表名
                            .addTablePrefix("tb_", "c_"); // 设置过滤表前缀
                })
                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
                .execute();

//        //表名集合
//        List<String> tables = new ArrayList<>();
//        tables.add("tbl_user");

//        FastAutoGenerator.create("jdbc:mysql://localhost:3306/afx?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC ", "root", "")
//                //全局配置
//                .globalConfig(builder -> {
//                builder.disableOpenDir()  //禁止打开输出目录
//                        .fileOverride() // 覆盖已生成文件
//                        .outputDir("D://java project/mybatisplusFastAutoGeneratorTest")   //指定输出目录
//                        .author("lfh")   //作者名
//    //                            .enableKotlin()      //开启 kotlin 模式
//    //                            .enableSwagger()     //开启 swagger 模式
//                        .dateType(DateType.TIME_PACK)   //时间策略
//                        .commentDate("yyyy-MM-dd");   //注释日期
//        })
//                //包配置
//                .packageConfig(builder -> {
//                    builder.parent("com.example.demo")     //父包名
//                            .entity("bean")                 //Entity 包名
//                            .service("service")             //	Service 包名
//                            .serviceImpl("service.impl")    //Service Impl 包名
//                            .mapper("mapper")               //Mapper 包名
//                            .xml("mapper.xml")              //	Mapper XML 包名
//                            .controller("controller")       //Controller 包名
//                            .other("config")                //自定义文件包名	输出自定义文件时所用到的包名
//                            .pathInfo(Collections.singletonMap(OutputFile.xml, "mybatisplusFastAutoGeneratorTest"));//指定xml位置
//                })
//                //策略配置
//                .strategyConfig(builder -> {
//                    builder.addInclude(tables)
//                            .addTablePrefix("tbl_")//表名前缀,配置后生成的代码不会有此前缀
//                            .serviceBuilder()
//                            .formatServiceFileName("%sService")//服务层接口名后缀
//                            .formatServiceImplFileName("%sServiceImpl")//服务层实现类名后缀
//                            .entityBuilder()
//                            .enableLombok()//实体类使用lombok,需要自己引入依赖
//                            //.logicDeleteColumnName("status")//逻辑删除字段,使用delete方法删除数据时会将status设置为1。调用update方法时并不会将该字段放入修改字段中,而是在条件字段中
//                            .enableTableFieldAnnotation()//加上字段注解@TableField
//                            .controllerBuilder()
//                            .formatFileName("%sController")//控制类名称后缀
//                            .enableRestStyle()
//                            .mapperBuilder()
//                            .superClass(BaseMapper.class)
//                            .formatMapperFileName("%sMapper")
//                            .enableMapperAnnotation()
//                            .formatXmlFileName("%sMapper");
//                })
//                .execute();

    }

}

详情参考官网代码生成器(新) | MyBatis-Plus

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值