您现在的位置是:首页 > 文章详情

mybatis-mp 之简单省力方法,超实用!!!

日期:2024-07-26点击:193

省力写法-必看

这些都是作者推荐的省心、省力、省事写法

指定数据库类型

虽然 mybatis-mp 支持自动识别,但是具有一定损耗,能加尽量加上

 mybatis: configuration: databaseId: MYSQL 

select 、from、returnType 都可以省略

  1. 假如 只select 当前Mapper的实体类:可不写 select

  2. 假如 from的是当前Mapper的实体类:可不写 from

  3. 假如 返回的是当前Mapper的实体类:可不写 returnType

 SysUser sysUser = QueryChain.of(sysUserMapper) .eq(SysUser::getId,1) .get(); 

一键忽略null,忽略空字符串,自动对字符串进行去空格

 SysUser sysUser = QueryChain.of(sysUserMapper) // 忽略 null 条件参数 // 忽略 空字符串 条件参数 // 对字符串进行trim 去空格操作 .forSearch(true) .eq(SysUser::getUserName, null ) .eq(SysUser::getUserName, "" ) .eq(SysUser::getUserName," admin ") .get(); 

更多说明:前往 这里 查看

手动优雅忽略条件

 Integer id= XXX; String userName= YYY; SysUser sysUser = QueryChain.of(sysUserMapper) .select(SysUser.class,SysRole.class) .from(SysUser.class) .eq(SysUser::getId,id,Objects::nonNull) .like(SysUser::getUserName,userName,StringUtils::isNotBlank) .get(); 

join 可不用再写on条件

配合 @ForeignKey 注解 可以不用再写on条件

 @Data @Table public class SysUser { @TableId private Integer id; private String userName; private String password; @ForeignKey(SysRole.class) private Integer roleId; private LocalDateTime createTime; } 
 public class Demo { @Autowired private SysUserMapper sysUserMapper; public void page() { Pager pager= QueryChain.of(sysUserMapper) .select(SysUser.class) .from(SysUser.class) .join(SysUser.class,SysRole.class) .like(SysUser::getUserName,"abc") .returnType(SysUser.class) .paging(Pager.of(1)); } } 

简单自动select列

select(实体类.class) 或 select(VO.class) 都可以自定帮你select所需要的列

 public class Demo { @Autowired private SysUserMapper sysUserMapper; public void page() { Pager pager= QueryChain.of(sysUserMapper) .select(SysUser.class) // or select(SysUserVO.class) .from(SysUser.class) .like(SysUser::getUserName,"abc") .returnType(SysUser.class) .paging(Pager.of(1)); } } 

结果映射 - VO自动映射 - 如何得到不同的类型的结果?

使用 returnType(XX.class)方法,设置你想要的结果的类型

XX类型 可以是 简单的基本类型包装类,实体类,VO类

实体类:依赖实体类注解 前往 @Table 查看

VO: 依赖VO注解 前往 @ResultEntity 查看

VO映射 - 构建复杂的结构类

mybatis-mp 实现

  1. 结果自动映射(多复杂的都可以映射)

  2. 重复列名 根本无需担心

  3. 可以构建 多重内嵌结构 例如:

 @ResultEntity(A对应实体类.class) class A { @NestedResultEntity(target=(B对应实体类.class) B b; } class B { @NestedResultEntity(target=(C对应实体类.class) List cs; } class C { Integer id; } 

更多更复杂的映射,前往 VO映射注解 查看

链路操作 - connect方法 - 拿到自己的句柄

 List list=QueryChain.of(sysUserMapper) .select(SysUser::getId,SysUser::getUserName,SysUser::getRole_id) .from(SysUser.class) .connect(query->{ query.exists(SubQuery.create() .select1() .from(SysUser.class) .eq(SysUser::getId,query.$(SysUser::getId)) .isNotNull(SysUser::getPassword) .limit(1) ); }) .list(); 
原文链接:https://www.oschina.net/news/304048
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章