谷粒学院-项目功能模块、技术点、整合Mybatis-Plus、主键生成策略

2023-05-16


Mybaitis-Plus

简介 | MyBatis-Plus

初始化工程

使用 Spring Initializr 快速初始化一个 Spring Boot 工程

Group:com.nanjing

Artifact:mybatis-plus

版本:2.5.10

pom.xml中增加依赖


<!--mybatis-plus-->   

<!--mysql-->  

<!--lombok用来简化实体类-->  

注意:

引入 MyBatis-Plus 之后请不要再次引入 MyBatis 以及 MyBatis-Spring

以避免因版本差异导致的问题。

<?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.5.10</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.nanjing</groupId>
    <artifactId>mybatis-plus</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>mybatis-plus</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-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.0.5</version>
        </dependency>

        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!--lombok用来简化实体类-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>



    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

在Idea安装lombok插件,Idea2021自带了,不需要搜索安装了

在项目中使用Lombok可以减少很多重复代码的书写。比如说getter/setter/toString等方法的编写

application.properties 配置文件中添加 MySQL 数据库的相关配置:

mysql5

#mysql数据库连接
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus
spring.datasource.username=root
spring.datasource.password=mysql

创建包entity编写实体类User.java(此处使用了 Lombok 简化代码)

package com.nanjing.mybatisplus.entity;

import lombok.Data;

@Data
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

创建包mapper 编写Mapper接口: UserMapper.java

package com.nanjing.mybatisplus.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.nanjing.mybatisplus.entity.User;

public interface UserMapper extends BaseMapper<User> {
}

最好加上@Repository注解

package com.nanjing.mybatisplus.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.nanjing.mybatisplus.entity.User;
import org.springframework.stereotype.Repository;

@Repository
public interface UserMapper extends BaseMapper<User> {
}

在Spring Boot启动类中添加@MapperScan注解,扫描Mapper文件夹 

package com.nanjing.mybatisplus;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.nanjing.mybatisplus.mapper")
public class MybatisPlusApplication {

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

}

创建mybatis_plus库,建user表

DROP TABLE IF EXISTS USER;
CREATE TABLE USER
(
    id BIGINT(20) NOT NULL COMMENT '主键ID',
    NAME VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
    age INT(11) NULL DEFAULT NULL COMMENT '年龄',
    email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
    PRIMARY KEY (id)
);


DELETE FROM USER;
INSERT INTO USER (id, NAME, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');

在测试类中,进行功能测试:

注意:

IDEA在userMapper 处报错,因为找不到注入的对象,因为类是动态创建的,但是程序可以正确

的执行。为了避免报错,可以在dao层的接口上添加@Repository注解。

package com.nanjing.mybatisplus;

import com.nanjing.mybatisplus.entity.User;
import com.nanjing.mybatisplus.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
class MybatisPlusApplicationTests {

    @Autowired
    private UserMapper userMapper;

    @Test
    void contextLoads() {
        List<User> users = userMapper.selectList(null);
        users.forEach(System.out::println);
    }

}

查看sql输出日志

#mybatis日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

 insert插入操作

//添加操作
@Test
public void addUser() {
    User user = new User();
    user.setName("岳不群1");
    user.setAge(70);
    user.setEmail("lucy@qq.com");
//        user.setCreateTime(new Date());
//        user.setUpdateTime(new Date());
    int insert = userMapper.insert(user);
    System.out.println("insert:"+insert);
}

注意:数据库插入id值默认为:全局唯一id


主键生成策略(面试会问)

(1)ID_WORKER

MyBatis-Plus默认的主键策略是:ID_WORKER,全局唯一ID

分布式系统唯一ID生成方案汇总:

分布式系统唯一ID生成方案汇总 - nick hao - 博客园

(2)自增策略

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

谷粒学院-项目功能模块、技术点、整合Mybatis-Plus、主键生成策略 的相关文章

随机推荐