xbatis 是什么
xbatis 是一款基于 mybatis 的 ORM 框架,ORM 程度非常高,几乎不需要再写 SQL;
同时内置多种数据库函数 , 具有良好的不同数据库迁移能力,注意它可以同时支持多种数据库!!!,一款真正意义上的 ORM 框架
xbatis 具有良好程序设计,非常稳定(经过 testcase 验证);优雅的 API、简而易懂的方法操作,让你写代码和写 SQL 几乎一样,学习成本几乎为零。
功能强大,支持 多表 / 子查询,自动分页,优雅的 XML 自动分页等众多功能!!
支持分页,原生自带或 XML 中自动分页
public class Demo {
@Autowired
private SysUserMapper sysUserMapper;
public void page() {
Pager<SysUser> pager= QueryChain.of(sysUserMapper)
.join(SysUser::getRoleId, SysRole::getId)
.like(SysUser::getUserName,"abc")
.paging(Pager.of(1));
}
}
不喜欢 JOIN,又不想写代码,懒?可以
@Data
@ResultEntity(SysUser.class)
public class SysUserVo {
private Integer id;
private String userName;
private LocalDateTime createTime;
@Fetch(source = SysUser.class , property=SysUser.Fields.roleId, target = SysRole.class, targetProperty = SysRole.Fields.id, targetSelectProperty = SysRole.Fields.roleName, orderBy = SysRole.Fields.id+" asc")
private List<String> sysRoleNames;
@Fetch(source = SysUser.class , property=SysUser.Fields.roleId, target = SysRole.class, targetProperty = SysRole.Fields.id, orderBy = SysRole.Fields.id+" asc")
private List<SysRole> sysRoles;
}
@Service
public class Test{
@Autowired
private SysUserMapper sysUserMapper;
public void demo() {
Pager<SysUserVo> pager = QueryChain.of(sysUserMapper)
.select(SysUserVo.class)
.eq(SysUser::getId,1)
.like(SysUser::getUserName,"xxx")
.returnType(SysUserVo.class)
.paging(Pager.of(1,10));
}
}
单表查询,自动加载另外一张表数据,省事
枚举名称,还需要自己注入?来
@Data
@ResultEntity(SysUser.class) public class SysUserVo {
private Integer id;
private String userName;
private String password;
private Integer status;
@PutEnumValue(source = SysUser.class, property = SysUser.Fields.status, target = StatusEnum.class) private String statusName;
}
一个注解搞定,牛不牛,再也不用自己写代码搞了
不同数据库,我想执行不同的函数或 sql,怎么弄?来这里
SysUser sysUser = QueryChain.of(sysUserMapper)
.select(SysUser::getId)
// dbAdapt((query, selector) 可以多次
.dbAdapt((query, selector) -> {
selector.when(DbType.H2, (dbType) -> {
//H2 拼接 id = 3
query.eq(SysUser::getId, 3);
}).when(DbType.MYSQL, (dbType) -> {
//MYSQL 拼接 id = 3
query.eq(SysUser::getId, 2);
}).otherwise((dbType) -> {
//其他 拼接 id = 3
query.eq(SysUser::getId, 1);
});
})
.get();