mybatis字段合并_MyBatis(2)之MyBatis-Generator最佳实践

更新时间:2023-05-31 08:31:06 阅读:12 评论:0

mybatis字段合并_MyBatis(2)之MyBatis-Generator最佳实
⾃定义注释
⾃定义注解
指定xml⽂件模式
上⼀篇⽂章详细阐述了xml配置⽂件的各种标签及其含义。其实从标签开始,每⼀个标签都对应⼀个实体类。context.class对应标签,⽽每⼀个⼦标签都对应⼀个属性;如图:
美好时节
标签与实体类的对应关系
。有了实体类的关系,那么⾃定义起来还不是易如反掌。
⾃定义添加注释
以⽤数据库中字段的注释,作为Model属性的注释为例:
针对注解的标签是,对应的接⼝实体类是CommentGenerator,该类中封装了针对GetterComment、SetterComment、FieldComment、ClassComment以及xml中的注解,这些⽅法在⽣成实体类时,会通过Context被调⽤;该接⼝默认有默认的实现类DefaultCommentGenerator。切⼊点就是该DefaultCommentGenerator:
七年级下册语文古诗1. 去除原始的Getter、Setter⽅法的默认注释,只要实现addSetterComment、addGetterComment⽅法,返回为空,原⽣注释就不
会再⽣成;
2. 实现addFieldComment⽅法(管控Model属性的注释内容),具体如下:
福建省城市排名
@Override public void addFieldComment(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) { StringBuffer sb = n " + ""); //该字段的comment 信息 sb.append("*" + Remarks()); field.String()); field.addJavaDocLine("*
"); field.addJavaDocLine("**/"); }
解释:
屋面防水施工工艺流程
1. addFieldComment⽅法有重载,意思是是否标注当前属性对应数据库的那个字段,看个⼈需要选择性实现。
2. IntrospectedTable实体类封装了数据库表对应的原始信息,相应的IntrospectedColumn则是封装了表中字段的原始信息,所有我
国考报名条件们通过该对象获取到字段的注释,在添加到实体类的属性上.(我这个地⽅没有封装,源码中是封装了⽣成所有注释的通⽤⽅法,实际运⽤中可统⼀封装)。
3. MyBatis将java中类、⽅法、接⼝、枚举、内部类、内部类枚举抽象成JavaElement对象,⽽Field则是针对类中属性的封装。
面生4. 本⼈感觉xml⽂件中的注释多余,就实现addComment⽅法,不做任何的实现,去除xml中的原⽣注释;
1985年出生⾃定义注解
在⽬前我们开发中,注解使⽤的⾮常⼴发,⼤⼤简化了我们的开发,⽐如:
LomBook针对实体类对象各种注解,最常⽤的@Data(@Setter,@Getter)、@NoArgsConstructor等。那能否再Model上⾃动添加上我们需要的注解呢?
我们知道Spring Boot中Mapper接⼝对应的注解是@Repository注解,但原⽣⽣成时不会有该注解的,那要⼀个⼀个类⼿动添加吗?针对以上需求,我们详细聊聊PluginAdapter。通过Idea查看该类的结构,可以看到该中⽅法⾮常之多,但可分为:clientxxxx相关的⽅法控制Mapper接⼝⽣成规则,细粒度到每个能够⽣成的⽅法上
sqlMapxxxx相关⽅法控制xml⽂件⽣成的⽅式,细粒度到每个能够⽣成的⽅法上;
modelxxxx相关⽅法控制Model类的⽣成规则。model类的⽣成规则有三种,所以model相关的⽅法也是关于三种规则⽣成时的相关⽅法;
针对以上需求,我们逐个击破:
1. ⽣成的Model上增加Lombook相关的注释,继承PluginAdapter类,重写modelBaRecordClassGenerated⽅法,具体如下:
@Override public boolean modelBaRecordClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) { javaTypes().forEach(
通过上⾯⽅法,在⽣成Model时会⾃动添加上相应的注解;再⽐如:Spring Boot的Swagger也是通过注解,如果返回前端的实体类也是通过Mybatis Generator⾃动⽣成,那么就可以将@ApiModel以及@ApiModelProperty注解添加到⽣成的类中;是不是特别的⽅便;
xml⽂件的两种模式
在MyBatis⽣成的xml默认是append的⽅式,⽐如:随着需求版本的迭代,数据库中的字段改变,对应的实体类以及xml需要重新⽣成,那么默认新⽣成的xml内容,会追加到旧的版本中,这时启动项⽬会报错(resultMap标签重复),所以这时需要将旧的覆盖掉;
此时我们要⼲预xml⽂件的⽣成⽅式,那么继承PluginAdaptor重写sqlMapGenerated⽅法。该⽅法中GeneratedXmlFile参数是封装xml ⽂件的所有属性,其中私有属性isMergeable即是否合并的意思,默认为fal,那么我们现在就要改变该属性的值。可惜的是该属性没有
公开,需要通过反射改变,具体如下:
鲁滨逊漂流记读后感600字
@Override public boolean sqlMapGenerated(GeneratedXmlFile sqlMap, IntrospectedTable introspectedTable) { try { Field field = Class().getD 在⽣成时就会覆盖原来的旧⽂件。那如果⾃定义的sql也写在该⽂件,那么也会被覆盖,⽬前我实践的解决⽅案有两种:
1. 通过版本管理⼯具控制。⽐如git,被覆盖掉的⽅法,都会有提⽰或者能够重新回退到最近的⼀个版本,⽅法就可以再找回来;
2. 分两个xml⽂件,同⼀个Mapper接⼝对应两个xml,⼀个是⾃动⽣成的,永远保存⾃动⽣成的,另外在创建⼀个⾃定义的sql语句的
xml⽂件。
3. 个⼈推荐第⼆种,最不易出错。

本文发布于:2023-05-31 08:31:06,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/819126.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:注释   属性   对应
相关文章
留言与评论(共有 0 条评论)
昵称:
匿名发表 登录账号
         
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图