个人技术博客--Springboot中MybatisPlus的使用
这个作业属于哪个课程 | 2021春软件工程实践|S班 |
---|---|
这个作业要求在哪里 | 作业要求的链接 |
这个作业的目标 | 个人技术总结 |
其他参考文献 | 本人所有博客 |
个人技术总结--Springboot中MybatisPlus的使用
第一部分 技术概述
- 使用情景及学习原因:Mybatis需要在xml中通过编写SQL语句实现数据库的操作,对于一个博客网站来说其实不需要那么灵活的实现方式,所用到的操作也大多是增删改查罢了,因此就选用集成Mybatis的MybatisPlus来简化开发。使用MybatisPlus可以进行快速的开发。
- 技术实现难点:需要进行详细的配置,整合到SpringBoot中,除此之外MybatisPlus是对Mybatis的增强工具,封装好了一些CRUD的方法,不需要再编写xml文件,因此在实现难点上是相对减少的。
第二部分 技术详述
具体实现建议看博客:Springboot整合MybatisPlus
-
在pom.xml文件中添加依赖
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.3.2</version> </dependency>
-
配置数据库
datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://47.100.89.20:3306/salt_hub?serverTimezone=Etc/GMT-8&useUnicode=true&characterEncoding=utf-8&useSSL=true username: root password: lw091211 # 数据源其他配置 initialSize: 5 #初始化时池中建立的物理连接个数。 minIdle: 3 maxActive: 20 #最大的可活跃的连接池数量 maxWait: 60000 #获取连接时最大等待时间,单位毫秒,超过连接就会失效。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降, 如果需要可以通过配置useUnfairLock属性为true使用非公平锁。 timeBetweenEvictionRunsMillis: 60000 #连接回收器的运行周期时间,时间到了清理池中空闲的连接,testWhileIdle根据这个判断 minEvictableIdleTimeMillis: 300000 validationQuery: SELECT 1 FROM DUAL #用来检测连接是否有效的sql,要求是一个查询语句。 testWhileIdle: true #建议配置为true,不影响性能,并且保证安全性。 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis, 执行validationQuery检测连接是否有效。 testOnBorrow: false #申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。设置为false testOnReturn: false #归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能,设置为flase poolPreparedStatements: true #是否缓存preparedStatement,也就是PSCache。 maxPoolPreparedStatementPerConnectionSize: 200 #池中能够缓冲的preparedStatements语句数量 filters: stat #属性类型的字符串,通过别名的方式配置扩展插件, 监控统计用的stat 日志用log4j 防御sql注入:wall
-
添加扫描Mapper的注解
在启动类上添加@MapperScan("com.team_five.salthub.dao")的注解,""内的内容是mapper文件所在。
-
编写Dao文件
package com.team_five.salthub.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.team_five.salthub.model.Account; public interface AccountDao extends BaseMapper<Account> { }
-
编写Mapper文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.team_five.salthub.dao.AccountDao"> </mapper>
可以看到,Dao文件和Mapper文件并不需要具体的去实现,只需要定义即可。
-
在serviceImpl中使用@Autowired注解注入Dao,并在serviceImpl中调用dao的封装好的方法进行开发即可。
@Autowired private NoticeDao noticeDao; @Override public void publishNotice(Notice notice) { noticeDao.insert(notice); }
第三部分 技术使用中遇到的问题和解决过程
-
遇到的问题:开启Mybatis的原生缓存导致分页失效,首次调用分页接口后,继续调用该接口返回的数据都与第一次查询的一样,并且iPage对象的total属性是0.
-
解决过程:一开始并不知道是开启缓存导致的,于是去百度,发现是缓存问题,只需要将cache-enabled改为false就可以了。
mybatis-plus: configuration: map-underscore-to-camel-case: true cache-enabled: false
第四部分 总结
个人技术也是团队的一部分,只有完善了个人技术,才能准时地完成团队的任务,不至于拖累团队的进度,并且在开发的过程中也不能停下对自己的技术的学习,因为随着开发的进行,势必会对新技术有需求,例如博客需要加一个上传文件的功能,需要加一个邮箱验证,这都是需要马上学习的。
- MybatisPlus整合到Spring只需要配置pom.xml以及在application.yml文件中进行配置即可。
- MybatisPlus并不需要在Dao和Mapper文件中实现XML代码,只需用@Autowired注解注入到service中即可。MP已经封装好了基本的CRUD方法,极大简化了开发流程。
- 对于多表关联查询的支持较差,需要手动编写SQL代码。
总体来说MybatisPlus的开发相对Mybatis来说要更为简洁。