Skip to content

单个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 &lt;= #{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 版本 才支持