SpringBoot整合MyBatis
1、創建項目時勾選mybatis、數據庫驅動。

mysql驅動默認是8.x的版本,如果要使用5.x的版本,創建后到pom.xml中改。
也可以手動添加依賴
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.2</version> <!-- 這個必須要版本號 --> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <!-- 默認是8.x的版本,可以自己加<version>指定版本 --> <scope>runtime</scope> </dependency>
2、新建包model,存放實體類
@Getter @Setter @ToString public class User { private int id; private String name; //...... }
實體類不需要放到spring容器中
3、新建包dao,存放mapper接口
public interface UserMapper{ public User findUserById(Integer id); }
mapper接口上不需要加注解
4、resources下新建文件夾mapper,存放mybatis的xml映射文件
<?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.chy.mall.dao.UserMapper"> <select id="findUserById" parameterType="integer" resultType="user"> select * from tb_user where id=#{id} </select> </mapper>
5、引導類上加@MapperScan
@MapperScan("com.chy.mall.dao") //指定mapper接口位置 // @MapperScan( { "com.chy.mall.dao1" , "com.chy.mall.dao2" } ) //有多個包時寫成數組
注意是@MapperScan,不是@MapperScans,末尾沒有s。
也可以在每個mapper接口上標注@Mapper,但是很麻煩。
6、application.properties中添加mybatis的配置
###mybatis配置### #配置實體類的別名 mybatis.type-aliases-package=com.chy.mall.model #指定映射文件的位置 mybatis.mapper-locations=classpath:mapper/*Mapper.xml
HiKari的使用
c3p0、dbcp老舊、性能低下,hikari、druid后起之秀,性能方面hikari、druid獨一檔。
性能:hikari > druid > tomcat-jdbc > dbcp > c3p0
HiKariCP,CP是Connection Pool的簡寫,號稱性能最高的連接池。代碼經過精簡優化,體積很小,穩定可靠、性能極高。hikari的高性能得益於最大限度地避免鎖競爭。
druid是阿里開源的連接池,性能略有不如hikari,但功能全面、擴展性強,對數據庫操作有監控、統計功能,便於分析、優化數據庫操作。
springboot 2.x默認使用hikari作為數據庫連接池,不需要添加額外依賴,只需在application.properties中配置即可。
hikari常用配置如下
###數據源配置### #默認就是hikari,可缺省 #spring.datasource.type=com.zaxxer.hikari.HikariDataSource spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/db_mall?serverTimezone=UTC spring.datasource.username=chy spring.datasource.password=abcd #默認30000ms,即30s #spring.datasource.hikari.connection-timeout=30000 #默認600000ms,即10min #spring.datasource.hikari.idle-timeout=600000 #連接池的最大尺寸(閑置連接+正在使用的連接),默認10 spring.datasource.hikari.maximum-pool-size=200 #最小空閑連接數,默認10 spring.datasource.hikari.minimum-idle=50
Druid的使用
1、添加druid的依賴
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.22</version> </dependency> <!-- 也可以使用下面這個 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.22</version> </dependency>
2、application.properties
###數據源配置### #指定數據源類型為druid spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/db_mall?serverTimezone=UTC spring.datasource.username=chy spring.datasource.password=abcd #初始連接數,默認0 spring.datasource.druid.initial-size=50 #最小空閑連接數 spring.datasource.druid.min-idle=30 #最大活躍連接數,默認8 spring.datasource.druid.max-active=200 #以上3個配置項,設置為0表示無限 #獲取連接的最大等待時間(池中無空閑連接時最多等待多少ms),默認-1 一直等待,此處設置為30000ms,即30s spring.datasource.druid.max-wait=30000 #是否緩存PreparedStatement,默認false #spring.datasource.druid.poolPreparedStatements=true #緩存的PreparedStatement的最大數量,默認-1 不緩存,大於0時會自動開啟PreparedStatement緩存,所以可以缺省上一句配置 spring.datasource.druid.maxOpenPreparedStatements=20
連接池配置說明
上面的配置,不管是hikari還是druid,都沒有使用自己的key來配置數據庫驅動、url、username、password,使用自己的key要報錯。即不要使用下面的key
#hikari spring.datasource.hikari.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.hikari.jdbc-url=jdbc:mysql://localhost:3306/db_mall?serverTimezone=UTC spring.datasource.hikari.username=chy spring.datasource.hikari.password=abcd #druid spring.datasource.druid.driver-class-name=jdbc:mysql://127.0.0.1/db_mall?serverTimezone=UTC spring.datasource.druid.url=com.mysql.cj.jdbc.Driver spring.datasource.druid.username=chy spring.datasource.druid.password=abcd