提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
逻辑删除和物理删除
物理删除:
即在数据库的物理层中永久的删除这条数据,通常直接调用UserMapper的deleteAPI即可删除
基于上文的环境,该测试类如下:
@Test
public void TestDeleteById() {
int i = userMapper.deleteById(1423562408009428993l);
System.out.println(i);
}
逻辑删除:
我们在数据库属性中添加一列标记属性,由数据库判断该属性值,通过属性值来判断该数据是否逻辑删除,数据会保留在数据库中
逻辑删除的环境搭建
properties设置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#serverTimezone=GMT%2B8:添加时区
spring.datasource.url=jdbc:mysql://localhost:3306/mybatisplus?serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=root
#mybatis日志:添加后可以查看执行的sql语句
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
#设置当前环境:dev;test;prod
spring.profiles.active=prod
添加deleted字段
在设置deleted默认值时,有两种方式,一种是类似于上文中自动添加时间的方式,一种是通过数据库中手动设置,如图所示:
同样我们需要在,实体类中添加deleted属性
//添加删除标记
@TableLogic
@TableField(fill = FieldFill.INSERT)//设置初始值
private Integer deleted;
测试
测试和上文中的物理删除的方式一样
@Test
public void TestDeleteById() {
int i = userMapper.deleteById(1423562408009428993l);
System.out.println(i);
}
然后通过查找所有去查找数据,被逻辑删除的数据不会进行显示
性能分析插件
作用
用于输出每条sql语句执行的时间,便于优化sql语句
配置sql分析插件
/*
Sql性能分析插件
开发环境使用,上线项目不推荐使用,maxTime指sql最大执行时间
*/
@Bean
@Profile({"dev","test"})//设置使用环境
public PerformanceInterceptor performanceInterceptor(){
PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
performanceInterceptor.setMaxTime(10);//ms值,超过此处的毫秒值则不执行
performanceInterceptor.setFormat(true);
return performanceInterceptor;
}
- 开发环境介绍:
- dev:开发环境
- test:测试环境
- prod:生产环境(真正上线交给用户使用的环境)
设置环境
#com.mysql.cj.jdbc.Driver:springBoot2.1以上要加上cj
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#serverTimezone=GMT%2B8:添加时区
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=root
#mybatis日志:添加后可以查看执行的sql语句
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
#环境设置:dev;test;prod
spring.profiles.active=dev
#设置逻辑删除的值:1-删除;0-没有删除
#可自行设置值,但是一般不设置,1、0为默认值,也可以不写
#mybatis-plus.global-config.db-config.logic-delete-value=1
#mybatis-plus.global-config.db-config.logic-not-delete-value=0
wapper实现复杂语句查询
ge、gt、le、lt
- ge:大于等于
- gt:大于
- le:小于等于
- lt:小于
@Test
public void testSelectQuery1(){
//创建QueryWrapper
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.ge("age", 14);
List<User> users = userMapper.selectList(queryWrapper);
for (User user : users) {
System.out.println(user);
}
}
eq、ne
- eq:等于
- ne:不等于
@Test
public void testSelectQuery2(){
//创建QueryWrapper
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
/*queryWrapper.eq("name","孙七");
List<User> users = userMapper.selectList(queryWrapper);
for (User user : users) {
System.out.println(user);
}*/
queryWrapper.ne("name","孙七");
List<User> users = userMapper.selectList(queryWrapper);
for (User user : users) {
System.out.println(user);
}
}
between
- between:范围内的数据
@Test
public void testSelectQuery3(){
//创建QueryWrapper
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.between("age",13,17);
List<User> users = userMapper.selectList(queryWrapper);
for (User user : users) {
System.out.println(user);
}
}
like
- like:模糊查询
@Test
public void testSelectQuery4(){
//创建QueryWrapper
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.like("name","孙");
List<User> users = userMapper.selectList(queryWrapper);
for (User user : users) {
System.out.println(user);
}
}
orderByDesc、orderByAsc
- orderByDesc:降序
- orderByAsc:升序
@Test
public void testSelectQuery5(){
//创建QueryWrapper
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
//queryWrapper.orderByDesc("age");//降序
queryWrapper.orderByAsc("age");//升序
List<User> users = userMapper.selectList(queryWrapper);
for (User user : users) {
System.out.println(user);
}
}
last
- last:最后可以拼接sql语句
@Test
public void testSelectQuery6(){
//创建QueryWrapper
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.last("limit 1,2");//偏移量为1,查两条数据
List<User> users = userMapper.selectList(queryWrapper);
for (User user : users) {
System.out.println(user);
}
}
select
- select:指定要查询的列
@Test
public void testSelectQuery7() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.select("age","name");
List<User> users = userMapper.selectList(queryWrapper);
for (User user : users) {
System.out.println(user);
}
}