单个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
MybatisMpConfig.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 使用
java
mybatisBasicMapper.save(T);
mybatisBasicMapper.
update(T);
部分需要实体类的例如 deleteById getById的
java
mybatisBasicMapper.deleteById(AppVersion .class,1);
mybatisBasicMapper.getById的(AppVersion .class,1);
4.3 QueryChain怎么使用basicMapper?
不仅仅QueryChain,其他XXChain 也是一样的
java
QueryChain.of(mybatisBasicMapper, AppVersion .class).eq(AppVersion::getId,1);
4.4 如果sq太复杂 我需要在xml里写,怎么处理
xml
<mapper namespace="xxx.MybatisBasicMapper">
<select id="xmlTest" resultType="com.mybatis.mp.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);
}
然后直接用就可以了 (xml自动分页什么的,其他框架支持的都支持)
5: 代码生成器怎么弄?
mapperConfig 这里 enable 设置为 false 即可;
.mapperConfig(mapperConfig -> {mapperConfig.enable(false).superClass(MybatisBasicMapper.class);})
注意 需要代码生成器
1.0.6
版本 才支持