MyBatis-Plus学习
一、快速开始——如何快速使用MyBatis-Plus
官方文档:https://www.baomidou.com/pages/226c21/#%E7%BC%96%E7%A0%81
主要包括:
1.创建工程
2.引入依赖
<!-- mybatis-plus,这里版本最好选用3.5.3,使用3.5.1版本在连接数据库时会报错 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3</version>
</dependency>
3.配置application.yml
mybatis-plus不需要额外的配置就可以实现基本功能,有数据库的基本配置就可以了,
mybatis-pus.mapper-location可以用在启动类上加@MapperScan替代;
--- #---------------------数据库配置---------------------------
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/novel_db?serverTimezone=UTC
username: root
password: abc123
#扫描resources/mapper下的所有.xml文件(classpath:就表示resources目录)
#mybatis:
# mapper-locations: classpath:mapper/*.xml
#mybatis-plus:
# mapper-locations: classpath:mapper/*.xml
4.在启动类上加@MapperScan,指向mapper接口所在的包
@SpringBootApplication
@MapperScan("com.tzc.mapper")
public class ZCnovelApplication {
public static void main(String[] args) {
SpringApplication.run(ZCnovelApplication.class, args);
}
}
6.添加实体类;
查看代码
package com.tzc.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
*
* 用户信息
* @author tzc
* @date 2023/11/18
*/
@TableName("user_info")
@Data
public class UserInfo implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 登录名
*/
private String username;
/**
* 登录密码-加密
*/
private String password;
/**
* 加密盐值
*/
private String salt;
/**
* 昵称
*/
private String nickName;
/**
* 用户头像
*/
private String userPhoto;
/**
* 用户性别;0-男 1-女
*/
private Integer userSex;
/**
* 账户余额
*/
private Long accountBalance;
/**
* 用户状态;0-正常
*/
private Integer status;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
}
7.添加mapper接口(继承BaseMapper<T>,T为对应的实体类)
查看代码
package com.tzc.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tzc.model.entity.UserInfo;
/**
*
* 用户信息 Mapper 接口
* @author tzc
* @date 2023/11/18
*/
public interface UserInfoMapper extends BaseMapper<UserInfo> {
}
8.在Resources目录下新建文件夹mapper,在该文件夹下新建xml文件
两点要求:①文件名与其对应的mapper接口完全相同;②namesapce属性指向其对应的mapper接口所在的包;
UserInfoMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--mapper接口和映射文件要保证两个一致:-->
<!--1.mapper接口的全类名和映射文件的命名空间(namespace)保持一致-->
<!--这里填入mapper接口的全类名,如UserMapper接口的全类名为com.atguigu.mybatis.mapper.UserMapper-->
<mapper namespace="com.tzc.mapper.UserInfoMapper">
<!-- int insertUser(); -->
<!--2.mapper接口中方法的方法名和映射文件中编写SQL的标签的id属性保持一致-->
<!-- <insert id="insertUser">-->
<!-- insert into t_user values(2,'makabaka','114514',25,'男','777.com')-->
<!-- </insert>-->
</mapper>
接下来就可以使用mapper接口调用BaseMapper中的方法对数据库进行操作了;
二、常用设置
1.设置表名映射规则——设置实体类与数据库表之间的映射
①单独设置:@TableName("")
②全局设置:table-prefix
2.设置主键生成策略
①单独设置:@TableId("")
②全局设置:id-type
3.设置字段和列名的驼峰映射:map-underscore-to-camel-case
4.设置字段映射关系:@TableField(")
——当属性名和表中的字段名不相同也不符合驼峰映射,无法自动映射时,就需要手动设置属性名对应的字段名
5.日志——log-impl
三、基本使用
1.插入数据——insert(Entity e)
2.删除操作
3.更新操作
四、条件构造器Wrapper
官方文档:https://www.baomidou.com/pages/10c804/#abstractwrapper
1.概述
2.常用的AbstractWrapper方法
3.常用的QueryWrapper方法——用来设置要查询的列(要查的列很少推荐方法一,很多则推荐方法二)
4.常用的UpdateWrapper方法
5.Lambda条件构造器
五、自定义SQL
1.MyBatis方式
2.MyBatis方式结合条件构造器
调用:
六、分页查询
1.基本分页查询
①配置分页查询拦截器
MybatisPlusConfig
@Configuration
@MapperScan("scan.your.mapper.package")
public class MybatisPlusConfig {
/**
* 添加分页插件
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));//如果配置多个插件,切记分页最后添加
//interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); 如果有多数据源可以不配具体类型 否则都建议配上具体的DbType
return interceptor;
}
}
mybatis_plus分页插件的作用:
拦截所有SQL语句的执行,解析传入的参数,提取出分页相关的信息(IPage),
(因此只要配置了分页插件,并传入IPage参数,自定义方法也会自动实现分页查询)
然后根据传入的参数信息,动态地改写原始的 SQL 语句,添加分页的逻辑,最后数据库执行完带有分页逻辑的 SQL 语句后,MyBatis-Plus 分页插件会获取查询结果,
并将分页相关信息如总记录条数写入之前传入的参数IPage中;
(因此,在执行完SQL语句后,直接通过page.getTotal()就可以获得总记录条数)
②进行分页查询
2.多表分页查询
七、Service层接口
官方文档:https://www.baomidou.com/pages/49cc81/#service-crud-%E6%8E%A5%E5%8F%A3
八、代码生成器
九、自动填充
官方文档:https://www.baomidou.com/pages/4c6bcf/
十、逻辑删除功能
作用:
①在执行delete语句时,会自动转换为update语句,将对应记录的的逻辑删除字段由0改为1;
②在执行查询操作时,也会自动加上查询条件(逻辑删除字段不为1);
十一、乐观锁
官方文档:https://www.baomidou.com/pages/0d93c0/#optimisticlockerinnerinterceptor
十二、多插件配置问题
使用多个插件也只需要注入一个Interceptor:
推荐顺序: