MyBatis-Plus的增删改查
MyBatis-Plus的CRUD
前期准备
-
创建一个数据库
mybatisplus
-
创建
user
表CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(30) DEFAULT NULL, `age` int(11) DEFAULT NULL, `email` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`) );
-
创建
springboot
工程-
导入对应
maven
坐标<?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 https://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.5.3</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.cmy</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</artifactId> </dependency> <!-- mybatis-plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.0</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </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>
-
mysql
数据库相关配置spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1/mybatisplus?useUnicode=true&characterEncoding=utf-8 username: root password: root
-
mybatis-plus
日志信息配置mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
-
创建实体类
User
package com.cmy.mybatis_plus.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; /** * 实体类 user */ public class User { /** * 指定主键id生成的方式 * value 是主键字段的名称,如果是id,可以不用写 * type 指定主键的类型,主键的值如何生成。idType.AUTO 自动增长 */ @TableId( value = "id", type = IdType.AUTO ) private Long id; private String name; private String email; private Integer age; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", email='" + email + '\'' + ", age=" + age + '}'; } }
-
自定义
User
的Mapper
接口package com.cmy.mybatis_plus.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.cmy.mybatis_plus.entity.User; /** * 自定义 Mapper 接口,就是 dao 接口 * 1. 实现BaseMapper * 2. 指定实体类(泛型) * * BaseMapper 是 MP 框架中的对象,定义了 17 个操作方法(CRUD) */ public interface UserMapper extends BaseMapper<User> { }
用于
CRUD
-
添加操作
添加一条数据
/**
* 使用自动注入,注入 Mapper 对象
*/
@Autowired
private UserMapper userMapper;
@Test
public void testUserInsert() {
// 创建 User 对象
User user = new User();
user.setName("zs");
user.setAge(20);
user.setEmail("zhangsan@sina.com");
// 调用 UserMapper 的方法,也就是父接口 BaseMapper 中的方法
int rows = userMapper.insert(user);
System.out.println("insert 的结果:" + rows);
}
添加数据后,获取主键 id 的值
/**
* 测试
* 添加数据后,获取主键id的值
*/
@Test
public void testUserInsertGetId() {
// 创建 User 对象
User user = new User();
user.setName("李四");
user.setAge(21);
user.setEmail("lisi@sina.com");
// 调用 UserMapper 的方法,也就是父接口 BaseMapper 中的方法
int rows = userMapper.insert(user);
System.out.println("insert user rows:" + rows);
// 获取主键 id 的值
Long id = user.getId();
System.out.println("主键 id 的值:" + id);
}
更新操作
通过 id 进行更新操作
/**
* 使用自动注入,注入 Mapper 对象
*/
@Autowired
private UserMapper userMapper;
@Test
public void testUpdateById() {
User user = new User();
user.setName("李四(修改后)");
user.setAge(25);
user.setId(3L);
// 执行更新操作
int rows = userMapper.updateById(user);
System.out.println("update rows: " + rows);
}
删除操作
根据主键 id 删除
/**
* 使用自动注入,注入 Mapper 对象
*/
@Autowired
private UserMapper userMapper;
@Test
public void testDeleteById() {
// DELETE FROM user WHERE id=?
int i = userMapper.deleteById(3);
System.out.println("delete rows: " + i);
}
根据条件删除数据,条件封装到 Map 中
/**
* 使用自动注入,注入 Mapper 对象
*/
@Autowired
private UserMapper userMapper;
@Test
public void testDeleteByMap() {
// 创建 Map 对象,保存条件值
Map<String, Object> map = new HashMap<>();
// put("表的字段名", 条件值),可以封装多个条件
map.put("name", "zs");
map.put("age", 20);
// 调用删除方法
// DELETE FROM user WHERE name = ? AND age = ?
int i = userMapper.deleteByMap(map);
System.out.println("delete rows: " + i);
}
批处理删除:多个主键 id 删除多条数据
/**
* 使用自动注入,注入 Mapper 对象
*/
@Autowired
private UserMapper userMapper;
@Test
public void testDeleteBatchIds() {
/*ArrayList<Integer> ids = new ArrayList<>();
ids.add(1);
ids.add(2);
ids.add(3);
ids.add(4);
ids.add(5);*/
// 使用 lambda 创建集合
List<Integer> ids = Stream.of(1, 2, 3, 4, 5).collect(Collectors.toList());
// 删除操作
// DELETE FROM user WHERE id IN ( ? , ? , ? , ? , ? )
int rows = userMapper.deleteBatchIds(ids);
System.out.println("delete rows: " + rows);
}
查询操作
根据主键 id 进行查询
/**
* 使用自动注入,注入 Mapper 对象
*/
@Autowired
private UserMapper userMapper;
@Test
public void testSelectById() {
// SELECT id,name,email,age FROM user WHERE id=?
User user = userMapper.selectById(6);
if (user == null) {
System.out.println("用户不存在");
} else {
System.out.println(user);
}
}
批量查询,根据多个主键 id 进行查询
/**
* 使用自动注入,注入 Mapper 对象
*/
@Autowired
private UserMapper userMapper;
@Test
public void testSelectBatchIds () {
// SELECT id,name,email,age FROM user WHERE id IN ( ? , ? , ? , ? , ? )
List<Integer> ids = Stream.of(4, 6, 7, 9, 11).collect(Collectors.toList());
List<User> userList = userMapper.selectBatchIds(ids);
for (User user : userList) {
System.out.println(user);
}
}
根据 Map 条件 查询
/**
* 使用自动注入,注入 Mapper 对象
*/
@Autowired
private UserMapper userMapper;
@Test
public void testSelectByMap() {
Map<String, Object> map = new HashMap<>();
map.put("name", "李四");
map.put("age", 21);
// 根据 Map 查询
// SELECT id,name,email,age FROM user WHERE name = ? AND age = ?
List<User> users = userMapper.selectByMap(map);
for (User user : users) {
System.out.println(user);
}
}