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

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.4.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.hlvy</groupId><artifactId>mybatis_plus</artifactId><version>0.0.1-SNAPSHOT</version><name>mybatis_plus</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!--引入 MyBatis-Plus 之后请不要再次引入 MyBatis 以及 MyBatis-Spring,以避免因版本差异导致的问题--><!-- <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.0.1</version></dependency>--><!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency>
<!--mybatis-plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.1.2</version></dependency>
<!--mybatis-plus-generator--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.1.2</version></dependency><!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!--freemarker--><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.28</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
MybatisPlusConfig
package com.hlvy.mybatis_plus.config;import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.baomidou.mybatisplus.core.parser.ISqlParser;
import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor;
import com.baomidou.mybatisplus.extension.plugins.tenant.TenantHandler;
import com.baomidou.mybatisplus.extension.plugins.tenant.TenantSqlParser;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.LongValue;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;import java.util.ArrayList;
import java.util.List;/*** MybatisPlusConfig** @author heng* @date 2019/4/17**/
//Spring boot方式
@EnableTransactionManagement
@Configuration
@MapperScan("com.hlvy.mybatis_plus.mapper")
public class MybatisPlusConfig {/*** SQL执行效率插件*/@Bean//@Profile({"dev","test"})// 设置 dev test 环境开启public PerformanceInterceptor performanceInterceptor() {return new PerformanceInterceptor();}/*** 逻辑删除 3.1版本及以下需要加入* @return*//* @Beanpublic ISqlInjector sqlInjector() {return new LogicSqlInjector();}*//*** 分页插件* @return*/@Beanpublic PaginationInterceptor paginationInterceptor() {return new PaginationInterceptor();}// @Beanpublic PaginationInterceptor paginationInterceptor1() {PaginationInterceptor paginationInterceptor = new PaginationInterceptor();//paginationInterceptor.setLocalPage(true);// 开启 PageHelper 的支持/** 【测试多租户】 SQL 解析处理拦截器<br>* 这里固定写成住户 1 实际情况你可以从cookie读取,因此数据看不到 【 麻花藤 】 这条记录( 注意观察 SQL )<br>*/List<ISqlParser> sqlParserList = new ArrayList<>();TenantSqlParser tenantSqlParser = new TenantSqlParser();tenantSqlParser.setTenantHandler(new TenantHandler() {@Overridepublic Expression getTenantId() {return new LongValue(1L);}/*** 设置id名字* @return*/@Overridepublic String getTenantIdColumn() {return "id";}@Overridepublic boolean doTableFilter(String tableName) {// 这里可以判断是否过滤表/*if ("user".equals(tableName)) {return true;}*/return false;}});sqlParserList.add(tenantSqlParser);paginationInterceptor.setSqlParserList(sqlParserList);/*  paginationInterceptor.setSqlParserFilter(new ISqlParserFilter() {@Overridepublic boolean doFilter(MetaObject metaObject) {MappedStatement ms = SqlParserHelper.getMappedStatement(metaObject);// 过滤自定义查询此时无租户信息约束【 麻花藤 】出现if ("com.baomidou.springboot.mapper.UserMapper.selectListBySQL".equals(ms.getId())) {return true;}return false;}});*/return paginationInterceptor;}
}

user

package com.hlvy.mybatis_plus.entity;import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;import java.util.Date;/*** User** @author heng* @date 2019/4/11**/
@Data
/**@auth* @TableName 指定数据库表名* extends Model<User> AR模式* @EqualsAndHashCode(callSuper = false) 去除AR模式继承没调用父类方法警告警告*/
@TableName("User")
@EqualsAndHashCode(callSuper = false)
public class User  extends Model<User> {/*** @TableId 指定主键列名及主键策略方式*/@TableId(value = "id",type = IdType.NONE)private Long id;/*** 姓名*@TableField 指定数据库列名*/@TableField(condition = SqlCondition.LIKE,value = "name")private String name;/*** 年龄*/@TableField(condition = "%s&lt;#{%s}")private Integer age;/*** 邮箱*/@TableField("email")private String email;/*** 直属上级id*/private Long managerId;/*** 创建时间*/private Date createdTime;/*** 修改时间*/private Date updateTime;/*** 版本*/private Integer version;/*** 0、未删除 1、已删除*/@TableLogic//逻辑删除标识@TableField(select = false)//查询的时候不显示private Integer deleted;/** 备注  非数据库字段需要排除* 方法一加入transient 不让该变量序列化 不推荐*  方法二加入static 但是lombok不会生成get set方法需要自己手动添加 不推荐*  方法三  @TableField(exist = false) 默认是true 改为false表示不是数据库字段 推荐* */@TableField(exist = false)private /*static*/  /*transient*/ String remark;
}

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.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 BaseMapper<User> {/* @Select("select * from user ${ew.customSqlSegment}")*/List<User> selectAll(@Param(Constants.WRAPPER) Wrapper<User> wrapper);IPage<User> selectUserPage(Page<User> page,@Param(Constants.WRAPPER) Wrapper<User> wrapper);
}

application.yml

global-config:
    db-config: #配置逻辑删除
      logic-delete-value: 1 # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)

server:port: 9091
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mytest?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMTusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:#MyBaits 别名包扫描路径,通过该属性可以给包中的类注册别名,注册后在 Mapper 对应的 XML 文件中可以直接使用类名,而不用使用全限定的类名(即 XML 中调用的时候不用包含包名)。type-aliases-package: com.hlvy.mybatis_plus.entity#该配置请和 typeAliasesPackage 一起使用,如果配置了该属性,则仅仅会扫描路径下以该类作为父类的域对象type-aliases-super-type: java.lang.Object#MyBatis Mapper 所对应的 XML 文件位置,如果您在 Mapper 中有自定义方法(XML 中有自定义实现),需要进行该配置,告诉 Mapper 所对应的 XML 文件位置。mapper-locations: classpath*:mybatis/*.xml#MyBatis 配置文件位置,如果您有单独的 MyBatis 配置,请将其路径配置到 configLocation 中。#config-location: classpath:mybatis-config.xml#启动时是否检查 MyBatis XML 文件的存在,默认不检查check-config-location: falseglobal-config:db-config: #配置逻辑删除logic-delete-value: 1 # 逻辑已删除值(默认为 1)logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)#id-type: none #全局策略#field-strategy: ignored #所有字段加入crud语句中 一般不这么设置 默认not_null#table-prefix: t_ #表的前缀#table-underline: true #表名是否使用下划线#configuration:#不能与config-location同时出现#map-underscore-to-camel-case: true
#设置日志 级别
logging:level:root: warncom.hlvy.mybatis_plus: tracepattern:console: '%P%m%n'

test测试

package com.hlvy.mybatis_plus.userTest;import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.hlvy.mybatis_plus.entity.User;
import com.hlvy.mybatis_plus.mapper.UserMapper;
import com.hlvy.mybatis_plus.service.UserService;
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.List;/*** UserTestNew* mp进阶* @author heng* @date 2019/4/11**/
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserTestNew {@Autowiredprivate UserMapper userMapper;/*** 逻辑删除演示* 执行sql UPDATE User SET deleted=1 WHERE id=1171800278613643266 AND deleted=0*/@Testpublic void deleteByIdOne() {System.out.println(userMapper.deleteById(1171800278613643266L));}/*** 查询未删除的会自动带入 where deleted=0* 执行sql  SELECT id,name,age,email,manager_id,created_time,update_time,version,deleted FROM User WHERE deleted=0*/@Testpublic void selectOne() {List<User> list = userMapper.selectList(null);list.forEach(System.out::println);}/*** 修改 会自动带入 where deleted=0* 执行sql  UPDATE User SET age=17 WHERE id=5 AND deleted=0*/@Testpublic void updateOne() {User user = new User();user.setId(5L);user.setAge(17);System.out.println(userMapper.updateById(user));}/*** 查询全局排除deleted字段* 实体类 属性加入  @TableField(select = false)//查询的时候不显示*//**同执行上面select可以看到 自定义的语句不可以排除被删除的也可以查询出来*//*** select * from user WHERE age > 17  不会带deleted=0* 可以自己加上 .eq(User::getDeleted,0)* select * from user WHERE age > 17 AND deleted = 0* 也可以写到sql只剩下安德文*/@Testpublic void selectListOne() {List<User> list = userMapper.selectAll(Wrappers.<User>lambdaQuery().gt(User::getAge,17).eq(User::getDeleted,0));list.forEach(System.out::println);}}

mybatis逻辑删除相关推荐

  1. mybatis 乐观锁和逻辑删除

    本篇介绍easymybatis如配置乐观锁和逻辑删除. 乐观锁 easymybatis提供的乐观锁使用方式跟JPA一样,使用@Version注解来实现.即:数据库增加一个int或long类型字段ver ...

  2. mybatis 乐观锁_MybatisPlus新特性之逻辑删除、乐观锁、自动填充

    MP特性 公共字段的自动填充功能 自动更新全局属性,比如创建的时间修改的时间,这样就不用每执行一次插入更新操作都带上一个set大大节省了很多效率,从而也避免为了因为时间格式的不统一问题. 为了输出日志 ...

  3. Mybatis Plus逻辑删除

    1.首先在实体类中的删除字段添加注解 @TableLogic @TableField(deleteFiled) private String deleteFiled; 2.在配置文件中设置: myba ...

  4. MyBatis-Plus 乐观锁 防止超卖、逻辑删除、自动填充、Id自增

    MyBatis-Plus 乐观锁 防止超卖.逻辑删除.自动填充 Day3 前面的简单的讲了一下mybatis-plus的使用 当然有很多不足 我写博客就是想促进大家一起学习 也想让这些内容更简单一些. ...

  5. 浅谈:MyBatis-Plus的CRUD与乐观锁,分页插件,逻辑删除

    浅谈:MyBatis-Plus的CRUD与乐观锁,分页插件,逻辑删除 MyBatis-Plus官方文档连接 什么是MyBatis-Plus 请点击上面官方文档查看 代码演示:代码注释为功能详细解释 数 ...

  6. MybatisPlus实现逻辑删除

    delete 根据id删除记录 //查询user表所有数据 @Test public void findAll() {List<User> users = userMapper.selec ...

  7. mybatis-plus根据多个字段排序_Mybatis Plus学习笔记(逻辑删除/动态填充/常用插件)...

    一.逻辑删除 1.逻辑删除后,将不会被查询出来. mybatis 2.查询中排除逻辑删除字段 在Wrappers.<User>lambdaQuery().eq(User::getIsDel ...

  8. ssm框架逻辑删除mysql_MybatisPlus--CRUD接口及主键增长策略、自动填充、乐观锁更新数据...

    目录 一.insert 1.插入操作 2.主键策略 二.update 1.根据Id更新操作 2.自动填充 3.乐观锁 三.select 1.根据id查询记录 2.通过多个id批量查询 3.简单的条件查 ...

  9. spring boot项目自定义数据源,mybatisplus分页、逻辑删除无效解决方法

    Spring Boot项目中数据源的配置可以通过两种方式实现: 1.application.yml或者application.properties配置 2.注入DataSource及SqlSessio ...

  10. mybatis-plus 逻辑删除

    mybatis-plus逻辑删除 首先说一下什么是物理删除----物理删除就是指把数据彻底从数据库删除掉,是彻底的删除干净 物理删除有个不好的地方就是直接将数据删除干净无法找回 逻辑删除就很人性化了- ...

最新文章

  1. Java Spring Boot VS .NetCore (七) 配置文件
  2. iptables —— Iptables防火墙规则使用梳理
  3. 一步步创建Qt Widget项目+TextFinder案例(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)
  4. 深入理解JVM类文件格式
  5. [Windows] Windows 8.1 取消在任务栏显示应用商店的应用
  6. Mongodb在Linux下的安装和启动和配置
  7. linux 32bit 改为64bit问题
  8. wpe使用方法(详细)(--新加秒10图)(10号继续可用)
  9. 还以为iPhone安全?多款iOS应用被曝“偷偷”发送用户数据
  10. 经典同步问题三——读者写者问题
  11. 微星小飞机界面翻译_软件 | 第二款翻译利器推荐
  12. scrapy1.5文档(第二节 Scrapy Tutorial)
  13. 离线安装 Enhanced Class Decompiler
  14. mantis apache mysql_Nginx、Apache、PHP、Mantis上传文件和附件大小设置
  15. Ubuntu下Android编译环境Build_evn的配置
  16. rails consol reload!
  17. Cannot get a STRING value from a NUMERIC cell
  18. 微博html5版什么手机,搜狐微博推出全新手机HTML5触屏版
  19. qcqa是什么职位_qa是什么意思工作职责(qa和qc哪个工资更高)
  20. 将一个十六进制字符串转换为十进制数值的问题

热门文章

  1. linux怎么设置文件访问权限,Linux文件和目录访问权限设置
  2. Nginx学习笔记(七)——配置Nginx实现Gzip网页压缩、图片压缩
  3. 弹出USB大容量存储设备时出问题“该设备正在使用中”
  4. POI导出换行和水平居中
  5. 信号与系统(关于流程框图的一个简单问题记录)
  6. python-for x in range (注意要点、细节)
  7. 自学4年多 Github 上斩获 90k Star! 聊聊自学习编程的正确姿势!
  8. 电脑版微信每天自动发送
  9. Maven系列第三讲 详解Maven解决依赖问题
  10. ENVI纹理特征提取