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)
);
创建成功后,直接导入数据:
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);
}
}
我们可以在控制台看到数据库的表内容已经全部被输出:
到这里大家是不是觉得这也太方便了吧,是的,Mybatis-Plus就是这样,不用写XML,直接接口继承BaseMapper即可
注意:我们需要在主启动类上去扫描mapper包下的所有接口,使用@MapperScan注解
三、配置日志
通过上述的体验,确实发现比Mybatis更简单,但是发现SQL是不可见的,也就是我们不知道期间执行了什么样的SQL,所以我们需要通过日志去查看期间运行的SQL。
还是在application.properties
文件里添加以下配置:
#日志配置
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
当然也可以使用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);
}
注意:我们这里没有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);
}
测试OK,但是注意updateById的参数是一个对象!!!
还有一个DELETE操作就大家自己去试试吧~~~
五、主键生成策略
常见的主键生成策略有:
- 数据库自增ID
- UUID
- UUID变种(UUID to Int64)
- Redis生成ID
- 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~~