大家好,又见面了,我是你们的朋友全栈君。
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
*/
/* @Bean
public ISqlInjector sqlInjector() {
return new LogicSqlInjector();
}*/
/**
* 分页插件
* @return
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
// @Bean
public 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() {
@Override
public Expression getTenantId() {
return new LongValue(1L);
}
/**
* 设置id名字
* @return
*/
@Override
public String getTenantIdColumn() {
return "id";
}
@Override
public boolean doTableFilter(String tableName) {
// 这里可以判断是否过滤表
/*
if ("user".equals(tableName)) {
return true;
}*/
return false;
}
});
sqlParserList.add(tenantSqlParser);
paginationInterceptor.setSqlParserList(sqlParserList);
/* paginationInterceptor.setSqlParserFilter(new ISqlParserFilter() {
@Override
public 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<#{%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=GMT
username: root
password: 123456
driver-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: false
global-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: warn
com.hlvy.mybatis_plus: trace
pattern:
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 {
@Autowired
private UserMapper userMapper;
/**
* 逻辑删除演示
* 执行sql UPDATE User SET deleted=1 WHERE id=1171800278613643266 AND deleted=0
*/
@Test
public 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
*/
@Test
public 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
*/
@Test
public 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只剩下安德文
*/
@Test
public void selectListOne() {
List<User> list = userMapper.selectAll(Wrappers.<User>lambdaQuery()
.gt(User::getAge,17).eq(User::getDeleted,0));
list.forEach(System.out::println);
}
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/137005.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...