Mybatis-Plus的入门及应用
哈喽大家好~ 好久不见!!!
距离上次写作已经过去一个半月啦,这段断更的时间呢小应学长也在准备工作的事情,一直在面试之类,最后在八月一号入职啦,看到文章的小伙伴也要加油哟!
是这样,在工作期间一个项目用到了Mybatis-Plus,突然看自己的博客发现之前没有写这篇文章,所以就趁着这个机会来写吧。那我们就开始吧~~
一、什么是Mybatis-Plus?
其实很好理解,顾名思义就是Myabtis的加强版,就是这么好理解
我们先看看Mybatis-Plus的官网:
https://baomidou.com/
我们看到这只鸟变成了蓝色,从图片上也可以看到官网对Mybatis-Plus的一个简介:为简化开发而生
在官网也可以看到Mybatis-Plus的特性以及所支持的数据库
看完这些,大家是不是都想快速的试试实战效果如何?
二、Mybatis-Plus的快速入门
一、数据库的搭建
首先我们需要一张数据表,这样就按照官网的步骤来吧,采用的是MySQL数据库,建表SQL:
表名:user
DROPTABLEIFEXISTS mp_user;CREATETABLEuser(
id BIGINT(20)NOTNULLCOMMENT'主键ID',
name VARCHAR(30)NULLDEFAULTNULLCOMMENT'姓名',
age INT(11)NULLDEFAULTNULLCOMMENT'年龄',
email VARCHAR(50)NULLDEFAULTNULLCOMMENT'邮箱',PRIMARYKEY(id));
创建成功后,直接导入数据:
DELETEFROMuser;INSERTINTOuser(id, name, age, email)VALUES(1,'Jone',18,'[email protected]'),(2,'Jack',20,'[email protected]'),(3,'Tom',28,'[email protected]'),(4,'Sandy',21,'[email protected]'),(5,'Billie',24,'[email protected]');
这样子我们的测试表就建完啦
二、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@NoArgsConstructorpublicclass user {privateLong id;privateString name;privateInteger age;privateString email;}
注解解释:
- @Data:自动生成Getter,Setter,equals,canEqual,hasCode,toString等方法
- @AllArgsConstructor:自动添加一个构造函数,该构造函数含有所有已声明字段属性参数
- @NoArgsConstructor:自动创建一个无参构造函数
接着去创建一个Mapper接口,继承BaseMapper,传入泛型即可:
@Repository//代表持久层publicinterfaceUserMapperextendsBaseMapper<user>{}
没错,就是这一行代码哈哈哈,大家可以点进BaseMapper查看
然后在启动类上添加扫描@MapperScan:
@MapperScan("com.example.mp_Test.mapper")@SpringBootApplicationpublicclassMpTestApplication{publicstaticvoidmain(String[] args){SpringApplication.run(MpTestApplication.class, args);}}
然后用测试类去测试是否有效:
@SpringBootTestclassMpTestApplicationTests{//继承了BaseMapper,所以所有方法都来自父类,但自己也可以写自己需要的方法@AutowiredprivateUserMapper userMapper;@TestvoidcontextLoads(){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方法:
只需要在测试类下写法即可:
@TestpublicvoidInsert(){User user =newUser();
user.setName("小王");
user.setAge(20);
user.setEmail("[email protected]");int result = userMapper.insert(user);System.out.println(result);System.out.println(user);}
注意:我们这里没有set对应的ID,但是我们运行后,发现id有值:
得出的结论是这个ID会自己生成,这就涉及到了主键生成策略,因为实体类里面的ID对应数据库表中的主键
更新操作:
@TestpublicvoidUpdate(){User user =newUser();//把上面插入信息的那条信息给更新
user.setId(1558809291433979905L);
user.setName("小陈");
user.setAge(30);
user.setEmail("[email protected]");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~~
版权归原作者 热爱飞行的小应学长 所有, 如有侵权,请联系我们删除。