记录一个springboot 中集成 mybatis 的完整使用过程(有配置文件版)

真实使用过程的环境

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

发布了95 篇原创文章 · 获赞 20 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_40993412/article/details/101902898