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