MybatisPlus的sql注入器使用!

前端之家收集整理的这篇文章主要介绍了MybatisPlus的sql注入器使用!前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。


本文代码样例均已上传至Gitee:https://gitee.com/tqbx/springboot-samples-learn

基本使用

  1. 创建方法的类,继承AbstractMethod。
  1. /**
  2. *
  3. * 删除全部
  4. * @author Summerday
  5. */
  6. public class DeleteAll extends AbstractMethod {
  7. @Override
  8. public MappedStatement injectMappedStatement(Class<?> mapperClass,Class<?> modelClass,TableInfo tableInfo) {
  9. // 执行sql,动态sql参考类sqlMethod
  10. String sql = "delete from " + tableInfo.getTableName();
  11. // mapper方法接口名一致
  12. String method = "deleteAll";
  13. sqlSource sqlSource =
  14. languageDriver.createsqlSource(configuration,sql,modelClass);
  15. return this.addDeleteMappedStatement(mapperClass,method,sqlSource);
  16. }
  17. }
  1. 创建注入器,既可以继承DefaultsqlInjector,也可以实现IsqlInjector接口。
  1. /**
  2. * 自定义sql注入
  3. * @author Summerday
  4. */
  5. @Component
  6. public class MysqLInjector extends DefaultsqlInjector {
  7. @Override
  8. public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
  9. List<AbstractMethod> methodList = super.getMethodList(mapperClass);
  10. //增加自定义方法
  11. methodList.add(new DeleteAll());
  12. methodList.add(new FindOne());
  13. /*
  14. * 以下 3 个为内置选装件
  15. * 头 2 个支持字段筛选函数
  16. */
  17. // 例: 不要指定了 update 填充的字段
  18. methodList.add(new InsertBatchSomeColumn(i -> i.getFieldFill() != FieldFill.UPDATE));
  19. methodList.add(new AlwaysUpdateSomeColumnById());
  20. methodList.add(new LogicDeleteByIdWithFill());
  21. return methodList;
  22. }
  23. }
  1. 如果想要所有的mapper都拥有自定义方法,可以自定义接口继承BaseMapper接口,我们的业务接口就可以继承自定义的baseMapper接口了。
  1. /**
  2. * 自定义baseMapper接口
  3. * @author Summerday
  4. */
  5. public interface MyBaseMapper<T> extends BaseMapper<T> {
  6. //自定义方法,删除所有,返回影响行数
  7. int deleteAll();
  8. // 根据id找到
  9. T findOne(Serializable id);
  10. }
  11. @Mapper
  12. public interface UserMapper extends MyBaseMapper<User> {
  13. }
  1. 测试接口
  1. @RunWith(SpringRunner.class)
  2. @SpringBootTest
  3. class InjectTest {
  4. @Resource
  5. UserMapper userMapper;
  6. @Test
  7. void inject(){
  8. int rows = userMapper.deleteAll();
  9. System.out.println(rows);
  10. }
  11. @Test
  12. void findOne(){
  13. User one = userMapper.findOne(1L);
  14. System.out.println(one);
  15. }
  16. }

选装件

  1. InsertBatchSomeColumn:批量新增数据,自选字段insert

  2. LogicDeleteByIdWithFill:根据id逻辑删除数据,并带字段填充功能

  3. AlwaysUpdateSomeColumnById:根据 ID 更新固定的那几个字段(但是不包含逻辑删除

  1. /*
  2. * 以下 3 个为内置选装件
  3. * 头 2 个支持字段筛选函数
  4. */
  5. // 例: 不要指定了 update 填充的字段 排除逻辑删除,和"age"字段
  6. methodList.add(new InsertBatchSomeColumn(
  7. i -> i.getFieldFill() != FieldFill.UPDATE
  8. && !i.isLogicDelete()
  9. && !"age".equals(i.getColumn())));
  10. // 筛选字段
  11. methodList.add(new AlwaysUpdateSomeColumnById(
  12. i -> !"age".equals(i.getColumn())));
  13. methodList.add(new LogicDeleteByIdWithFill());

猜你在找的Mybatis相关文章