MyBatis-Plus中提供的注解和自动代码生成器
创始人
2025-05-31 01:38:08
0

Java知识点总结:想看的可以从这里进入

目录

      • 3.3、相关注解
      • 3.5、代码生成器
        • 3.5.1、基础配置
        • 3.5.2、 3.5.1以后版本
        • 3.5.3、 3.5.1以前的版本

3.3、相关注解

在使用MyBatis-Plus 时,我们仅仅在泛型中设置了实体类,并没有指明数据库的表名或字段,这些数据是MyBatis-Plus 自动判断并对应起来的,它默认操作的表名和实体类型的类名一致,所以当表名有下划线时,如 user 变成 t_user,这时候再进行查询,就会出现异常。

所以针对实体类和数据库表或字段的一些列问题, MyBatis-Plus 提供了几个注解:

  1. @TableName(“数据表名”):用在实体类上,标识实体类对应的是那张数据表

    属性类型描述
    valueString对应数据库的表明,内部属性只有value时,可以省略直接写 “”
    resultMapStringxml 中 resultMap 的 id(用于满足特定类型的实体类对象绑定)
    autoResultMapboolean是否自动构建 resultMap 并使用(如果设置 resultMap 则不会进行 resultMap 的自动构建与注入)
    excludePropertyString[]需要排除的属性名
    keepGlobalPrefixboolean是否保持使用全局的 tablePrefix 的值(当全局 tablePrefix 生效时)
    schemaStringschema
  2. @TableId(value = “主键的字段名” , type = IdType.AUTO):用在属性上,表示该属性为主键

    • IdType.AUTO: 数据库 ID 自增
    • IdType.NONE:没有设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)
    • IdType.INPUT:insert 前自行 set 主键值
    • IdType.ASSIGN_ID:分配 ID(主键类型为 Number(Long 和 Integer)或 String),使用雪花算法
    • IdType.ASSIGN_UUID:分配 UUID,主键类型为 String
  3. @TableField(“字段名”):用于除主键外的其他属性上,用来和数据库字段名进行对应

    属性类型描述
    valueString数据库字段名
    existboolean是否为数据库表字段,默认为true
    conditionStringwhere查询比较条件,有值则按设置的值为准,没有则为默认全局的 %s=#{%s}
    updateStringupdate set 部分注入,例如:当在version字段上注解 update=“%s+1” 表示更新时会 set version=version+1(该属性优先级高于 el 属性)
    fillEnum字段自动填充策略
    selectboolean是否进行 select 查询,默认为true
    keepGlobalFormatboolean是否保持使用全局的 format 进行处理,默认为false
    jdbcTypeJdbcTypeJDBC 类型
    typeHandlerClass类型处理器
    numericScaleString指定小数点后保留的位数
  4. @FieldStrategy:字段策略枚举类

    描述
    IGNORED忽略判断
    NOT_NULL非 NULL 判断
    NOT_EMPTY非空判断(只对字符串类型字段,其他类型字段依然为非 NULL 判断)
    DEFAULT追随全局配置
    NEVER不加入SQL
  5. @TableLogic:用于数据库中表示删除的字段,因为在实际使用数据库是,不会真的删除某条数据,而是采用逻辑删除,比如设定一个deleted的字段,如为1则表示没有删除,如果为0则表示删除。

    而将 @TableLogic 就是用在这种字段对应的属性上,表示逻辑删除,这样在删除时,实际上执行的是update的修改。

    属性类型描述
    valueString逻辑未删除值
    delvalString逻辑删除值
  6. @OrderBy:内置 SQL 默认指定排序,优先级低于 wrapper 条件查询

    属性类型描述
    isDescboolean是否倒序查询,默认true
    sortshort数字越小越靠前
  7. @Version:乐观锁注解

3.5、代码生成器

在MyBatis-Plus中提供了代码生成器,我们提供了数据库表名后,代码生成器会根据表,自动生成 entity、mapper、service、controller等相关的代码,十分方便。

3.5.1、基础配置

  1. 数据库配置

    属性说明示例
    urljdbc 路径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();
    
  2. 全局配置

    方法说明示例
    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();
    
  3. 自动生成包的配置

    方法说明示例
    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();
    
  4. 模板配置

    方法说明示例
    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();
    
  5. 注入配置

    方法说明示例
    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();
    
  6. 策略配置

    方法说明示例
    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实体策略配置
    controllerBuildercontroller 策略配置
    mapperBuildermapper 策略配置
    serviceBuilderservice 策略配置
    new StrategyConfig.Builder().enableCapitalMode().enableSkipView().disableSqlFilter().likeTable(new LikeTable("USER")).addInclude("t_simple").addTablePrefix("t_", "c_").addFieldSuffix("_flag").build();
    
  7. 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();
    
  8. 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();
    
  9. 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();
    
  10. Mapper 策略配置

    方法说明示例
    superClass(Class)设置父类BaseMapper.class
    superClass(String)设置父类com.baomidou.global.BaseMapper
    enableMapperAnnotation开启 @Mapper 注解默认值:false
    enableBaseResultMap启用 BaseResultMap 生成默认值:false
    enableBaseColumnList启用 BaseColumnList默认值:false
    cache(Class)设置缓存实现类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()
    

3.5.2、 3.5.1以后版本


com.baomidoumybatis-plus-generator最新版本

org.apache.velocityvelocity-engine-core2.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();}

3.5.3、 3.5.1以前的版本

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

相关内容

热门资讯

“夫负妻戴”的意思 “夫负妻戴”的意思 成语拼音: [fū fù qī dài] ...
《平凡的世界》读后感 《平凡的世界》读后感(通用20篇)  读完某一作品后,大家心中一定有很多感想,何不静下心来写写读后感...
唐诗:杨万里《舟过安仁》 唐诗:杨万里《舟过安仁》  《舟过安仁》原文  宋代:杨万里  一叶渔船两小童,收篙停棹坐船中。  ...
元宵节看花灯作文 元宵节看花灯作文(精选12篇)  在生活、工作和学习中,大家都跟作文打过交道吧,作文是通过文字来表达...
弟子规入则孝原文 弟子规入则孝原文  “父母呼,应勿缓。父母命,行勿懒......”想必这段文字大家早已耳熟能详,我们...
《三只小猪和大灰狼》英泽中原... 《三只小猪和大灰狼》英泽中原文赏析  Three Little Pigs and a Big Wol...
文言文《杞人忧天》原文及翻译 文言文《杞人忧天》原文及翻译  你还在为如何理解文言文发愁吗?不懂文言文的意境不要紧,下面是小编收集...
一个消逝了的山村阅读练习及答... 一个消逝了的山村阅读练习及答案  我们大家知道想要学好语文,我们一定要在平常多加练习才行,为了帮助大...
骆驼祥子读书笔记 骆驼祥子读书笔记5篇  认真读完一本名著后,你有什么领悟呢?这时就有必须要写一篇读书笔记了!那么我们...
王国维《蝶恋花·阅尽天涯离别... 王国维《蝶恋花·阅尽天涯离别苦》赏析  《蝶恋花·阅尽天涯离别苦》是近代词人王国维的词。这首词一改前...
离骚原文带拼音 寒窑赋原文解读推荐度:拼音教学方法与步骤总结推荐度:带月的诗句带诗人推荐度:寒窑赋原文注解及译文推荐...
代词及练习(含答案) 代词及练习(含答案)  代词及练习(含答案)  第11章 代词  一.概念:  代词是代替名词的词,...
闻一多先生的阅读训练及答案 闻一多先生的阅读训练及答案  阅读  (1)“人家是说了再做,我是做了再说。”  (2)“人家说了也...
宋史列传节选文言文阅读及答案 宋史列传节选文言文阅读及答案  高登,字彦先,漳浦人。少孤,力学,持身以法度。绍兴二年,廷对,极意尽...
老人与海电影观后感 老人与海电影观后感两则  引导语:在某种意义上,所有事物都在互相残杀。捕鱼就是要了我的老命,可是它同...
鱼我所欲也的原文及翻译 鱼我所欲也的原文及翻译  鱼我所欲也原文:  鱼,我所欲也;熊掌,亦我所欲也。二者不可得兼,舍鱼而取...
《唐太宗吞蝗》文言文原文注释... 《唐太宗吞蝗》文言文原文注释翻译  上学的时候,我们最不陌生的就是文言文了吧?文言文就是白话文的提炼...
山宾卖牛的文言文原文及翻译 山宾卖牛的文言文原文及翻译  在平日的学习中,我们最不陌生的就是文言文了吧?文言文的特色是言文分离、...
张海迪的主要事迹内容 张海迪的主要事迹内容(精选13篇)  在日常学习、工作或生活中,大家对事迹材料都不陌生吧,事迹材料是...
辋川别业原文及赏析 辋川别业原文及赏析  辋川别业  作者:王维  不到东山向一年,归来才及种春田。  雨中草色绿堪染,...