1. 概述
•MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
•官网:https://mybatis.plus/ 或 https://mp.baomidou.com/
版本
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> <version>3.4.0</version> </dependency>
2. 快速入门
SpringBoot 整合 MyBatis-Plus,并实现根据Id查询功能。
①数据库环境准备 ②创建SpringBoot工程,引入MyBatis-Plus起步依赖 ③编写DataSource相关配置 ④编写mapper ⑤测试
2.1 数据库环境准备
2.2 创建SpringBoot工程,引入MyBatis-Plus起步依赖
<?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.3.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>mybatis-plus-test</artifactId> <version>0.0.1-SNAPSHOT</version> <name>mybatis-plus-test</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> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- mysql 驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.26</version> </dependency> <!--mybatisplus起步依赖--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
2.3 编写DataSource相关配置
server.port=10001 # datasource spring.datasource.url=jdbc:mysql://localhost:3306/mp?characterEncoding=utf-8 spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver
2.4 编码
编写mapper
/** * 使用mp定义Mapper,需要让Mapper接口继承 BaseMapper接口。 */ public interface UserMapper extends BaseMapper<User> { }
@TableName(“tb_user”) // 指定表名,让BaseMapper找到
@TableName("tb_user") // 指定表名,让BaseMapper<User>找到 @Data public class User { private Long id; private String userName; private String password; private String name; private Integer age; private String email;
启动类增加 @MapperScan 注解
好处:可以不用向每次在mapper上写@mapper注解
package com.example.mybatisplustest; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; @SpringBootApplication @MapperScan("com.example.mybatisplustest.mapper") public class MybatisPlusTestApplication { public static void main(String[] args) { SpringApplication.run(MybatisPlusTestApplication.class, args); } }
2.5 测试
package com.example.mybatisplustest.mapper; import com.example.mybatisplustest.MybatisPlusTestApplication; import com.example.mybatisplustest.pojo.User; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; @SpringBootTest(classes = MybatisPlusTestApplication.class) @RunWith(SpringRunner.class) public class UserMapperTest { @Autowired private UserMapper userMapper; /** * 根据id查询 */ @Test public void testSelectById() { User user = userMapper.selectById(1L); System.out.println(user); } }
3. CRUD
3.1 添加
3.1.1 方法解析
3.1.2 测试
@Test public void testInsert() { User user = new User(); //user.setId(6L); user.setUserName("oldlu"); user.setPassword("oldlu"); int count = userMapper.insert(user); System.out.println(count); }
3.1.3 说明1, 实体类上的注解 @TableField
1) @TableField("user_name") 指定映射关系 实体类的属性名和数据库的字段名自动映射: * 名称一样 * 数据库字段使用_分割,实体类属性名使用驼峰名称 否则需要使用 @TableField("user_name") 指定映射关系 2) 忽略某个字段的查询和 插入 @TableField(exist = false) 3) 设置id生成策略:AUTO 数据库自增 @TableId(type = IdType.AUTO)
3.1.4 说明2, 配置
mybatis-plus: global-config: db-config: # 表名前缀 table-prefix: tb_ # id生成策略 数据库自增 id-type: auto configuration: # 日志 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
##mybatis-plus mybatis-plus.global-config.db-config.table-prefix=tb_ mybatis-plus.global-config.db-config.id-type=auto mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
3.1.5 具体使用如下
/** * 实体类的属性名和数据库的字段名自动映射: * 1. 名称一样 * 2. 数据库字段使用_分割,实体类属性名使用驼峰名称 */ @TableName("tb_user") @Data public class User { //设置id生成策略:AUTO 数据库自增 @TableId(type = IdType.AUTO) private Long id; //@TableField("user_name") private String userName; private String password; private String name; private Integer age; private String email; //不希望该值存入数据库 // @TableField(exist = false) // private String info; }
3.2 删除
3.2.1 根据id删除
int count = userMapper.deleteById(8L); • 1
3.2.1 根据id集合批量删除
List ids = new ArrayList(); ids.add(6); ids.add(7); userMapper.deleteBatchIds(ids);
3.2.1 根据map构造条件,删除
Map<String, Object> map = new HashMap<>(); //delete from tb_user where user_name = ? and age = ? map.put("user_name","oldlu"); map.put("age","18"); userMapper.deleteByMap(map);
3.3 更新
@Test public void testUpdateById() { User user = new User(); user.setId(2L); user.setPassword("1111111"); int count = userMapper.updateById(user); }
4 查询
说白了条件查询就是数据库中的where,之后的.出来的链式都是AND拼接,之后根据sql语句比如:
wrapper.eq("user_name","lisi") .set("password","22222"); //update tb_user set password = ? where user_name = ? userMapper.update(null,wrapper);
这个就是更新谁(条件),在什么地方更新。
4.1 分页查询
配置 拦截器
@Configuration public class PageConfig { /** * 3.4.0之前的版本用这个 * @return */ /* @Bean public PaginationInterceptor paginationInterceptor(){ return new PaginationInterceptor(); }*/ /** * 3.4.0之后提供的拦截器的配置方式 * @return */ @Bean public MybatisPlusInterceptor mybatisPlusInterceptor(){ MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor(); mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor()); return mybatisPlusInterceptor; } }
查询
/** * 分页查询: * 1. 当前页码:currentPage * 2. 每页显示条数:size * * 注意:使用mp的分页要设置一个拦截器!!! */ @Test public void testSelectPage() { int current = 1;//当前页码 int size = 2;//每页显示条数 IPage<User> page = new Page(current,size); userMapper.selectPage(page,null); List<User> records = page.getRecords();//当前页的数据 long pages = page.getPages();//总页数 2 long total = page.getTotal();//总记录数 4 System.out.println(records); System.out.println(pages); System.out.println(total); }