单个Mapper模式
什么是单个Mapper模式? 以往我们都是一个实体类对应一个Mapper,这样有的人会反感;现在支持了单个Mapper模式,意味着你可以一个Mapper 到处使用!!!
1.如何使用单个Mapper ?
写一个接口继承BasicMapper
java
public interface MybatisBasicMapper extends BasicMapper {
}
spring 实例化MyBasicMapper
java
@MapperScan(basePackageClasses = MybatisBasicMapper.class, markerInterface = BasicMapper.class)
solon 实例化 MyBasicMapper
yaml
mybatis.master:
mappers: #支持包名 或 类名(大写开头 或 *)或 xml(.xml结尾);支持目录 ** 或 * 占位符
- "xxx.MyBasicMapper"
启动时,设置单Mapper的类
java
XbatisConfig.setSingleMapperClass(MybatisBasicMapper.class);
2.Dao实现类 由DaoImpl 改成 BasicDaoImpl(没有Dao层,这个忽略)
java
@Repository
public class SysRoleDaoImpl extends BasicDaoImpl<SysRole, Integer> implements SysRoleDao {
@Autowired
public SysRoleDaoImpl(MybatisBasicMapper mybatisBasicMapper) {
super(mybatisBasicMapper);
}
@Override
protected MybatisBasicMapper getMapper() {
return (MybatisBasicMapper) this.mapper;
}
}
3.开始使用
3.1有dao的和原来没太多区别
@Autowired
private AppVersionDao appVersionDao;
3.2 mapper 使用 看下面
4 mapper 使用
4.1 自动注入
@Autowired
private MybatisBasicMapper mybatisBasicMapper;
4.2 使用
mybatisBasicMapper.save(T);
mybatisBasicMapper.update(T);
部分需要实体类的例如 deleteById getById的
mybatisBasicMapper.deleteById(AppVersion.class,1);
mybatisBasicMapper.getById的(AppVersion.class,1);
4.3 QueryChain怎么使用basicMapper?
不仅仅QueryChain,其他XXChain 也是一样的
QueryChain.of(mybatisBasicMapper, AppVersion .class).eq(AppVersion::getId,1);
4.4 如果sq太复杂 我需要在xml里写,怎么处理
xml
<mapper namespace="xxx.MybatisBasicMapper">
<select id="xmlTest" resultType="com.xbatis.core.test.DO.SysRole">
select *
from sys_role
where id >= #{id}
and id <= #{id2}
order by id asc
</select>
</mapper>
java
public interface MybatisBasicMapper extends BasicMapper {
//可以写自己的方法了
List<SysRole> xmlTest(@Param("id1") Integer id1, @Param("id2") Integer id1);
}
or
//注意 你的xml ID应该为 SysRole:query 参数可以是Map或者对象 都可以
mybatisBasicMapper.withSqlSession(SysRole.class, "query", new HashMap() {{
put("id", 1);
put("id2", 2);
}}, (statement, params, sqlSession) -> {
return sqlSession.selectList(statement, params);
});
然后直接用就可以了 (xml自动分页什么的,其他框架支持的都支持)
5: 代码生成器怎么弄?
mapperConfig 这里 enable 设置为 false 即可;
.mapperConfig(mapperConfig -> {mapperConfig.enable(false).superClass(MybatisBasicMapper.class);})
注意 需要代码生成器
1.0.6
版本 才支持