省力写法-必看
这些都是作者推荐的省心、省力、省事写法
指定数据库类型
虽然 xbatis 支持自动识别,但是具有一定损耗,能加尽量加上
yaml
mybatis:
configuration:
databaseId: MYSQLdatabaseId 不是乱写的;具体看 (数据库ID)
select 、from、returnType 都可以省略
- 假如 只select 当前Mapper的实体类:可不写 select
- 假如 from的是当前Mapper的实体类:可不写 from
- 假如 返回的是当前Mapper的实体类:可不写 returnType
- 假如 select(类)和returnType(类)一样:可不写 select
java
SysUser sysUser = QueryChain.of(sysUserMapper)
.eq(SysUser::getId,1)
.get();一键忽略null,忽略空字符串,自动对字符串进行去空格
java
SysUser sysUser = QueryChain.of(sysUserMapper)
// 忽略 null 条件参数
// 忽略 空字符串 条件参数
// 对字符串进行trim 去空格操作
.forSearch(true)
.eq(SysUser::getUserName, null )
.eq(SysUser::getUserName, "" )
.eq(SysUser::getUserName," admin ")
.get();更多说明:前往 这里 查看
手动优雅忽略条件
java
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();简单自动select列
select(实体类.class) 或 select(VO.class) 都可以自定帮你select所需要的列;
java
public class Demo {
@Autowired
private SysUserMapper sysUserMapper;
public void page() {
Pager<SysUser> pager= QueryChain.of(sysUserMapper)
.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映射 - 构建复杂的结构类
xbatis 实现
- 结果自动映射(多复杂的都可以映射)
- 重复列名 根本无需担心
- 可以构建 多重内嵌结构 例如:
@ResultEntity(A对应实体类.class)
class A {
@NestedResultEntity(target=(B对应实体类.class)
B b;
}
class B {
@NestedResultEntity(target=(C对应实体类.class)
List<C> cs;
}
class C {
Integer id;
}更多更复杂的映射,前往 VO映射注解 查看
链路操作 - connect方法 - 拿到自己的句柄
java
List<SysUser> 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();推荐数据库函数调用方式
java
import static db.sql.api.impl.cmd.Methods.*;
public class Demo {
@Autoware
private SysUserMapper sysUserMapper;
public void test(){
Integer id = QueryChain.of(sysUserMapper)
.select(SysUser::getId, c -> sum(add(c,1)))
//SQL:select sum(c+1)
.returnType(Integer.TYPE)
.get();
}
}简洁,直观,友好一些
关于注解字段名 或 其他注解属性的填写
1、如果VO的字段和实体类的字段名一样 可以不设置注解的属性名
java
@ResuleEntityFiled(property="xxx")
private String xxx;
//推荐 下面的写法
@ResuleEntityFiled
private String xxx;2、不推荐写死字段名,建议配合lombok生成字段名
java
@ResuleEntityFiled(property="xxx2")
private String xxx;
//推荐 下面的写法
@ResuleEntityFiled(property=X.Fields.xxx2)
private String xxx;
//lombok 注解 自动生成类的字段名 X.Fields.xxx2
@FieldNameConstants
public class X{
private String xxx2;
}