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

1年前 (2022) 程序员胖胖胖虎阿
143 0 0

Mybatis-Plus的入门及应用

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


一、什么是Mybatis-Plus?

其实很好理解,顾名思义就是Myabtis的加强版,就是这么好理解
我们先看看Mybatis-Plus的官网:https://baomidou.com/
Java真的不难(四十七)Mybatis-Plus的入门及应用
我们看到这只鸟变成了蓝色,从图片上也可以看到官网对Mybatis-Plus的一个简介:为简化开发而生

在官网也可以看到Mybatis-Plus的特性以及所支持的数据库
Java真的不难(四十七)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)
);

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

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');

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


二、SpringBoo项目搭建

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

引入 Spring Boot Starter 父工程:

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.7.2</version>
		<relativePath/> <!-- lookup parent from repository -->
</parent>

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

	<dependencies>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		<version>8.0.23</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</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>
		</dependency>
		<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
            <scope>provided</scope>
        </dependency>
	</dependencies>

注意:尽量不要同时导入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

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

注意:高版本兼容低版本


四、完成Java代码

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

@Data
@AllArgsConstructor
@NoArgsConstructor
public class user {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

注解解释:

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

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

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

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

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

@MapperScan("com.example.mp_Test.mapper")
@SpringBootApplication
public class MpTestApplication {

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

}

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

@SpringBootTest
class MpTestApplicationTests {

	//继承了BaseMapper,所以所有方法都来自父类,但自己也可以写自己需要的方法
	@Autowired
	private UserMapper userMapper;

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

我们可以在控制台看到数据库的表内容已经全部被输出:
Java真的不难(四十七)Mybatis-Plus的入门及应用
到这里大家是不是觉得这也太方便了吧,是的,Mybatis-Plus就是这样,不用写XML,直接接口继承BaseMapper即可

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


三、配置日志

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

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

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

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

然后重新运行测试类:
Java真的不难(四十七)Mybatis-Plus的入门及应用

四、其他的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);
}

注意:我们这里没有set对应的ID,但是我们运行后,发现id有值:
Java真的不难(四十七)Mybatis-Plus的入门及应用
得出的结论是这个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);
}

测试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~~

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

相关文章

暂无评论

暂无评论...