SpringBoot学习日记——DAY05(SpringBoot整合MyBatis-plus实现增删改查)

今天针对SpringBoot整合MyBatis-plus相关内容展开了学习:

1.准备工作:

1.1配置maven的pom.xml文件:

XML 复制代码
<?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>
    <groupId>org.example</groupId>
    <artifactId>day05_spring_boot_mp</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>day05_spring_boot_mp</name>
    <description>day05_spring_boot_mp</description>
    <properties>
        <java.version>11</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.6.13</spring-boot.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </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>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>11</source>
                    <target>11</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <configuration>
                    <mainClass>com.djw.Day05SpringBootMpApplication</mainClass>
                    <skip>true</skip>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

1.2完成实体类以及对应Mapper的编写

Student实体类:

java 复制代码
package com.djw.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

/**
 * @author djw
 */
@Data
@Accessors(chain = true)
@AllArgsConstructor
@TableName("student")
@NoArgsConstructor
public class Student {
    @TableId(type = IdType.AUTO)
    private Integer id;
    private String name;
    private Integer age;
    @TableField(value="gender")
    private String gender;
    private Integer deleted;
}

StudentMapper:

java 复制代码
package com.djw.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.djw.entity.Student;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

/**
 * @author djw
 */
@Repository
@Mapper
public interface StudentMapper extends BaseMapper<Student> {}

配置application.yml

XML 复制代码
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=GMT%2B8
    username: 账号
    password: 密码
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      logic-delete-field: deleted
      logic-delete-value:  1
      logic-not-delete-value: 0

启动类:

java 复制代码
package com.djw;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Day05SpringBootMpApplication {

    public static void main(String[] args) {
        SpringApplication.run(Day05SpringBootMpApplication.class, args);
    }

}

2.BaseMapper详细解析:

2.1BaseMapper方法:

2.2逻辑规则类Wrapper:

可以定义一些特定的逻辑,等效于where等筛选语句

2.2.1QueryWrapper:

常用于实现删除,查询等操作的条件:

常见的一些方法:

.eq(字段,值)---->where 字段=值

.like(字段,值)----> where字段 like %值%

.likeRight(字段,值)----> where字段 like 值%

.in(字段,List)---->where 字段 in (......)

.gt(字段,值)---->where字段>值

.or(判断)---->OR

.and(判断)---->AND

2.2.2UpdateWrapper

常用于更新数据

常使用set(字段,值)的形式来设置要更改的字段,还可以附加eq/like/...筛选条件

2.2.3LambdaQueryWrapper/LambdaUpdateWrapper

是上面两个类的子类,能利用lmbda表达式更准确的定位到字段上,把字段名替换为对应的get方法

如:

java 复制代码
LambdaQueryWrapper<Student> lqw = new LambdaQueryWrapper<>();
lqw.eq(Student::getId,1);

2.3对于实体类的注解

java 复制代码
package com.djw.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

/**
 * @author djw
 */
@Data
@Accessors(chain = true)
@AllArgsConstructor
@TableName("student")
@NoArgsConstructor
public class Student {
    @TableId(type = IdType.AUTO)
    private Integer id;
    private String name;
    private Integer age;
    @TableField(value="gender")
    private String gender;
    private Integer deleted;
}

2.3.1@TableName:

用于指定类对应的表名;

2.3.2@TableId

用于指名主键id的类型

2.3.3@TableField

内置属性:

select = false---->设置查询不显示

exist = false ----> 属性不存在表中对应的字段

value ---->属性指定字段对应关系

2.4查询操作:

selectById(id值),根据主键id查询

selectBatchIds(List),等价于in(id1,id2...)

selectByMap(Map)

java 复制代码
Map<String, Object> map = new HashMap<>();
map.put("teacher_name", "李四");
map.put("gender", "女");
List<Teacher> teachers = mapper.selectByMap(map);

selectOne(Wrapper),查询得到一个对象,如果得到的是多个对象,报错

exists(Wrapper),查询是否有满足的对象存在

selectCount(Wrapper),返回查询的结果的条数

selectMaps(Wrapper),查询所有字段,返回类型是List<Map<String,Object>>

selectObjs(Wrapper),查询一条字段,返回类型是List<Object>

selectList(Wrapper),查询所有字段,返回类型是List<实体类>

2.5删除操作:

deleteById(id),根据指定id进行删除

deleteBatchIds(List),删除list中的id对应的数据

deleteByMap(map),删除满足map对应关系的数据

delete(Wrapper),按指定规则删除

2.6更新操作:

update(实体类对象,wrapper) --->实体类对象用于指明更新后的值,wrapper用于指明作用群体;

2.7分页处理:

在mybatis-plus官网可以查看到相应操作:

需要创建一个配置类:

java 复制代码
package com.djw.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author djw
 */
@Configuration
@MapperScan("com.djw.mapper")
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 如果配置多个插件, 切记分页最后添加
        // 如果有多数据源可以不配具体类型, 否则都建议配上具体的 DbType
        return interceptor;
    }
}

然后在对应的查询方法中使用:

selectPage(page,Wrapper):按照Page对象设置的初始页位置和页的大小进行值的接收,返回类型是Page

selectMapsPage(Page,Wrapper):按照Page对象设置的初始页位置和页的大小进行值的接收,返回类型是Page

用Page.getRecords来获得对应的分好页的数据;

3.自定义查询语句处理:

首先要在application.yml文件中配置好对应mapper所在的位置:

java 复制代码
mybatis-plus:
mapper-locations: classpath:/mapper/**/*.xml
type-aliases-package: com.xzit.entity

Mapper类:

java 复制代码
package com.xzit.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xzit.entity.Student;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface StudentMapper extends BaseMapper<Student> {
    List<Student> selectCustomer();

    Page<Student> selectCustomerPage(@Param("page") Page<Student> page, @Param("age") int age);
}

Mapper.xml:

XML 复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xzit.mapper.StudentMapper">
<select id="selectCustomer" resultType="Student">
select s.*, t.teacher_name
from student s
JOIN teacher t
on s.tid = t.id
</select>
<select id="selectCustomerPage" resultType="Student">
select s.*, t.teacher_name
from student s
JOIN teacher t
on s.tid = t.id
where s.age&lt;#{age}
</select>
</mapper>

@Param是别名

4.主键生成策略

auto:数据库ID自增
assign_id:通过雪花算法,生成id(number或string)19位数字
assign_uuid:使用UUID,主键string类型 32位长的字符串(包含数字和字母)
input:用户输入ID
none:没有指定主键的类型(注解里使用,跟随全局。全局里使用,相当于input)
既可以通过TableId来指定生成策略,也可以通过在application.yml文件中进行全文配置:

XML 复制代码
mybatis-plus:
global-config:
db-config:
id-type: auto
相关推荐
phltxy5 小时前
RabbitMQ SpringBoot消息队列与应用间通信
spring boot·rabbitmq·java-rabbitmq
吃好睡好便好5 小时前
用直接输入的方式创建矩阵
开发语言·人工智能·学习·线性代数·算法·matlab·矩阵
憧憬成为java架构高手的小白5 小时前
苍穹外卖--day07(缓存商品,购物车)
java·spring boot
fengxin_rou5 小时前
【SpringBoot+Elasticsearch 内容搜索系统实战】:架构设计与全流程实现
spring boot·后端·elasticsearch
秋雨梧桐叶落莳6 小时前
iOS——UIStackView学习
学习·macos·ios·objective-c·cocoa
z200509306 小时前
今日算法(二叉搜索树)
学习·leetcode
神谕的祝福7 小时前
comfyui从0到1开始学习-第二讲参数实验
学习
魔法阵维护师7 小时前
从零开发游戏需要学习的c#模块,第二十三章(存档与高分系统)
学习·游戏·c#
吃好睡好便好14 小时前
用while循环语句求和
开发语言·学习·算法·matlab·信息可视化