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:

 

推荐顺序:

 

posted @ 2023-09-11 10:40  Avava_Ava  阅读(33)  评论(0编辑  收藏  举报