• Java真的不难(四十七)Mybatis-Plus的入门及应用


    Mybatis-Plus的入门及应用

    哈喽大家好~ 好久不见!!!
    距离上次写作已经过去一个半月啦,这段断更的时间呢小应学长也在准备工作的事情,一直在面试之类,最后在八月一号入职啦,看到文章的小伙伴也要加油哟!
    是这样,在工作期间一个项目用到了Mybatis-Plus,突然看自己的博客发现之前没有写这篇文章,所以就趁着这个机会来写吧。那我们就开始吧~~


    一、什么是Mybatis-Plus?

    其实很好理解,顾名思义就是Myabtis的加强版,就是这么好理解
    我们先看看Mybatis-Plus的官网:https://baomidou.com/
    在这里插入图片描述
    我们看到这只鸟变成了蓝色,从图片上也可以看到官网对Mybatis-Plus的一个简介:为简化开发而生

    在官网也可以看到Mybatis-Plus的特性以及所支持的数据库
    在这里插入图片描述
    看完这些,大家是不是都想快速的试试实战效果如何?


    二、Mybatis-Plus的快速入门

    一、数据库的搭建

    首先我们需要一张数据表,这样就按照官网的步骤来吧,采用的是MySQL数据库,建表SQL:
    表名:user

    DROP TABLE IF EXISTS mp_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)
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    创建成功后,直接导入数据:

    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');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    这样子我们的测试表就建完啦


    二、SpringBoo项目搭建

    创建SpringBoot项目的过程可以看我的上一篇博客,这样就不讲啦
    初始化SpringBoot项目后,需要在pom.xml里面添加依赖:
    因为你是Boot项目,所有已经自带了Boot的依赖,我们只需导入Mybatis-Plus的依赖即可,这里我就复制了所有的,大家也可以检查一下是否缺少:

    引入 Spring Boot Starter 父工程:

    <parent>
    		<groupId>org.springframework.bootgroupId>
    		<artifactId>spring-boot-starter-parentartifactId>
    		<version>2.7.2version>
    		<relativePath/> 
    parent>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    引入MySQL驱动包、 spring-boot-starter、spring-boot-starter-test、mybatis-plus-boot-starter和lombok依赖:

    	<dependencies>
    		<dependency>
    			<groupId>mysqlgroupId>
    			<artifactId>mysql-connector-javaartifactId>
    		<version>8.0.23version>
    		dependency>
    		<dependency>
    			<groupId>org.springframework.bootgroupId>
    			<artifactId>spring-boot-starterartifactId>
    		dependency>
    		<dependency>
    			<groupId>org.springframework.bootgroupId>
    			<artifactId>spring-boot-starter-testartifactId>
    			<scope>testscope>
    		dependency>
    		<dependency>
    			<groupId>com.baomidougroupId>
    			<artifactId>mybatis-plus-boot-starterartifactId>
    		dependency>
    		<dependency>
                <groupId>org.projectlombokgroupId>
                <artifactId>lombokartifactId>
                <version>1.18.24version>
                <scope>providedscope>
            dependency>
    	dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    注意:尽量不要同时导入Mybatis和Mybatis-Plus! 可能会存在版本差异出问题


    三、连接数据库

    首先去application.properties这个文件配置数据库

    MySQL5连接方式:

    spring.datasource.username=root
    spring.datasource.password=111111
    spring.datasource.url=jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=utf-8
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    
    • 1
    • 2
    • 3
    • 4

    MySQL8连接方式(需要增加时区配置):

    spring.datasource.username=root
    spring.datasource.password=111111
    spring.datasource.url=jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    
    • 1
    • 2
    • 3
    • 4

    注意:高版本兼容低版本


    四、完成Java代码

    我们知道MyBatis可以实现自动映射,所以我们要创一个实体类:

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class user {
        private Long id;
        private String name;
        private Integer age;
        private String email;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    注解解释:

    • @Data:自动生成Getter,Setter,equals,canEqual,hasCode,toString等方法
    • @AllArgsConstructor:自动添加一个构造函数,该构造函数含有所有已声明字段属性参数
    • @NoArgsConstructor:自动创建一个无参构造函数

    接着去创建一个Mapper接口,继承BaseMapper,传入泛型即可:

    @Repository  //代表持久层
    public interface UserMapper extends BaseMapper<user> {
    }
    
    • 1
    • 2
    • 3

    没错,就是这一行代码哈哈哈,大家可以点进BaseMapper查看

    然后在启动类上添加扫描@MapperScan:

    @MapperScan("com.example.mp_Test.mapper")
    @SpringBootApplication
    public class MpTestApplication {
    
    	public static void main(String[] args) {
    		SpringApplication.run(MpTestApplication.class, args);
    	}
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    然后用测试类去测试是否有效:

    @SpringBootTest
    class MpTestApplicationTests {
    
    	//继承了BaseMapper,所以所有方法都来自父类,但自己也可以写自己需要的方法
    	@Autowired
    	private UserMapper userMapper;
    
    	@Test
    	void contextLoads() {
    		List<user> users = userMapper.selectList(null);
    		users.forEach(System.out::println);
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    我们可以在控制台看到数据库的表内容已经全部被输出:
    在这里插入图片描述
    到这里大家是不是觉得这也太方便了吧,是的,Mybatis-Plus就是这样,不用写XML,直接接口继承BaseMapper即可

    注意:我们需要在主启动类上去扫描mapper包下的所有接口,使用@MapperScan注解


    三、配置日志

    通过上述的体验,确实发现比Mybatis更简单,但是发现SQL是不可见的,也就是我们不知道期间执行了什么样的SQL,所以我们需要通过日志去查看期间运行的SQL。

    还是在application.properties文件里添加以下配置:

    #日志配置
    mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
    
    • 1
    • 2

    当然也可以使用Log4j日志,导入对应依赖即可

    然后重新运行测试类:
    在这里插入图片描述

    四、其他的CRUD操作

    插入操作:
    上面完成了基本的查询,现在可以试试使用MyBatis-Plus的INSERT方法:
    只需要在测试类下写法即可:

    @Test
    public void Insert(){
    	User user = new User();
    	user.setName("小王");
    	user.setAge(20);
    	user.setEmail("123456@qq.com");
    	int result = userMapper.insert(user);
    	System.out.println(result);
    	System.out.println(user);
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    注意:我们这里没有set对应的ID,但是我们运行后,发现id有值:
    在这里插入图片描述
    得出的结论是这个ID会自己生成,这就涉及到了主键生成策略,因为实体类里面的ID对应数据库表中的主键


    更新操作:

    @Test
    public void Update(){
    	User user = new User();
    	//把上面插入信息的那条信息给更新
    	user.setId(1558809291433979905L);
    	user.setName("小陈");
    	user.setAge(30);
    	user.setEmail("888888@qq.com");
    	int i = userMapper.updateById(user); //返回受影响行数
    	System.out.println(i);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    测试OK,但是注意updateById的参数是一个对象!!!

    还有一个DELETE操作就大家自己去试试吧~~~


    五、主键生成策略

    常见的主键生成策略有:

    1. 数据库自增ID
    2. UUID
    3. UUID变种(UUID to Int64)
    4. Redis生成ID
    5. Twitter的雪花算法

    这里可以参考一篇博客:分布式系统唯一ID生成方案汇总https://www.cnblogs.com/haoxinyue/p/5208136.html

    什么是雪花算法?
    snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0。

    特点:保证全球唯一


    好啦 这篇文章就到这里,有时间继续写后面的内容,Bye~~

    在这里插入图片描述

  • 相关阅读:
    Redis面试连环问,你能撑到哪一问
    Arcgis建筑面shp由DSM和DEM获取高度
    《道德经》与“低熵”思想炫酷实现(.html)
    Selenium操作已经打开的Chrome浏览器窗口
    什么是云原生?零基础学云原生难吗?
    font标签、特殊字符、标题标签h1-h6
    字符串压缩(一)之ZSTD
    mysql 一对多查询 合并为一行数据
    sqlite3的lib和头文件在哪下载 2023/9/19 上午10:46:43
    Java中 \n \f \r \t 含义
  • 原文地址:https://blog.csdn.net/m0_57310550/article/details/126335116