Mybatis-Plus快速入门
文章目录
1 Mybatis-Plus概述
-
官方网站:baomidou.com
-
MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
-
使用Mybatis-Plus,如果实现单表操作,不需要编写sql语句,封装方法,使用封装的这些方法方便实现
-
如果复杂查询,或者多表查询,还需要编写sql语句实现
2 Mybatis-Plus入门案例
第一步 创建数据库和表
- 数据库mybatis_plus
- 表
CREATE TABLE user
(
id BIGINT(20) NOT NULL COMMENT '主键ID',
name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
age INT(11) NULL DEFAULT NULL COMMENT '年龄',
email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (id)
);
INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, '[email protected]'),
(2, 'Jack', 20, '[email protected]'),
(3, 'Tom', 28, '[email protected]'),
(4, 'Sandy', 21, '[email protected]'),
(5, 'Billie', 24, '[email protected]');
第二步 创建springBoot工程,引入mp相关依赖
<?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>
<groupId>com.atguigu</groupId>
<artifactId>mybatis_plus_demo</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.1</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
<!--lombok用来简化实体类-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
</project>
第三步 创建springBoot配置文件,指定数据库路径
#mysql数据库连接
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=GMT%2B8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
#mybatis日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
第四步 创建springBoot启动类
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class,args);
}
}
第五步 创建实体类
@Data
public class User {
private Long id;
private String name;
private Integer age;
private String email;
}
第六步 创建mapper,继承BaseMapper
public interface UserMapper extends BaseMapper<User> {
}
@SpringBootApplication
@MapperScan("com.atguigu.mapper")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class,args);
}
}
测试代码
@SpringBootTest
public class MpDemo1 {
//注入mapper
@Autowired
private UserMapper userMapper;
//查询所有记录
@Test
public void findAll() {
List<User> list = userMapper.selectList(null);
list.forEach(user->{
System.out.println(user.getName());
System.out.println(user.getAge());
});
}
}
3 Mybatis-Plus的CURD操作
@SpringBootTest
public class MpDemo1 {
//注入mapper
@Autowired
private UserMapper userMapper;
//1 查询所有记录 selectList
@Test
public void findAll() {
List<User> list = userMapper.selectList(null);
list.forEach(user->{
System.out.println(user.getName()+":"+user.getAge());
});
}
//2 添加操作insert
@Test
public void addUser() {
//创建对象,设置值
User user = new User();
user.setName("东方不败");
user.setAge(30);
user.setEmail("[email protected]");
//调用方法
int rows = userMapper.insert(user);
System.out.println(rows);
System.out.println(user);
}
//3 根据id查询
@Test
public void getUserById() {
User user = userMapper.selectById(1L);
System.out.println(user);
}
//4 修改操作
@Test
public void updateUser() {
//根据id查询
User user = userMapper.selectById(1L);
//设置修改值
user.setName("岳不群");
user.setAge(50);
//调用方法完成修改
int rows = userMapper.updateById(user);
System.out.println(rows);
}
//5 删除操作
@Test
public void deleteUser() {
userMapper.deleteById(2L);
}
//6 条件查询
}
逻辑删除
第一步 表添加逻辑删除标志位字段
第二步 在对应实体类添加逻辑删除标志属性,在属性上面添加注解
第三步 在配置文件指定逻辑删除规则,默认0没有删除,1删除
- 细节问题:查询时候,只会查询到没有删除的数据(mp封装)
条件查询
//6 条件查询
//select * from user where name=? and age=?
@Test
public void select1() {
//封装条件对象
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getName,"Tom");
wrapper.eq(User::getAge,28);
//调用方法
List<User> list = userMapper.selectList(wrapper);
list.forEach(user->{
System.out.println(user.getName()+":"+user.getAge());
});
}
//select * from user where age>=28
@Test
public void select2() {
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.ge(User::getAge,28);
//调用方法
List<User> list = userMapper.selectList(wrapper);
list.forEach(user->{
System.out.println(user.getName()+":"+user.getAge());
});
}
//select * from user name like ?
@Test
public void select3() {
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.like(User::getName,"m");
//调用方法
List<User> list = userMapper.selectList(wrapper);
list.forEach(user->{
System.out.println(user.getName()+":"+user.getAge());
});
}
4 Mybatis-Plus主键策略
- mp默认主键策略,生成唯一的值
第一个策略:ASSIGN_ID
- 生成唯一的值,包含数字,表对应字段类型bigint或者varchar类型
第二个策略:ASSIGN_UUID
- 生成唯一的值,包含数字和字母,表对应字段类型varchar类型
第三个策略:AUTO
- 主键自动增长效果,和表字段auto_increment
第四个策略:INPUT
- 需要手动设置id值
5 Mybatis-Plus分页查询
- mp自带分页插件,只需要简单配置,方便实现分页查询操作
第一步 创建配置类,配置分页插件
@Configuration
public class MpConfig {
//配置分页插件
/**
* 分页插件
*/
@Bean
public MybatisPlusInterceptor optimisticLockerInnerInterceptor(){
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
//向Mybatis过滤器链中添加分页拦截器
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
第二步 调用mapper里面方法进行分页查询
//分页查询
@Test
public void selectPage() {
//创建page对象,传递分页参数:当前页和每页显示记录数
Page<User> page = new Page<>(1,3);
//调用mapper里面方法实现分页查询,返回Page对象,Page对象里面包含分页之后所有数据
IPage<User> pageModel = userMapper.selectPage(page, null);
List<User> list = pageModel.getRecords();
list.forEach(user->{
System.out.println(user.getName()+"::"+user.getAge());
});
long total = pageModel.getTotal();
System.out.println(total);
}
ser> page = new Page<>(1,3);
//调用mapper里面方法实现分页查询,返回Page对象,Page对象里面包含分页之后所有数据
IPage<User> pageModel = userMapper.selectPage(page, null);
List<User> list = pageModel.getRecords();
list.forEach(user->{
System.out.println(user.getName()+"::"+user.getAge());
});
long total = pageModel.getTotal();
System.out.println(total);
}