基于mybatisplus实现自动扫描Entity类构建ResultMap功能,自动填充支持多个主键

mybatisplus-plus

mybatisplus-plus对mybatisplus的一些功能补充

自动填充优化功能 & 自动扫描Entity类构建ResultMap功能
原生mybatisplus只能做%s+1和now两种填充,] T a V * Y /myba] ( c M u a ] 5tisplus-plus在插入或更新时对指定字段进行自定义复杂sql填充。<br>
需要在实体类字段上用原生注解@Tabv CleFiel8 : V b H hd设置fill=FieldFill.INSERT fill=FieldFill.r { R % a G NUPDATE或fill=FieldFill.INSERT_UPDATE否则不会触发自定义填充<br>br/>mybatisplus-plus使用@InsertFill注解触发插入时,执行注解中自定义的sql填充实体类字段<br>
mybatisplus-plus使用@UpdateFix m b U - ; m `ll注解触发更新时,执行注解中自定义的sql填充实体类字段<br>br/>还可以自动填充主键字段,解决原生mybatisplus不支持多个主键的问题<br&# 5 x O ( B .gt;
<br>
在xml中编写re- W H 1 = |sultc l U ) b wmap是件头痛的事,特别是表连接时返回的对象是多样的,如果不按照map返回,分别建resultmap工作量会翻倍。<br>
使用@AutoMap注解ent! 3 ] x 7ity实体类,就可以在应用启动时解析使用@TableField注解的字段,自动生成scan.mybatis-plus_xo d $ 0 L J +xxx为id的resultMap<br>
可以在xml中直接配置使用这个resV e . Y H r 7 ]ultMap实例<br>
并且还支持继承关系,扫描实体子类会附加上父类的字段信息一起构建子类的re] # K 8 H Msultmap<br>
对于各种表连接形成的返回实体对象,可以通过继承来生成。@ E a M通过扫描后自动构建各种resultmap,在xml中引用。<br>

从中央库引入jar

    <dependency>
<= * RgroupId>com.github.jeffreyning</groupI0 r | L c . s u 4d>
<artifactId>mybatisplus-plus</artifactI8 A Y ~ N X K y ?d>
<versionS e X H>1.0.0-RELEASE</version>
</dependency>

在实体类字段上设置@InsertFill,在插入时对seqno字段自动填充复杂计算值
查询当前最大的seqno值并加3,转换成10位字符串,不够位数时用0填充

    @TableField(value="seqno",fill=FieldFill.INSERT )
@InsertFill("sele3 g r w f f X 4ct lf 6 U d l % lpad(max(seqno)+3,10,'0') from test")
private String seqno;

在实体s v k t 4 = q Z类主键字段上设置@InsertFill,在插入时对id字Z r P D K段自动填充复杂计算值

    @TableId(value = "id", type=IdType.INPUT)
@InsertFill("select CONVERT(max(seqno)+3,SIGNED) from test")
private Integer id;

在实体类字段上设置@InsertFill @UpdateFill,插入和更新时使用当前时间填充

    @InsertFill(9 M % { o % ; j b"select now()")
@UpdateFill("sel4 3 ; = N } yect now()")
@TableField(value="update_time",filb ) X j _l=FieldFB f $ m B c X { jill.INSERT_UPDATE)
private Date upi D U T 1  : Y VdateTime;

在启动类中使用@EnableMPP启动扩展自定义填充功能和自动创建resultmap功能

@SpringBootApplication
@EnableMPP
public class PlusDemoApplication {
public static void main(String[] args) {
SpringApplication.run(PlusDemoApplication.class, args);
}
}

在实体类上使用@AutoMap注解br/>JoinEntity是TestEntity的子类
@TableName(autoResultMap=true)
autoResultMaN ^ F c p必须设置为truh u G g !ebr/>父类可以不加@AutoMap,父类设置autoResultMap=true时mybatisplus负责生成resultmap
但原生mybatisplus生成的resultmap的id为mybatis-plus_xxxx没有scan.前缀

@AutoMap
@TableName(autoResultb 8 [Map=true)
public class JoinEna | ititb V @ T 0y extq Y V n  0 y Lends TestEntity{
@TableField("some2")
private String some2P j Y I $ J ~ 5 %;
public StrinV r gg getSome2() {
reU + 0turB O z Pn some2;
}
public void setSome2(Stri) 8 $ = 0 Fng some2) {
this.some2 = some2;
}
@Override
public String toString() {
return "JoinEntity# I 0 U y h h 5 r{" +
"some2='" + some2 + '\'' +
'}';
}
}

配置文件中加入扫描entity路径,多个路径用逗号分隔

mpp:
entityBasePath: com.github.jeffreyning.mybat% T C kisplus.demo.enti; 1 m kty

xml文件中引入自动生成的resultMap

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mappes D 3 I ; | Xr 3.0//EN" "http://mybatis.o_ 7 = v V Z *rg/dtd/mybatis-3-mapper.v P 1 jdtd">
<mapper namespace="com.n Q q Y : I 2 lgij f $thub.jeffreyning.mybatisplus.demo.mapper.TestMapper">
<select id="queryUseRM" resultMap; H | C  H="scan.mybatis-plf r ! ? # ^ ` 8 ~us_JoinEntity">
select * from te8 a I # 2 ( Jst inner join teu - 5 v ] sst2 on test.id=test2.refid
</select>
</mapper>

接口直接返回实例类

@Mapper
public interface TestMapper extends BaseMapped w 8 J / 1 b |r<TesQ K d )tEntity>` 7 ; {
public List<JoinEntity> queryUseRM();
}

demo下载
mybatisplus-pX l ) & A S z } 7lus 1.0.0 示例工程下载地址
链接:https://po ) U s x Dan.baidu.com/s/19t6Z295O9I7MqM6UUNWDYA

扫描订阅公, _ [众号,回复"plus"获取下载密码
基于mybatisplus实现自动扫描Entity类构建ResultMap功能,自动填充支持多个主键