前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mybatis-plus自定义sql注入器

mybatis-plus自定义sql注入器

作者头像
许喜朝
发布2020-08-11 16:30:29
2K0
发布2020-08-11 16:30:29
举报

mybatis-plus:自定义sql注入器

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

以findAll方法为例

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

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

代码语言:javascript
复制
/**
 *创建自己的BaseMapper,指定泛型;添加一个findAll方法;
 */

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

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

代码语言:javascript
复制
/**
 * Mapper接口
 */
@Mapper
public interface AutoMapper extends MyBaseMapper<Car> {

}

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

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

代码语言:javascript
复制
/**
 * 继承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类来写)

代码语言:javascript
复制
**
 * 自定义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容器

代码语言:javascript
复制
/**
 * 自定义sql注入器
 * @return
 */
@Bean
public MySqlInjector mySqlInjector(){
    return new MySqlInjector();
}

在测试类中测试

代码语言:javascript
复制
//测试自己定义的findAll方法
@Test
void testFindAll(){
    List<Car> all = autoMapper.findAll();
    all.forEach(System.out::println);
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-07-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • mybatis-plus:自定义sql注入器
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档