真实使用过程的环境
IntelliJ IDEA 2019.2.3
spring-boot-starter-parent 2.1.9.RELEASE
mybatis-spring-boot-starter 2.1.0
5.3.整合连接池
其实,在引入spring-boot-starter-jdbc启动器的时候,springBoot已经自动帮我们引入了一个被称为 HikariCP的数据库连接池。
<!-- springBoot 包含HikariCP数据库连接池的启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
所以,我们只需要指定连接池参数即可:
# 连接四大参数
spring.datasource.url=jdbc:mysql://localhost:3306/cnbjut
spring.datasource.username=root
spring.datasource.password=root
# 可省略,SpringBoot自动推断
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
#
spring.datasource.hikari.idle-timeout=60000
spring.datasource.hikari.maximum-pool-size=30
spring.datasource.hikari.minimum-idle=10
当然,如果你更喜欢Druid连接池,也可以使用Druid官方提供的启动器:
<!-- Druid连接池启动器 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
而连接信息的配置与上面是类似的,只不过在连接池特有属性上,方式略有不同:
#初始化连接数
spring.datasource.druid.initial-size=1
#最小空闲连接
spring.datasource.druid.min-idle=1
#最大活动连接
spring.datasource.druid.max-active=20
#获取连接时测试是否可用
spring.datasource.druid.test-on-borrow=true
#监控页面启动
spring.datasource.druid.stat-view-servlet.allow=true
5.4.整合mybatis
mybatis通过DAO层接口 + Mapper.xml映射配置文件的方式 = 操作数据库CRUD
一、导入依赖模块
如果使用maven管理项目,我们只需将以下启动器的坐标添加到项目的pom.xml配置文件中:
<!-- DAO层mybatis框架的springboot启动器 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
需要注意的是:在spring中集成使用mybatis传统的SSM整合,需要一个SqlSessionFactory和mapper自动扫描包配置。
引入mybatis-spring-boot-starter 模块后,只需要定义一个DataSource即可,不需要手动管理SqlSessionFactory的配置。
二、配置数据源
直接在application.properties 中,使用mysql数据库+某个品牌的连接池
#配置指定数据源DataSource的类型
#spring-boot-starter-parent=2.1.9.RELEASE
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/cnbjut?serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#使用HikariCP连接池
#spring.datasource.type=com.zaxxer.hikari.HikariDataSource
3、在application.properties 中配置Mapper.xml 的扫描路径
#mybatis-spring-boot-starter=2.1.9
#mybatis配置Mapper.xml路径的扫描,如果没有映射文件,请注释掉
mybatis.mapper-locations=classpath*:cn/bjut/mapper/*Mapper.xml
#mybatis配置model实体类别名扫描包
mybatis.type-aliases-package=cn.bjut.domain,cn.bjut.pojo,cn.bjut.model
#mybatis声明自己的XMl配置文件生效
mybatis.check-config-location=true
mybatis.config-locations=classpath:mybatis/mybatis-config.xml
另一种使用application*.yml配置文件的格式在本文最后章节的附录给出。
4、编写Mapper接口,和Mapper.xml
DAO层Mapper 接口要加@Mapper 注解,mybatis-spring-boot-starter 将默认搜索标记有@Mapper注解的接口代理生成实现类。
或者通过在springboot的引导类上添加@MapperScan注解配置扫描DAO层接口的package包扫描。
代码附录
application.yml
#spring-boot-starter-parent=2.1.9.RELEASE
#mysql=8.0.17
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/cnbjut?serverTimezone=Asia/Shanghai
username: root
password: root
# 使用HikariCP连接池
type: com.zaxxer.hikari.HikariDataSource
hikari:
idle-timeout: 60000
maximum-pool-size: 30
minimum-idle: 10
mybatis:
#mybatis配置Mapper.xml路径的扫描,如果没有映射文件,请注释掉
mapper-locations: classpath:cn/bjut/mapper/*Mapper.xml
#配置实体类的别名扫描包
type-aliases-package: cn.bjut.pojo,cn.bjut.model,cn.bjut.domain
#开启mybatis的下划线转驼峰
configuration:
map-underscore-to-camel-case: true
#mybatis配置传统的XMl配置文件生效
# check-config-location: true
# config-location: mybatis-config.xml
导入Navicat的sql脚本
CREATE DATABASE cnbjut DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
-- mysql语句单行注释使用 "-- " 注意,--后跟有一个空格
use cnbjut;
-- 表头的字符串用` `括起来
CREATE TABLE `country`(
`id` int NOT NULL AUTO_INCREMENT ,
`countryname` varchar(255) NULL ,
`countrycode` varchar(255) NULL ,
PRIMARY KEY (`id`)
);
-- 表的字符串内容用' '括起来,格式使用同MATLAB
insert country (`countryname`,`countrycode`)
values ('中国','CN'),('美国','US'),('俄罗斯','RU'),
('英国','GB'),('法国','FR');
数据库实体类 cn.bjut.domain.Country
package cn.bjut.domain;
public class Country {
private Long id;
private String countryname;
private String countrycode;
//=========get/set方法和toString()方法==========//
DAO层的接口 cn.bjut.mapper.CountryMapper
//@Mapper //springboot集成mybatis声明接口扫描包
//@Repository //spring自动IOC注入bean
public interface CountryMapper {
//@Select("select * from COUNTRY")
List<Country> selectAll();
}
resources目录下的Mapper.xml映射文件
根据默认项.xml映射文件的包路径和DAO层接口类的包路径要一致
<?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="cn.bjut.mapper.ICountryMapper">
<select id="selectAll" resultType="Country">
select id,countryname,countrycode from country
</select>
</mapper>
springboot整合JUint的测试类
@RunWith(SpringRunner.class)
@SpringBootTest
public class mybatisDemoApplicationTests {
//注入DAO层接口的实现类对象
@Autowired
private ICountryMapper countryMapper;
@Test
public void contextLoads() {
List<Country> countries = countryMapper.selectAll();
System.out.println(countries);
}
}
mybatis在springboot整合中的可选配置文件
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="logImpl" value="LOG4J"/>
<setting name="cacheEnabled" value="true"/>
<setting name="mapUnderscoreToCamelCase" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
<typeAliases>
<typeAlias alias="Integer" type="java.lang.Integer" />
<typeAlias alias="Long" type="java.lang.Long" />
<typeAlias alias="HashMap" type="java.util.HashMap" />
<typeAlias alias="LinkedHashMap" type="java.util.LinkedHashMap" />
<typeAlias alias="ArrayList" type="java.util.ArrayList" />
<typeAlias alias="LinkedList" type="java.util.LinkedList" />
</typeAliases>
</configuration>
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>cn.bjut</groupId>
<artifactId>day01-springboot-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>day01-springboot-demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--springboot测试的起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- MySQL连接驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- springboot整合JDBC事务并包含HikariCP连接池的启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- DAO层mybatis框架的springboot启动器 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
<!-- Druid数据库连接池 -->
<!--<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>-->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
=============================
end