github地址https://github.com/heng1234/mybatis_plus

基于https://blog.csdn.net/qq_39313596/article/details/100943090文章

参考官方文章 https://gitee.com/baomidou/mybatis-plus-samples/tree/master/mybatis-plus-sample-deluxe

首先定义一个方法

DeleteAllMethod 继承 AbstractMethod
package com.hlvy.mybatis_plus.method;import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.SqlSource;/*** DeleteAllMethod** @author heng* @date 2019/9/19**/
public class DeleteAllMethod extends AbstractMethod {@Overridepublic MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {/* 执行 SQL ,动态 SQL 参考类 SqlMethod */String sql = "delete from " + tableInfo.getTableName();/* mapper 接口方法名一致 */String method = "deleteAll";SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);return this.addDeleteMappedStatement(mapperClass, method, sqlSource);}
}

接着写个sql配置类继承DefaultSqlInjector

package com.hlvy.mybatis_plus.injector;import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
import com.baomidou.mybatisplus.extension.injector.methods.additional.AlwaysUpdateSomeColumnById;
import com.baomidou.mybatisplus.extension.injector.methods.additional.InsertBatchSomeColumn;
import com.baomidou.mybatisplus.extension.injector.methods.additional.LogicDeleteByIdWithFill;
import com.hlvy.mybatis_plus.method.DeleteAllMethod;import java.util.List;/*** MySqlInjector* 自定义sql注入器* @author heng* @date 2019/9/19**/public class MySqlInjector extends DefaultSqlInjector {@Overridepublic List<AbstractMethod> getMethodList(Class<?> mapperClass) {//拿到父类的getMethodList方法List<AbstractMethod> methodList = super.getMethodList(mapperClass);methodList.add(new DeleteAllMethod());//InsertBatchSomeColumn 选装器 谨慎用 值在mysql测试过切mysql默认值不会填写methodList.add(new InsertBatchSomeColumn(t->!t.isLogicDelete()&& !t.getColumn().equals("update_time")));//排除插入字段//根据id删除并自动填充 LogicDeleteByIdWithFillmethodList.add(new LogicDeleteByIdWithFill());//根据id更新固定的那几个字段不包含逻辑删除 不更新namemethodList.add(new AlwaysUpdateSomeColumnById(t->!t.getColumn().equals("name")));// methodList.add(new MyInsertAll());// methodList.add(new MysqlInsertAllBatch());return methodList;}
}

然后把该类注入bean可以在该类加上@Component 或者在MybatisPlusConfig注入 我这是在MybatisPlusConfig注入的

/*** 自定义 SqlInjector* 里面包含自定义的全局方法*/@Beanpublic MySqlInjector myLogicSqlInjector() {return new MySqlInjector();}

然后写个通用Mapper 写上你刚才配置的deleteAll方法

package com.hlvy.mybatis_plus.baseMapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Param;import java.util.List;/*** MyBaseMapper* 通用Mapper* @author heng* @date 2019/9/19**/
public interface MyBaseMapper<T> extends BaseMapper<T> {/*** 自定义通用方法*/Integer deleteAll();int myInsertAll(T entity);int insertBatchSomeColumn(List<T> list);int deleteByIdWithFill(T entity);int alwaysUpdateSomeColumnById(@Param(Constants.ENTITY) T entity);
}

然后再让userMapper继承它

package com.hlvy.mybatis_plus.mapper;import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hlvy.mybatis_plus.baseMapper.MyBaseMapper;
import com.hlvy.mybatis_plus.entity.User;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;import java.util.List;/*** UserMapper** @author heng**/public interface UserMapper extends MyBaseMapper<User> {}

测试

package com.hlvy.mybatis_plus.userTest;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.additional.update.impl.LambdaUpdateChainWrapper;
import com.hlvy.mybatis_plus.config.MybatisPlusConfig;
import com.hlvy.mybatis_plus.entity.User;
import com.hlvy.mybatis_plus.mapper.UserMapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;import java.util.*;/*** UserTest** @author heng* @date 2019/4/11**/
@RunWith(SpringRunner.class)
@SpringBootTest
public class InjectorTest {@Autowiredprivate UserMapper userMapper;/*** 自定义sql注入器删除所有*/@Testpublic void deleteAll() {System.out.println(userMapper.deleteAll());}/*** 自定义inser 选装器* 谨慎用 值在mysql测试过切mysql默认值不会填写* Consume Time:10 ms 2019-09-19 23:47:14*  Execute SQL:INSERT INTO User ( id, name, age, email, created_time ) VALUES ( 1174711555019276289, '恒果果', 19, 'xxx@qq.com', '2019-09-19T23:47:14.468+0800' )*/@Testpublic void inserBath() {User user = new User();user.setName("恒果果");user.setAge(19);user.setEmail("xxx@qq.com");user.setManagerId(1L);User user2 = new User();user2.setName("恒果果2");user2.setAge(19);user2.setEmail("xxx@qq.com");user.setManagerId(1L);userMapper.insertBatchSomeColumn( Arrays.asList(user,user2));}/*** 根据id删除并自动填充 LogicDeleteByIdWithFill*  sql Consume Time:73 ms 2019-09-19 23:59:04*  Execute SQL:UPDATE User SET age=17,update_time='2019-09-19T23:59:04.167+0800',deleted=1 WHERE id=5 AND deleted=0*/@Testpublic void deleteByIdWithFill() {User user = new User();user.setId(5L);user.setAge(17);//需要在删除的时候填充字段  需要在实体类加上上自动填充注解    @TableField(fill = FieldFill.UPDATE)System.out.println(userMapper.deleteByIdWithFill(user));}/*** 根据id更新固定的那几个字段不包含逻辑删除 不更新name 没有值会更新为空* UPDATE User SET age=17,update_time='2019-09-20T00:06:04.856+0800',deleted=1 WHERE id=1 AND deleted=0*/@Testpublic void alwaysUpdateSomeColumnById() {User user = new User();user.setId(1L);user.setName("xxx");user.setAge(17);System.out.println(userMapper.deleteByIdWithFill(user));}
}

mybatis plus SQL注入器 及 InsertBatchSomeColumn LogicDeleteByIdWithFill AlwaysUpdateSomeColumnById装载器相关推荐

  1. Mybatis Plus 自定义SqlInjector sql注入器

    1.自定义sql注入器GeneralMybatisPlusSqlInjector package com.javasgj.springboot.mybatisplus.config;import ja ...

  2. mybatisPlus 自定义sqlSessionFactory sql注入器失效 Invalid bound statement (not found): insertBatchSomeColumn

    这是重写后的sqlsessionFactory @Bean("sqlSessionFactory")public SqlSessionFactory sqlSessionFacto ...

  3. MybatisPlus 之 Sql 注入器

    我们已经知道,在MP中,通过AbstractSqlInjector将BaseMapper中的方法注入到了Mybatis容器,这样这些方法才可以正常执行. 那么,如果我们需要扩充BaseMapper中的 ...

  4. 记一次mybatis-plus自定义sql注入器不起作用的问题

    之前自己写过一个关于mybatis-plus多表联查的组件,原理是用到了mybatis-plus扩展的口(sql注入),即继承DefaultSqlInjector /** @author chenga ...

  5. MyBatis动态SQL之 set 和 trim标记的使用示例

    2019独角兽企业重金招聘Python工程师标准>>> 和之前的where一样,set和trim也是智能标记 在之前的user.xml中添加 <update id=" ...

  6. MyBatis动态SQL(认真看看, 以后写SQL就爽多了)

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:cnblogs.com/homejim/p/9909657. ...

  7. 9.mybatis动态SQL标签的用法

    mybatis动态SQL标签的用法 动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦 ...

  8. 认真看看, 以后写 SQL 就爽多了:MyBatis 动态 SQL:

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 阿进的写字台 来源 | cnblogs.com ...

  9. MyBatis动态SQL,写SQL更爽

    点击上方 好好学java ,选择 星标 公众号重磅资讯,干货,第一时间送达 今日推荐:分享一套基于SpringBoot和Vue的企业级中后台开源项目,这个项目有点哇塞!个人原创100W +访问量博客: ...

最新文章

  1. 成为DBA的艰辛之路————需要掌握一笔不小的知识
  2. 交换机无法ping通之谜
  3. 傻瓜式制作的U盘winpe(支持4G以上U盘)--速度超快
  4. 批量查询,mget语法,mget批量查询(来自学习资料,第26节)
  5. 典型的 C++ 程序员成长经历
  6. Python小白的数学建模课-02.数据导入
  7. 华为手机投屏电脑_华为手机如何投屏到电脑?这很实用
  8. python kivy canvas_python – Kivy:使用canvas为动画设置动画的正确方法是什么?
  9. angular获取图片高宽_Angular 读书笔记
  10. SecureCRT连接阿里云ECS服务器,经常掉线的解决方案
  11. HAUT校赛--最大奇子段和
  12. 优秀的前端工程师任务目标和实践
  13. Arcgis更换布局模板_小美AI触屏音箱评测 美的布局AloT的关键一环
  14. SLAM_SLAM中一般是如何求解相机的运动的?
  15. 设计模式-第五篇之命令模式
  16. Spring学习笔记10 - Spring配置文件参数划分析
  17. Nginx管理(二)
  18. 文献阅读:Scaling Instruction-Finetuned Language Models
  19. 阿里云云计算 24 SLB的概念
  20. Unity—“合成大西瓜”小游戏笔记

热门文章

  1. Android studio+SQLCipher加密SQLite数据库的几个坑
  2. v7.widget.SearchView的使用
  3. B树详细图解与Java完整实现
  4. 【无标题】小程序开发网站建设前端网页制作美工H5
  5. java字符串去掉中文_Java——去除字符串中的中文
  6. 【高数】不定积分之有理函数的积分
  7. linux系统是否支持gpt分区,Linux下对大硬盘进行GPT分区详解
  8. 如何用水经注万能地图下载器进行投影转换
  9. AD-PCB设计流程(查漏补缺)
  10. FPGA驱动摄像头实现人脸识别(基于肤色)