Java知识点总结:想看的可以从这里进入
在使用MyBatis-Plus 时,我们仅仅在泛型中设置了实体类,并没有指明数据库的表名或字段,这些数据是MyBatis-Plus 自动判断并对应起来的,它默认操作的表名和实体类型的类名一致,所以当表名有下划线时,如 user 变成 t_user,这时候再进行查询,就会出现异常。
所以针对实体类和数据库表或字段的一些列问题, MyBatis-Plus 提供了几个注解:
@TableName(“数据表名”):用在实体类上,标识实体类对应的是那张数据表
属性 | 类型 | 描述 |
---|---|---|
value | String | 对应数据库的表明,内部属性只有value时,可以省略直接写 “” |
resultMap | String | xml 中 resultMap 的 id(用于满足特定类型的实体类对象绑定) |
autoResultMap | boolean | 是否自动构建 resultMap 并使用(如果设置 resultMap 则不会进行 resultMap 的自动构建与注入) |
excludeProperty | String[] | 需要排除的属性名 |
keepGlobalPrefix | boolean | 是否保持使用全局的 tablePrefix 的值(当全局 tablePrefix 生效时) |
schema | String | schema |
@TableId(value = “主键的字段名” , type = IdType.AUTO):用在属性上,表示该属性为主键
@TableField(“字段名”):用于除主键外的其他属性上,用来和数据库字段名进行对应
属性 | 类型 | 描述 |
---|---|---|
value | String | 数据库字段名 |
exist | boolean | 是否为数据库表字段,默认为true |
condition | String | where查询比较条件,有值则按设置的值为准,没有则为默认全局的 %s=#{%s} |
update | String | update set 部分注入,例如:当在version字段上注解 update=“%s+1” 表示更新时会 set version=version+1(该属性优先级高于 el 属性) |
fill | Enum | 字段自动填充策略 |
select | boolean | 是否进行 select 查询,默认为true |
keepGlobalFormat | boolean | 是否保持使用全局的 format 进行处理,默认为false |
jdbcType | JdbcType | JDBC 类型 |
typeHandler | Class extends TypeHandler> | 类型处理器 |
numericScale | String | 指定小数点后保留的位数 |
@FieldStrategy:字段策略枚举类
值 | 描述 |
---|---|
IGNORED | 忽略判断 |
NOT_NULL | 非 NULL 判断 |
NOT_EMPTY | 非空判断(只对字符串类型字段,其他类型字段依然为非 NULL 判断) |
DEFAULT | 追随全局配置 |
NEVER | 不加入SQL |
@TableLogic:用于数据库中表示删除的字段,因为在实际使用数据库是,不会真的删除某条数据,而是采用逻辑删除,比如设定一个deleted的字段,如为1则表示没有删除,如果为0则表示删除。
而将 @TableLogic 就是用在这种字段对应的属性上,表示逻辑删除,这样在删除时,实际上执行的是update的修改。
属性 | 类型 | 描述 |
---|---|---|
value | String | 逻辑未删除值 |
delval | String | 逻辑删除值 |
@OrderBy:内置 SQL 默认指定排序,优先级低于 wrapper 条件查询
属性 | 类型 | 描述 |
---|---|---|
isDesc | boolean | 是否倒序查询,默认true |
sort | short | 数字越小越靠前 |
@Version:乐观锁注解
在MyBatis-Plus中提供了代码生成器,我们提供了数据库表名后,代码生成器会根据表,自动生成 entity、mapper、service、controller等相关的代码,十分方便。
数据库配置
属性 | 说明 | 示例 |
---|---|---|
url | jdbc 路径 | jdbc:mysql://127.0.0.1:3306/mybatis-plus |
username | 数据库账号 | root |
password | 数据库密码 | 123456 |
new DataSourceConfig.Builder("jdbc:mysql://127.0.0.1:3306/库名","root","123456").build();
其他可选配置:
方法 | 说明 |
---|---|
dbQuery(IDbQuery) | 数据库查询 |
schema(String) | 数据库 schema(部分数据库适用) |
typeConvert(ITypeConvert) | 数据库类型转换器 |
keyWordsHandler(IKeyWordsHandler) | 数据库关键字处理器 |
new DataSourceConfig.Builder("jdbc:mysql://127.0.0.1:3306/mybatis-plus","root","123456").dbQuery(new MySqlQuery()).schema("mybatis-plus").typeConvert(new MySqlTypeConvert()).keyWordsHandler(new MySqlKeyWordsHandler()).build();
全局配置
方法 | 说明 | 示例 |
---|---|---|
fileOverride | 覆盖已生成文件 | 默认值:false |
disableOpenDir | 禁止打开输出目录 | 默认值:true |
outputDir(String) | 指定输出目录 | /opt/baomidou/ 默认值: windows:D:// linux or mac : /tmp |
author(String) | 作者名 | baomidou 默认值:作者 |
enableKotlin | 开启 kotlin 模式 | 默认值:false |
enableSwagger | 开启 swagger 模式 | 默认值:false |
dateType(DateType) | 时间策略 | DateType.ONLY_DATE 默认值: DateType.TIME_PACK |
commentDate(String) | 注释日期 | 默认值: yyyy-MM-dd |
new GlobalConfig.Builder().fileOverride().outputDir("/opt/baomidou").author("baomidou").enableKotlin().enableSwagger().dateType(DateType.TIME_PACK).commentDate("yyyy-MM-dd").build();
自动生成包的配置
方法 | 说明 | 示例 |
---|---|---|
parent(String) | 父包名 | 默认值:com.baomidou |
moduleName(String) | 父包模块名 | 默认值:无 |
entity(String) | Entity 包名 | 默认值:entity |
service(String) | Service 包名 | 默认值:service |
serviceImpl(String) | Service Impl 包名 | 默认值:service.impl |
mapper(String) | Mapper 包名 | 默认值:mapper |
xml(String) | Mapper XML 包名 | 默认值:mapper.xml |
controller(String) | Controller 包名 | 默认值:controller |
other(String) | 自定义文件包名 | 输出自定义文件时所用到的包名 |
pathInfo(Map | 路径配置信息 | Collections.singletonMap(OutputFile.mapperXml, “D://”) |
new PackageConfig.Builder().parent("com.baomidou.mybatisplus.samples.generator").moduleName("sys").entity("po").service("service").serviceImpl("service.impl").mapper("mapper").xml("mapper.xml").controller("controller").other("other").pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D://")).build();
模板配置
方法 | 说明 | 示例 |
---|---|---|
disable | 禁用所有模板 | |
disable(TemplateType…) | 禁用模板 | TemplateType.ENTITY |
entity(String) | 设置实体模板路径(JAVA) | /templates/entity.java |
entityKt(String) | 设置实体模板路径(kotlin) | /templates/entity.java |
service(String) | 设置 service 模板路径 | /templates/service.java |
serviceImpl(String) | 设置 serviceImpl 模板路径 | /templates/serviceImpl.java |
mapper(String) | 设置 mapper 模板路径 | /templates/mapper.java |
mapperXml(String) | 设置 mapperXml 模板路径 | /templates/mapper.xml |
controller(String) | 设置 controller 模板路径 | /templates/controller.java |
new TemplateConfig.Builder().disable(TemplateType.ENTITY).entity("/templates/entity.java").service("/templates/service.java").serviceImpl("/templates/serviceImpl.java").mapper("/templates/mapper.java").mapperXml("/templates/mapper.xml").controller("/templates/controller.java").build();
注入配置
方法 | 说明 | 示例 |
---|---|---|
beforeOutputFile(BiConsumer | 输出文件之前消费者 | |
customMap(Map | 自定义配置 Map 对象 | Collections.singletonMap(“test”, “baomidou”) |
customFile(Map | 自定义配置模板文件 | Collections.singletonMap(“test.txt”, “/templates/test.vm”) |
new InjectionConfig.Builder().beforeOutputFile((tableInfo, objectMap) -> {System.out.println("tableInfo: " + tableInfo.getEntityName() + " objectMap: " + objectMap.size());}).customMap(Collections.singletonMap("test", "baomidou")).customFile(Collections.singletonMap("test.txt", "/templates/test.vm")).build();
策略配置
方法 | 说明 | 示例 |
---|---|---|
enableCapitalMode | 开启大写命名 | 默认值:false |
enableSkipView | 开启跳过视图 | 默认值:false |
disableSqlFilter | 禁用 sql 过滤 | 默认值:true,语法不能支持使用 sql 过滤表的话,可以考虑关闭此开关 |
enableSchema | 启用 schema | 默认值:false,多 schema 场景的时候打开 |
likeTable(LikeTable) | 模糊表匹配(sql 过滤) | likeTable 与 notLikeTable 只能配置一项 |
notLikeTable(LikeTable) | 模糊表排除(sql 过滤) | likeTable 与 notLikeTable 只能配置一项 |
addInclude(String…) | 增加表匹配(内存过滤) | include 与 exclude 只能配置一项 |
addExclude(String…) | 增加表排除匹配(内存过滤) | include 与 exclude 只能配置一项 |
addTablePrefix(String…) | 增加过滤表前缀 | |
addTableSuffix(String…) | 增加过滤表后缀 | |
addFieldPrefix(String…) | 增加过滤字段前缀 | |
addFieldSuffix(String…) | 增加过滤字段后缀 | |
entityBuilder | 实体策略配置 | |
controllerBuilder | controller 策略配置 | |
mapperBuilder | mapper 策略配置 | |
serviceBuilder | service 策略配置 |
new StrategyConfig.Builder().enableCapitalMode().enableSkipView().disableSqlFilter().likeTable(new LikeTable("USER")).addInclude("t_simple").addTablePrefix("t_", "c_").addFieldSuffix("_flag").build();
Entity 策略配置
方法 | 说明 | 示例 |
---|---|---|
nameConvert(INameConvert) | 名称转换实现 | |
superClass(Class>) | 设置父类 | BaseEntity.class |
superClass(String) | 设置父类 | com.baomidou.global.BaseEntity |
disableSerialVersionUID | 禁用生成 serialVersionUID | 默认值:true |
enableColumnConstant | 开启生成字段常量 | 默认值:false |
enableChainModel | 开启链式模型 | 默认值:false |
enableLombok | 开启 lombok 模型 | 默认值:false |
enableRemoveIsPrefix | 开启 Boolean 类型字段移除 is 前缀 | 默认值:false |
enableTableFieldAnnotation | 开启生成实体时生成字段注解 | 默认值:false |
enableActiveRecord | 开启 ActiveRecord 模型 | 默认值:false |
versionColumnName(String) | 乐观锁字段名(数据库) | |
versionPropertyName(String) | 乐观锁属性名(实体) | |
logicDeleteColumnName(String) | 逻辑删除字段名(数据库) | |
logicDeletePropertyName(String) | 逻辑删除属性名(实体) | |
naming | 数据库表映射到实体的命名策略 | 默认下划线转驼峰命名:NamingStrategy.underline_to_camel |
columnNaming | 数据库表字段映射到实体的命名策略 | 默认为 null,未指定按照 naming 执行 |
addSuperEntityColumns(String…) | 添加父类公共字段 | |
addIgnoreColumns(String…) | 添加忽略字段 | |
addTableFills(IFill…) | 添加表字段填充 | |
addTableFills(List) | 添加表字段填充 | |
idType(IdType) | 全局主键类型 | |
convertFileName(ConverterFileName) | 转换文件名称 | |
formatFileName(String) | 格式化文件名称 |
new StrategyConfig.Builder().entityBuilder().superClass(BaseEntity.class).disableSerialVersionUID().enableChainModel().enableLombok().enableRemoveIsPrefix().enableTableFieldAnnotation().enableActiveRecord().versionColumnName("version").versionPropertyName("version").logicDeleteColumnName("deleted").logicDeletePropertyName("deleteFlag").naming(NamingStrategy.no_change).columnNaming(NamingStrategy.underline_to_camel).addSuperEntityColumns("id", "created_by", "created_time", "updated_by", "updated_time").addIgnoreColumns("age").addTableFills(new Column("create_time", FieldFill.INSERT)).addTableFills(new Property("updateTime", FieldFill.INSERT_UPDATE)).idType(IdType.AUTO).formatFileName("%sEntity").build();
Controller 策略配置
方法 | 说明 | 示例 |
---|---|---|
superClass(Class>) | 设置父类 | BaseController.class |
superClass(String) | 设置父类 | com.baomidou.global.BaseController |
enableHyphenStyle | 开启驼峰转连字符 | 默认值:false |
enableRestStyle | 开启生成@RestController 控制器 | 默认值:false |
convertFileName(ConverterFileName) | 转换文件名称 | |
formatFileName(String) | 格式化文件名称 |
new StrategyConfig.Builder().controllerBuilder().superClass(BaseController.class).enableHyphenStyle().enableRestStyle().formatFileName("%sAction").build();
Service 策略配置
方法 | 说明 | 示例 |
---|---|---|
superServiceClass(Class>) | 设置 service 接口父类 | BaseService.class |
superServiceClass(String) | 设置 service 接口父类 | com.baomidou.global.BaseService |
superServiceImplClass(Class>) | 设置 service 实现类父类 | BaseServiceImpl.class |
superServiceImplClass(String) | 设置 service 实现类父类 | com.baomidou.global.BaseServiceImpl |
convertServiceFileName(ConverterFileName) | 转换 service 接口文件名称 | |
convertServiceImplFileName(ConverterFileName) | 转换 service 实现类文件名称 | |
formatServiceFileName(String) | 格式化 service 接口文件名称 | |
formatServiceImplFileName(String) | 格式化 service 实现类文件名称 |
new StrategyConfig.Builder().serviceBuilder().superServiceClass(BaseService.class).superServiceImplClass(BaseServiceImpl.class).formatServiceFileName("%sService").formatServiceImplFileName("%sServiceImp").build();
Mapper 策略配置
方法 | 说明 | 示例 |
---|---|---|
superClass(Class>) | 设置父类 | BaseMapper.class |
superClass(String) | 设置父类 | com.baomidou.global.BaseMapper |
enableMapperAnnotation | 开启 @Mapper 注解 | 默认值:false |
enableBaseResultMap | 启用 BaseResultMap 生成 | 默认值:false |
enableBaseColumnList | 启用 BaseColumnList | 默认值:false |
cache(Class extends Cache>) | 设置缓存实现类 | MyMapperCache.class |
convertMapperFileName(ConverterFileName) | 转换 mapper 类文件名称 | |
convertXmlFileName(ConverterFileName) | 转换 xml 文件名称 | |
formatMapperFileName(String) | 格式化 mapper 文件名称 | |
formatXmlFileName(String) | 格式化 xml 实现类文件名称 |
new StrategyConfig.Builder().mapperBuilder().superClass(BaseMapper.class).enableMapperAnnotation().enableBaseResultMap().enableBaseColumnList().cache(MyMapperCache.class).formatMapperFileName("%sDao").formatXmlFileName("%sXml").build()
com.baomidou mybatis-plus-generator 最新版本
org.apache.velocity velocity-engine-core 2.3
public static void main(String[] args) {String url = "jdbc:mysql://localhost:3306/ssmtest?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true";String username = "root";String password = "521926";//表名集合List tables = new ArrayList<>();tables.add("tbl_user");FastAutoGenerator.create(url, username, password)//全局配置.globalConfig(builder -> {builder.fileOverride() // 开启覆盖之前生成的文件.disableOpenDir() //禁止打开输出目录.outputDir(System.getProperty("user.dir") + "\\src\\main\\java") //指定输出目录.author("yu") //作者名
// .enableKotlin() //开启 kotlin 模式
// .enableSwagger() //开启 swagger 模式.dateType(DateType.TIME_PACK) //时间策略.commentDate("yyyy-MM-dd"); //注释日期})//包配置.packageConfig(builder -> {builder.parent("com.yu.mybatisplustest") //父包名.entity("entity") //Entity 包名.service("service") // Service 包名.serviceImpl("service.impl") //Service Impl 包名.mapper("mapper") //Mapper 包名.xml("mapping") // Mapper XML 包名.controller("controller") //Controller 包名.pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "\\src\\main\\resources\\mapping"));//指定xml位置})//策略配置.strategyConfig(builder -> {builder.addInclude(tables).addTablePrefix("tbl_")//表名前缀,配置后生成的代码不会有此前缀.serviceBuilder().formatServiceFileName("%sService")//服务层接口名后缀.formatServiceImplFileName("%sServiceImpl")//服务层实现类名后缀.entityBuilder().enableLombok()//实体类使用lombok,需要自己引入依赖.logicDeleteColumnName("deleted")//逻辑删除字段,使用delete方法删除数据时会将status设置为1。调用update方法时并不会将该字段放入修改字段中,而是在条件字段中.enableTableFieldAnnotation()//加上字段注解@TableField.controllerBuilder().formatFileName("%sController")//控制类名称后缀.enableRestStyle().mapperBuilder().superClass(BaseMapper.class).formatMapperFileName("%sMapper").enableMapperAnnotation().formatXmlFileName("%sMapper");}).execute();}
public static void main(String[] args) {// 全局配置GlobalConfig config = new GlobalConfig();config.setActiveRecord(true);//是否支持AR模式config.setAuthor("lfh");//作者config.setOutputDir(System.getProperty("user.dir") + "\\src\\main\\java");//生成路径config.setFileOverride(true);//文件覆盖config.setIdType(IdType.AUTO);//自增策略config.setServiceName("%sService");//设置生成的service接口的名字首字母是否有Iconfig.setBaseResultMap(true);config.setBaseColumnList(true);//2.数据源配置DataSourceConfig dsc = new DataSourceConfig();dsc.setDbType(DbType.MYSQL);//设置数据库类型dsc.setUrl("jdbc:mysql://localhost:3306/springboot-test-db?useUnicode=true&useSSL=false&characterEncoding=utf8");dsc.setDriverName("com.mysql.cj.jdbc.Driver");dsc.setUsername("root");dsc.setPassword("root");//3.策略配置StrategyConfig strategyConfig = new StrategyConfig();strategyConfig.setCapitalMode(true);//开启全局大写命名strategyConfig.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略strategyConfig.setTablePrefix("tbl_");//表的前缀strategyConfig.setInclude("tbl_user");//需要生成的表//4.包名策略配置PackageConfig pc = new PackageConfig();pc.setParent("com.example.springboot").setMapper("mapper").setService("service").setController("controller").setEntity("bean").setXml("mapper");//5.整合配置AutoGenerator autoGenerator = new AutoGenerator();autoGenerator.setGlobalConfig(config).setDataSource(dsc).setStrategy(strategyConfig).setPackageInfo(pc);//6.执行autoGenerator.execute();
}
上一篇:前端一些小知识