在Mybatis-Plus中,通过AbstractSqlInjector将BaseMapper中的方法注入到了Mybatis容器,这样这些方法才可以正常执行。
那么,如果我们需要扩充BaseMapper中的方法,又该如何实现呢?
public interface MyBaseMapper<T> extends BaseMapper<T> { List<T> findAll(); // 扩展其他的方法 }
其他的Mapper都可以继承MyBaseMapper,这样实现了统一的扩展。
如:public interface UserMapper extends MyBaseMapper<User> { User findById(Long id); }
如果直接继承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; } }
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); } }
@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
如对本文有疑问, 点击进行留言回复!!
rfid档案管理-基于RFID技术在智能档案柜管理中的应用—铨顺宏
SpringBoot引用阿里easyexcel,Excel导出返回浏览器下载
HashMap、Hashtable、ConcurrentHashMap三者间的异同
网友评论