Mybatis-Plus Sql 注入器
程序员文章站
2022-10-04 08:21:07
Mybatis+Mybatis-PlusSpring+Mybatis+Mybatis-PlusSpring Boot+Mybatis+Mybatis-PlusMybatis-Plus通用CRUDMybatis-Plus配置Mybatis-Plus条件构造器Mybatis-Plus ActiveRecord模式CRUDMybatis-Plus Oracle 主键SequenceMybatis-Plus插件在Mybatis-Plus中,通过AbstractSqlInjector将Bas.....
在Mybatis-Plus中,通过AbstractSqlInjector将BaseMapper中的方法注入到了Mybatis容器,这样这些方法才可以正常执行。
那么,如果我们需要扩充BaseMapper中的方法,又该如何实现呢?
编写MyBaseMapper
public interface MyBaseMapper<T> extends BaseMapper<T> { List<T> findAll(); // 扩展其他的方法 }
其他的Mapper都可以继承MyBaseMapper,这样实现了统一的扩展。
如:public interface UserMapper extends MyBaseMapper<User> { User findById(Long id); }
编写MySqlInjector
如果直接继承AbstractSqlInjector的话,原有的BaseMapper中的方法将失效,所以我们选择继承DefaultSqlInjector进行扩展。
public class MySqlInjector extends DefaultSqlInjector { @Override public List<AbstractMethod> getMethodList() { List<AbstractMethod> methodList = new ArrayList<>(); // 获取父类中的集合 methodList.addAll(super.getMethodList()); // 再扩充自定义的方法 methodList.add(new FindAll()); return methodList; } }
编写FindAll
public class FindAll extends AbstractMethod { @Override public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) { String sqlMethod = "findAll"; String sql = "select * from " + tableInfo.getTableName(); SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass); return this.addSelectMappedStatement(mapperClass, sqlMethod, sqlSource, modelClass, tableInfo); } }
注册到Spring容器
@Bean // 注入自定义的SQL注入器 public MySqlInjector mySqlInjector() { return new MySqlInjector(); }
测试
@Test public void testFindAll() { List<User> users = this.userMapper.findAll(); for (User user : users) { System.out.println(user); } }
执行日志
[main] [cn.com.javakf.mapper.UserMapper.findAll]-[DEBUG] ==> Preparing: select * from tb_user [main] [cn.com.javakf.mapper.UserMapper.findAll]-[DEBUG] ==> Parameters: [main] [cn.com.javakf.mapper.UserMapper.findAll]-[DEBUG] <== Total: 7 Time:15 ms - ID:cn.com.javakf.mapper.UserMapper.findAll Execute SQL: select * from tb_user
至此,我们实现了全局扩展SQL注入器。
本文地址:https://blog.csdn.net/weixin_45730091/article/details/107357517
上一篇: DCL(双检锁单例模式)到底需不需要volatile?
下一篇: JavaSE第十二章 继承