简介
MybatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提供效率。
特点
<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-boot-starterartifactId>
<version>3.4.1version>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>1.1.16version>
dependency>
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
username: root
password: root
5.制作实体类和表名
package com.itheima.domain;
public class User {
private int id;
private String name;
private String password;
private String age;
private String tel;
}
6.定义数据库接口,继承BaseMapper< User >
@Mapper
public interface UserDao extends BaseMapper<User> {
}
7.测试类注入dao接口,简单测试
@SpringBootTest
class MpDemoApplicationTests {
@Autowired
private UserDao userDao;
@Test
void testGetAll() {
System.out.println(userDao.selectList(null));
}
}
测试结果:
整体目录结构:
注意:BUG
问题:intellij idea配置自己安装的Maven home directory后会自动变C:/Users/xxx/.m2/wrapper/dists/…
解决方案:
原因是从2020.2版本开始,IDE支持Maven包装器,如果项目配置了Maven包装器,则IDEA会将其用于项目,如果不想从包装器中使用Maven,可以将项目中.mvn/wrapper/下的maven-wrapper.properties从项目中删除即可解决。简言之,删除项目中.mvn即可。
参考博客:此BUG修改博客
@SpringBootTest
class MpDemoApplicationTests {
@Autowired
private UserDao userDao;
@Test
void testSave(){
User user=new User();
user.setAge("13");
user.setId(666);
user.setName("xiaohei");
user.setTel("1008686");
user.setPassword("666666");
userDao.insert(user);
}
@Test
void testGetAll() {
System.out.println(userDao.selectList(null));
}
}
Tips lombok依赖简化实体类编写Getter 、Setter 、ToString等。
pom.xml添加依赖
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
dependency>
实体类User.java用@Data
代替Getter 、Setter 、ToString等方法。
@Data
public class User {
private int id;
private String name;
private String password;
private String age;
private String tel;
}
@Configuration
public class MpConfig {
@Bean
public MybatisPlusInterceptor mpInterceptor(){
//1 创建MybatisPlusInterceptor拦截器对象
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
//2 添加分页拦截器
mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return mybatisPlusInterceptor;
}
}
MpDemoApplicationTests.java中编写测试代码
@Test
void testGetByPage(){
//1 创建IPage分页对象,设置分页参数,1为当前页码,3为每页显示的记录数
IPage page = new Page(1,2);
//2 执行分页查询
userDao.selectPage(page,null);
//3 获取分页结果
System.out.println("当前页码值:"+page.getCurrent());
System.out.println("每页显示数:"+page.getSize());
System.out.println("一共多少页:"+page.getPages());
System.out.println("一共多少条数据:"+page.getTotal());
System.out.println("数据:"+page.getRecords());
}
开启日志
application.yml
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
MyBatisPlus将书写复杂的SQL查询条件进行了封装,使用编程的形式完成查询条件的组合
格式一:常规格式
@Test
void testGetAll() {
//方式一: 条件查询
QueryWrapper qw = new QueryWrapper();
qw.lt("age",13);//小于13
// qw.ge("age",65);//大于等于65
System.out.println(userDao.selectList(qw));
}
@Test
void testGetAll() {
//方式二: Lambda条件查询
QueryWrapper<User> qw = new QueryWrapper<User>();
qw.lambda().lt(User::getAge,13);
System.out.println(userDao.selectList(qw));
}
@Test
void testGetAll() {
//方式三: Lambda条件查询
LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
lqw.lt(User::getAge,13);
List<User> userList = userDao.selectList(lqw);
System.out.println(userDao.selectList(lqw));
}
可能null值产生的场景
例如我们查询价格区间【A,B】,单我们设置为100元时候,可能就不会设置A的值。我们通常就默认了A的值。
//模拟页面传递过来的查询数据
UserQuery uq = new UserQuery();
// uq.setAge(10);
uq.setAge2(30);
LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
// lqw.lt(User::getAge,uq.getAge2());
lqw.lt(null != uq.getAge2(),User::getAge,uq.getAge2());
lqw.gt(null != uq.getAge(),User::getAge,uq.getAge());
// lqw.gt(User::getAge,uq.getAge());
List<User> userList = userDao.selectList(lqw);
System.out.println(userList);
//查询投影
LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
lqw.select(User::getId,User::getName,User::getAge);
List<User> userList = userDao.selectList(lqw);
System.out.println(userList);
OR
QueryWrapper<User> qw = new QueryWrapper<User>();
qw.select("id","name","age");
List<User> userList1 = userDao.selectList(qw);
System.out.println(userList1);
@Test
void testGetAll() {
QueryWrapper<User> qw = new QueryWrapper<User>();
//计数
qw.select("count(*) as count, tel");
//分组
qw.groupBy("tel");
List<Map<String,Object>> userList2 = userDao.selectMaps(qw);
System.out.println(userList2);
}
1.等值查询 AND 范围查询
gt():大于(>)
ge():大于等于(>=)
lt():小于(<)
lte():小于等于(<=)
between():between? and ?
2.模糊查询
like():前后加百分号,如 %J%
likeLeft():前面加百分号,如 %J
likeRight():后面加百分号,如 J%
1.修改数据库,增加删除标记
2.实体类中添加对应字段,并设定当前字段为逻辑删除标记字段
//逻辑删除字段,标记当前记录是否删除
@TableLogic(value = "0",delval = "1")
private Integer deleted;
3.配置逻辑删除字面值
logic-delete-field: deleted
logic-delete-value: 1
logic-not-delete-value: 0
待填坑。。。
待填坑。。。