mybatis-plus自定义sql注入器

mybatis-plus:自定义sql注入器

虽然mybats-plus的BaseMapper提供了非常好用,非常多的方法,但是如果我们需要扩充BaseMapper中的方法又该如何实现呢

以findAll方法为例

新建一个spring-boot项目 引入mybatis-plus依赖

在com.mp.Mapper包中新建MyBaseMapper接口

/**
 *创建自己的BaseMapper,指定泛型;添加一个findAll方法;
 */

public interface MyBaseMapper<T> extends BaseMapper<T> {
    List<T> findAll();
}

新建一个AutoMapper接口继承MyBaseMapper接口

/**
 * Mapper接口
 */
@Mapper
public interface AutoMapper extends MyBaseMapper<Car> {

}

该接口作为mapper接口与Controller交互

新建sqlInjector包编写自定义的sql注入器:MySqlInjector

/**
 * 继承DefaultSqlInjector类,可以获取到BaseMapper原有的方法;
 * 重写getMethodList方法;添加自己的方法;
 */

public class MySqlInjector extends DefaultSqlInjector {
    @Override
    public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
        List<AbstractMethod> methodList = super.getMethodList(mapperClass);
        //把自己的方法实例添加到集合;
        // 需要是参照MP的方法写FindAll类(sql语句封装为MappedStatement);
        methodList.add(new FindAll());
        return methodList;

    }
}

在sqlInjector包下创建FindAll类(参考SelectList类来写)

**
 * 自定义findAll查询方法的封装类;
 * 参照MP的方法写FindAll类(sql语句封装为MappedStatement)*/

public class FindAll extends AbstractMethod {
    @Override
    public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
        String sqlMethod = "findAll";//方法名
        String sql = "select * from " + tableInfo.getTableName();//sql语句
        SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);
        return this.addSelectMappedStatementForTable(mapperClass, sqlMethod, sqlSource, tableInfo);
        
    }
}

在spring-boot启动类中注册到spring容器

/**
 * 自定义sql注入器
 * @return
 */
@Bean
public MySqlInjector mySqlInjector(){
    return new MySqlInjector();
}

在测试类中测试

//测试自己定义的findAll方法
@Test
void testFindAll(){
    List<Car> all = autoMapper.findAll();
    all.forEach(System.out::println);
}
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值