首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MyBaitsPlus---Sql 注入器知识点补充

MyBaitsPlus---Sql 注入器知识点补充

作者头像
大忽悠爱学习
发布2021-11-15 15:01:26
发布2021-11-15 15:01:26
46100
举报
文章被收录于专栏:c++与qt学习c++与qt学习
运行总次数:0

自定义全局操作知识点补充


Sql 注入器

概念

就是让你自己写的sql语句和mp的默认sql语句(basemapper中的sql语句)一起启动,就不需要写映射文件了

根据MybatisPlus 的AutoSqlInjector可以自定义各种你想要的sql ,注入到全局中,相当于自定义Mybatisplus 自动注入的方法。

之前需要在xml中进行配置的SQL语句,现在通过扩展AutoSqlInjector 在加载mybatis环境时就注入。


步骤

1.定义SQL(继承AbstractMethod 子类)

代码语言:javascript
代码运行次数:0
运行
复制
public class FullAll 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.addSelectMappedStatementForTable(mapperClass, sqlMethod, sqlSource, tableInfo);
    }
}

2.注册(SQL 注入)

代码语言:javascript
代码运行次数:0
运行
复制
public class SqlInjector extends DefaultSqlInjector {

    @Override
    public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
        List<AbstractMethod> methodList = super.getMethodList(mapperClass);
      methodList.add(new FullAll());
        return methodList;
    }
}

3.对象配置(放入到容器中)

代码语言:javascript
代码运行次数:0
运行
复制
    @Bean
    public SqlInjector sqlInjector() {
        return new SqlInjector();
    }

4.把方法定义到BaseMapper(继承 BaseMapper 进行扩展,添加扩展的方法)

代码语言:javascript
代码运行次数:0
运行
复制
public interface BaseMapperPlus<T> extends BaseMapper<T> {
    List<T> findAll();
}

5.继承 BaseMapperPlus

代码语言:javascript
代码运行次数:0
运行
复制
@Mapper
public interface UserMapper extends BaseMapperPlus<User>
{
}

6.测试

代码语言:javascript
代码运行次数:0
运行
复制
@SpringBootTest
class SpringBootDaoApplicationTests
{
    @Autowired
    UserMapper userMapper;

    @Test
    void test6() {
        List<User> all = userMapper.findAll();
        all.forEach(System.out::println);
    }
}

注意

代码语言:javascript
代码运行次数:0
运行
复制
public interface MyBaseMapper<T> extends BaseMapper<T> {
    int mysqlInsertAllBatch(@Param("list") List<T> batchList);
}

演示批量保存使用mysql特有语法:

代码语言:javascript
代码运行次数:0
运行
复制
insert into user(id, name, age) values (1, "a", 17), (2,"b", 18)

坑点:

  • 在演示自定义批量和自动填充功能时,需要在mapper方法的参数上定义@Param(),
  • 而mp默认仅支持 list, collection, array 3个命名,不然无法自动填充
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/08/05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 自定义全局操作知识点补充
  • Sql 注入器
    • 概念
  • 步骤
    • 1.定义SQL(继承AbstractMethod 子类)
    • 2.注册(SQL 注入)
    • 3.对象配置(放入到容器中)
    • 4.把方法定义到BaseMapper(继承 BaseMapper 进行扩展,添加扩展的方法)
    • 5.继承 BaseMapperPlus
    • 6.测试
    • 注意
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档