1、快速开始
1.1、现有一张 User 表,其表结构如下
idnameageemali1Jone18test1@baomidou.com2Jack20test2@baomidou.com3Tom28test3@baomidou.com4Sandy21test4@baomidou.com5Billie24test5@baomidou.com
- DROP TABLE IF EXISTS user;
- CREATE TABLE `user` (
- `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
- `name` varchar(30) DEFAULT NULL COMMENT '姓名',
- `age` int DEFAULT NULL COMMENT '年龄',
- `email` varchar(50) DEFAULT NULL COMMENT '邮箱',
- `is_deleted` int NOT NULL DEFAULT '0' COMMENT '逻辑删除',
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
- DELETE FROM user;
- INSERT INTO user (id, name, age, email,is_deleted) VALUES
- (1, 'Jone', 18, 'test1@baomidou.com',0),
- (2, 'Jack', 20, 'test2@baomidou.com',0),
- (3, 'Tom', 28, 'test3@baomidou.com',0),
- (4, 'Sandy', 21, 'test4@baomidou.com',0),
- (5, 'Billie', 24, 'test5@baomidou.com',0);
复制代码 1.2、引入依赖
- mybatis-plus-boot-starter
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- <dependency>
- <groupId>com.baomidou</groupId>
- <artifactId>mybatis-plus-boot-starter</artifactId>
- <version>3.5.2</version>
- </dependency>
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <scope>runtime</scope>
- </dependency>
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>druid-spring-boot-starter</artifactId>
- <version>1.2.11</version>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
复制代码 1.3、配置数据库连接,开启控制台SQL语句输出
- spring:
- datasource:
- type: com.alibaba.druid.pool.DruidDataSource
- driver-class-name: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://114.67.111.175:3306/test
- username: wq
- password: 123456
- #开启控制台日志
- mybatis-plus:
- configuration:
- #控制台打印sql语句方便调试sql语句执行错误
- log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
- #这个不在控制台打印查询结果,但是在log4j2中打印
- #log-impl: org.apache.ibatis.logging.log4j2.Log4j2Impl
复制代码
- 在 Spring Boot 启动类中添加 @MapperScan 注解,扫描 Mapper 文件夹:
- @SpringBootApplication
- @MapperScan("com.wanqi.mybatisplus.mapper")
- public class Application {
- public static void main(String[] args) {
- SpringApplication.run(Application.class, args);
- }
- }
复制代码 1.4、编码
- package com.wanqi.mybatisplus.pojo;
- import com.baomidou.mybatisplus.annotation.IdType;
- import com.baomidou.mybatisplus.annotation.TableId;
- @TableName("user") //指定表名
- public class User {
- //type = IdType.AUTO自增字段需要修改数据库主键为自增
- //value指定对应主键字段名,type指定id生成策略(默认策略为雪花算法)
- @TableId(value = "id", type = IdType.AUTO)
- private Long id;
- //value数据库字段值
- @TableField(value = "name")
- private String name;
- private Integer age;
- private String email;
- private Integer isDeleted;
- public User(Long id, String name, Integer age, String email) {
- this.id = id;
- this.name = name;
- this.age = age;
- this.email = email;
- }
- public User(String name, Integer age, String email) {
- this.name = name;
- this.age = age;
- this.email = email;
- }
- public User() {
- }
- 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 Integer getAge() {
- return age;
- }
- public void setAge(Integer age) {
- this.age = age;
- }
- public String getEmail() {
- return email;
- }
- public void setEmail(String email) {
- this.email = email;
- }
- public Integer getIsDeleted() {
- return isDeleted;
- }
- public void setIsDeleted(Integer isDeleted) {
- this.isDeleted = isDeleted;
- }
- @Override
- public String toString() {
- return "User{" +
- "id=" + id +
- ", name='" + name + '\'' +
- ", age=" + age +
- ", email='" + email + '\'' +
- ", isDeleted=" + isDeleted +
- '}';
- }
- }
复制代码
- 编写 Mapper 包下的 UserMapper接口
- import com.wanqi.mybatisplus.pojo.User;
- import org.springframework.stereotype.Repository;
- @Repository
- public interface UserMapper extends BaseMapper<User> {
- }
复制代码 1.5、测试使用
- package com.wanqi.mybatisplus;
- import com.wanqi.mybatisplus.mapper.UserMapper;
- import com.wanqi.mybatisplus.pojo.User;
- import org.junit.jupiter.api.Test;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.boot.test.context.SpringBootTest;
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.List;
- @SpringBootTest
- class MybatisPlusApplicationTests {
- @Autowired
- private UserMapper userMapper;
- @Test
- public void testSelect() {
- System.out.println(("----- selectAll method test ------"));
- userMapper.insert(new User( "古力娜扎", 18, "test1@baomidou.com"));
- List<User> userList = userMapper.selectList(null);
- userList.forEach(System.out::println);
- }
- }
复制代码 2、批量操作
2.1、增加Service 层代码
- package com.wanqi.mybatisplus.service;
- import com.baomidou.mybatisplus.extension.service.IService;
- import com.wanqi.mybatisplus.pojo.User;
- /**
- * @Description TODO
- * @Version 1.0.0
- * @Date 2022/9/1
- * @Author wandaren
- */
- public interface UserService extends IService<User> {
- }
复制代码
- 注意 UserServiceImpl 必须要继承 MP 框架中的 ServiceImpl,不然要重写很多方法。
- package com.wanqi.mybatisplus.service;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import com.wanqi.mybatisplus.mapper.UserMapper;
- import com.wanqi.mybatisplus.pojo.User;
- import org.springframework.stereotype.Service;
- /**
- * @Description TODO
- * @Version 1.0.0
- * @Date 2022/9/1
- * @Author wandaren
- */
- @Service
- public class UserServiceImpl extends ServiceImpl<UserMapper, User>
- implements UserService{
- }
复制代码 2.2、测试使用
- package com.wanqi.mybatisplus;
- import com.wanqi.mybatisplus.mapper.UserMapper;
- import com.wanqi.mybatisplus.pojo.User;
- import com.wanqi.mybatisplus.service.UserServiceImpl;
- import org.junit.jupiter.api.Test;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.boot.test.context.SpringBootTest;
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.List;
- @SpringBootTest
- class MybatisPlusApplicationTests {
- @Autowired
- private UserServiceImpl userService;
- @Test
- void contextLoads() {
- Collection<User> userList = new ArrayList<>();
- userList.add(new User("hhh", 18, "test1@baomidou.com"));
- userList.add(new User("sss", 18, "test1@baomidou.com"));
- userList.add(new User("ddd", 18, "test1@baomidou.com"));
- userService.saveBatch(userList);
- System.out.println(userService.list());
- }
- }
复制代码 3、Service CURD
3.1、save
- // 插入一条记录(选择字段,策略插入)
- boolean save(T entity);
- // 插入(批量)
- boolean saveBatch(Collection<T> entityList);
- // 插入(批量)
- boolean saveBatch(Collection<T> entityList, int batchSize);
复制代码
3.2、saveOrUpdate
- // TableId 注解存在更新记录,否插入一条记录
- boolean saveOrUpdate(T entity);
- // 根据updateWrapper尝试更新,否继续执行saveOrUpdate(T)方法
- boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper);
- // 批量修改插入
- boolean saveOrUpdateBatch(Collection<T> entityList);
- // 批量修改插入
- boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize);
复制代码
3.3、remove
[code]// 根据 entity 条件,删除记录boolean remove(Wrapper queryWrapper);// 根据 ID 删除boolean removeById(Serializable id);// 根据 columnMap 条件,删除记录boolean removeByMap(Map columnMap);// 删除(根据ID 批量删除)boolean removeByIds(Collection |