文档章节

Mybatis Plus sql注入器

一个yuanbeth
 一个yuanbeth
发布于 10/24 00:34
字数 536
阅读 91
收藏 1

使用 sql注入器自定义通用方法。

一、创建自定义方法的类,并继承AbstractMethod

/**
 * @author beth
 * @data 2019-10-23 20:39
 */
public class DeleteAllMethod extends AbstractMethod {
    @Override
    public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
        // 执行的sql
        String sql = " delete from " + tableInfo.getTableName();
        // mapper 接口方法名
        String method = "deleteAll";
        SqlSource sqlSource = languageDriver.createSqlSource(configuration,sql,modelClass);

        return addDeleteMappedStatement(mapperClass,method,sqlSource);
    }
}

二、创建注入器

/**
 * @author beth
 * @data 2019-10-23 20:47
 */
@Component
public class MySqlInjector extends DefaultSqlInjector {

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

三、调用自定义方法

/**
 * <p>
 * 用户表 Mapper 接口
 * </p>
 *
 * @author beth<></>
 * @since 2019-10-13
 */
@Repository
public interface UserInfoMapper extends BaseMapper<UserInfo> {
  /**
   * 删除所有
   * @return
   */
  int deleteAll();
}

四、测试

/**
 * 查询动态表数据
 */
@Test
public void deleteAll () {
   int rows = userInfoMapper.deleteAll();
   System.out.println("影响行数"+rows);
}

五、通用自定义方法

/**
 * @author beth
 * @data 2019-10-23 23:09
 */
public interface MyMapper<T> extends BaseMapper<T> {

    /**
     * 删除所有
     * @return
     */
    int deleteAll();

    /**
     * 批量新增
     * @param list
     * @return
     */
    int insertBatchSomeColumn(List<T> list);

    /**
     * 根据条件删除
     * @param entity
     * @return
     */
    int deleteByWithFill(T entity);

    /**
     * 固定某些字段一定会修改
     * @param entity
     * @return
     */
    int AlwaysUpdateSomeColumnById(@Param(Constants.ENTITY) T entity);
}

六、继承自定义通用mapper

@Repository
public interface UserInfoMapper extends MyMapper<UserInfo> {

七、在注入器中加入自定义方法

/**
 * @author beth
 * @data 2019-10-23 20:47
 */
@Component
public class MySqlInjector extends DefaultSqlInjector {

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

        //Mybatis Plus自定义方法,即选装件
        methodList.add(new InsertBatchSomeColumn(t->t.isLogicDelete()));
        methodList.add(new LogicDeleteByIdWithFill());
        methodList.add(new AlwaysUpdateSomeColumnById(t->!t.getColumn().equals("name")));
        return methodList;
    }
}

八、测试

/**
 * @author beth
 * @data 2019-10-23 20:56
 */
@RunWith(SpringRunner.class)
@SpringBootTest
public class SqlInjectorTest {

    @Autowired
    private UserInfoMapper userInfoMapper;

    /**
     * 查询动态表数据
     */
    @Test
    public void deleteAll () {
       int rows = userInfoMapper.deleteAll();
       System.out.println("影响行数"+rows);
    }

    /**
     * 批量新增
     */
    @Test
    public void insertBatch() {
        UserInfo userInfo1 = new UserInfo();
        userInfo1.setUsername("张三");
        userInfo1.setAge(33);
        userInfo1.setParentId("543533453");

        UserInfo userInfo2 = new UserInfo();
        userInfo2.setUsername("李四");
        userInfo2.setAge(22);
        userInfo2.setParentId("543533453");

        List<UserInfo> asList = Arrays.asList(userInfo1,userInfo2);
        int rows = userInfoMapper.insertBatchSomeColumn(asList);
        System.out.println("影响行数"+rows);
    }

    /**
     * 根据条件删除
     */
    @Test
    public void deleteByWithFill () {
        UserInfo userInfo1 = new UserInfo();
        userInfo1.setId("1312312424");
        userInfo1.setAge(33);
        int rows = userInfoMapper.deleteByWithFill(userInfo1);
        System.out.println("影响行数"+rows);
    }

    /**
     * 根据条件删除
     */
    @Test
    public void AlwaysUpdateSomeColumnById () {
        UserInfo userInfo1 = new UserInfo();
        userInfo1.setId("1312312424");
        userInfo1.setAge(33);
        int rows = userInfoMapper.AlwaysUpdateSomeColumnById(userInfo1);
        System.out.println("影响行数"+rows);
    }
}
```










© 著作权归作者所有

一个yuanbeth
粉丝 99
博文 146
码字总数 82751
作品 0
深圳
程序员
私信 提问
加载中

评论(1)

曾梦想与你仗剑走天涯
曾梦想与你仗剑走天涯
好勤奋,这么晚了还在学校习
mybatis-plus 发布 3.0.5 版本,全方位 Mybatis 辅助层

Mybatis-Plus 是一款 Mybatis 动态 SQL 自动注入 Mybatis 增删改查 CRUD 操作中间件, 减少你的开发周期优化动态维护 XML 实体字段,无入侵全方位 ORM 辅助层让您拥有更多时间陪家人。 3.0....

青苗
2018/10/12
3.9K
11
mybatis-plus 2.1.0 发布,代号:小秋秋

mybatis-plus 是一款 mybatis 动态 SQL 自动注入 mybatis 增删改查 CURD 操作中间件。让 mybatis 拥有 hibernate 的单表高效,也保留 xml sql 的灵动。 代号: 是美貌与智慧并重,英雄与侠义的...

青苗
2017/08/02
5K
32
mybatis-plus 2.1.9 发布,代号:怀念

mybatis-plus 是一款 mybatis 动态 SQL 自动注入 mybatis 增删改查 CRUD 操作中间件。让 mybatis 拥有 hibernate 的单表高效,也保留 xml sql 的灵动, 减少你的开发周期优化动态维护 xml 实...

青苗
2018/01/29
4.3K
34
mybatis-plus 3.0.7 发布,辞旧迎新

Mybatis-Plus 是一款 Mybatis 动态 SQL 自动注入 Mybatis 增删改查 CRUD 操作中间件, 减少你的开发周期优化动态维护 XML 实体字段,无入侵全方位 ORM 辅助层让您拥有更多时间陪家人 携 MP 全...

青苗
01/02
6K
17
mybatis-plus公共字段操作以及springboot2整合mybatis-plus

1、公共实体 对于User类中有而user表中没有的属性需要加第二个注解@TableField(exist = false),表示排除User类中的属性 所有新增公共字段加注解 并指定 @TableField(value = "corp_code",fi...

glen_xu
2018/10/23
566
0

没有更多内容

加载失败,请刷新页面

加载更多

Vue.js学习笔记2 - better-scroll滚动条

better-scroll滚动条 使用作者自制的better-scroll库,实现内容的滚动。 先在package.json加上依赖: "better-scroll": "^0.1.7" 接着再npm install安装依赖。 import BScroll from 'better-......

swanf
今天
7
0
设计模式之适配器模式

定义 将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工 作。 UML类图 适配器分为两种,类适配器与对象适配器。 类适配器的UML图...

陈年之后是青葱
今天
8
0
教你玩转Linux—磁盘管理

导读 Linux磁盘管理好坏直接关系到整个系统的性能问题,Linux磁盘管理常用三个命令为df、du和fdisk。 df df命令参数功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了...

问题终结者
今天
11
0
KMP

字符串匹配算法 针对被匹配字段生产一个部分匹配表 A B C D A B D 0 0 0 0 1 2 0 部分匹配表 熟悉前缀与后缀的概念 ,“部分匹配表” 的生产就是根据前缀、后缀的最苍的共有元素的长度 前缀:...

鬼才王
昨天
6
0
快速搭建Jenkins集群

关于Jenkins集群 在Jenkins上同时执行多个任务时,单机性能可能达到瓶颈,使用Jenkins集群可以有效的解决此问题,让多台机器同时处理这些任务可以将压力分散,对单机版Jenkins的单点故障的隐...

程序员欣宸
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部