1.简介
Mybatis-plus是Mybatis的增强工具,在mybatis的基础上只做增强,不做改变,原来的mybatis该怎么写还怎么写,引入mybatis-plus不会影响原来的mybatisMybatis-plus可以自动生成Sql语句,简化了开发人员手动写Sql的过程。
2.演示:
下面演示在spring boot上使用Mybatis实现增删改查分页等操作:
2.1:
创建Spring boot项目后,在pom.xml中配置版本和引入依赖:
其中要注意JDK和Java版本的匹配,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> <!-- Mybatis-plus的引包注意:--> <!-- 下面的是springboot的版本:--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.12.RELEASE</version> <!-- 上面的springboot版本如果JDK是1.8的,用2.3.12.RELEASE,如果是17的,用3.2.4--> <relativePath/> </parent> <groupId>com.software</groupId> <artifactId>Mybatis-Plus01</artifactId> <version>0.0.1-SNAPSHOT</version> <name>Mybatis-Plus01</name> <description>Mybatis-Plus01</description> <properties> <java.version>1.8</java.version> <!-- JDK的版本--> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!-- Spring相关的:--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- mybatis-plus相关:--> <!-- spring boot使用2.0(2.3.12.RELEASE)以下版本的(JDK为1.8的):--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.2</version> </dependency> <!-- spring boot是3.x(3.2.4,JDK是17的)的版本的:--> <!-- <dependency>--> <!-- <groupId>com.baomidou</groupId>--> <!-- <artifactId>mybatis-plus-spring-boot3-starter</artifactId>--> <!-- <version>3.5.5</version>--> <!-- </dependency>--> <!-- mysql:--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version> </dependency> <!-- 工具类:--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </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>
2.2:
建立实体类和数据库表,要注意写上注解:
package com.software.mybatisplus01.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("t_user")//让mybatis-plus可以扫描表名
public class User {
@TableId(type = IdType.AUTO)//让mybatis-plus可以扫描主键,在insert的时候type = IdType.AUTO自动新增Id,并且会自动返回这个自增主键
private Integer userId;
private String userName;
private String password;
}
2.3:
建立UserMapper接口,继承BaseMapper类,从而实现Mybatis-plus自动生成sql的功能:
package com.software.mybatisplus01.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.software.mybatisplus01.entity.User;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper extends BaseMapper<User> {//这样就具有简单的增删改查相关的功能了
}
2.4:
写yml文件:
server:
servlet:
context-path: /mp
port: 8080
spring:
datasource:
url: jdbc:mysql://127.0.0.1/mybatis?serverT8imezone=GMT%2b
#mysql是8版本的需要指定数据库连接池hikari:
hikari:
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password:
#打印日志:
logging:
level:
com.software: debug
2.5:
编写config配置类,用于将mybatis-plus的分页插件加载进来:
package com.software.mybatisplus01.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Mybatis-plus是Mybatis的增强工具,在mybatis的基础上只做增强,不做改变,原来的mybatis该怎么写还怎么写,引入mybatis-plus不会影响原来的mybatis
*
* 这个包是为了实现Mybatis-plus的分页,引入的插件:mybatis-plus分页插件(PaginationInnerInterceptor)
*/
@Configuration//证明这个类是个配置
public class MybatisPlusConfig {
@Bean//告诉springboot下面的是个bean,启动的时候要加载进来:
public MybatisPlusInterceptor myInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));//分页插件添加进去,还要指定数据库的类型DbType.MYSQL
return interceptor;
}
}
2.6:
在test包的最底层目录中建立单元测试类,进行增删改查和分页的单元测试:
package com.software.mybatisplus01;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.software.mybatisplus01.entity.User;
import com.software.mybatisplus01.mapper.UserMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
/**
* 这里是单元测试:
*/
@SpringBootTest//这个类是个测试类,这个注解可以直接启动spring容器,获取spring管理的bean,然后访问接口,进行测试
public class UserMapperTest {
@Autowired
private UserMapper userMapper;
@Test//注意包别搞错
public void findAll(){
List<User> users = userMapper.selectList(null);//查询所有
users.forEach(System.out::println);
}
@Test
public void findByIds() {
User user = userMapper.selectById(9);//查询id为9的
System.out.println(user);
}
//增:
@Test
public void insert(){
User user = new User();
user.setUserName("李浩正");
user.setPassword("121");
int n = userMapper.insert(user);//n为插入数据成功的条数
System.out.println(n);
}
//改:
@Test
public void update(){
User user = new User();
user.setUserId(12);
user.setUserName("更新的");
user.setPassword("12345");
int update = userMapper.updateById(user);//根据这个对象的id,修改这个对象
System.out.println(update);
}
//删:
@Test
public void delete(){
int i = userMapper.deleteById(3131);//通过主键来删除
System.out.println(i);
}
//分页查询:
@Test
public void findPage(){
Page<User> page = new Page<>(1,5);//当前页和页大小
Page<User> userPage = userMapper.selectPage(page, null);
userPage.getRecords().forEach(System.out::println);//getRecords获取分页结果
}
@Test
public void findWrapper(){
// QueryWrapper<User> wrapper = new QueryWrapper<>() ;
// wrapper.like("user_name","mp");//第一个参数列名,除了主键列都可以。第二个参数模糊参数
// wrapper.orderByDesc("user_id");//根据这个列去排序
/**
* SELECT user_id,user_name,password FROM t_user WHERE (user_name LIKE ?) ORDER BY user_id DESC
* 参数: %mp%(String)
*/
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.like(User::getUserName,"mp");//第一个参数:获取实体类的这一个属性的对应的列。第二个属性模糊参数
wrapper.orderByDesc(User::getUserId);//根据这个属性对应的列区排序
List<User> users = userMapper.selectList(wrapper);
users.forEach(System.out::println);
}
}