600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > mybatis-plus自定义sql注入器

mybatis-plus自定义sql注入器

时间:2022-09-22 23:57:45

相关推荐

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接口*/@Mapperpublic interface AutoMapper extends MyBaseMapper<Car> {}

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

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

/*** 继承DefaultSqlInjector类,可以获取到BaseMapper原有的方法;* 重写getMethodList方法;添加自己的方法;*/public class MySqlInjector extends DefaultSqlInjector {@Overridepublic 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 {@Overridepublic 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*/@Beanpublic MySqlInjector mySqlInjector(){return new MySqlInjector();}

在测试类中测试

//测试自己定义的findAll方法@Testvoid testFindAll(){List<Car> all = autoMapper.findAll();all.forEach(System.out::println);}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。