SpringBoot集成Mybatis

来源:互联网 发布:电脑软件如何卸载 编辑:程序博客网 时间:2024/06/14 03:16

起头自述
本文主要是参考spring-boot-starter 的xml方式的集成方式,在此之前我也曾在网上找过很多集成的例子,有很多还是以mybatis-spring的方式来集成,也曾遇到过很多问题,所以推荐大家参考该项目(github/mybatis/spring-boot-starter )进行取舍。

SpringBoot集成Mybatis
1.首先创建一个maven quickstart 项目。创建好后结构目录如下。
这里写图片描述
maven的quickstart项目默认没有resources源文件目录,因此我们需要自己创建(项目右键-build Path-configure...-source栏目-Add Folder...)创建src/main/resources源文件目录建好之后目录结构如下
这里写图片描述

2.修改pom.xml并添加相应的依赖,完整版如下

<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>com.sample</groupId>    <artifactId>springboot-mybatis-sample</artifactId>    <version>0.0.1-SNAPSHOT</version>    <packaging>jar</packaging>    <name>springboot-mybatis-sample</name>    <url>http://maven.apache.org</url>    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>1.5.8.RELEASE</version>    </parent>    <properties>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>        <java.version>1.8</java.version>    </properties>    <dependencies>        <!-- SpringBoot web starter,web项目依赖包 -->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>            <!-- 若是使用默认logback日志,请自行移除exclusions块,该块排除默认日志包 -->            <exclusions>                <exclusion>                    <groupId>org.springframework.boot</groupId>                    <artifactId>spring-boot-starter-logging</artifactId>                </exclusion>            </exclusions>        </dependency>        <!-- Mybatis Starter依赖包 -->        <dependency>            <groupId>org.mybatis.spring.boot</groupId>            <artifactId>mybatis-spring-boot-starter</artifactId>            <!-- 除此处需要制定版本以外,其他各依赖包均无需指定版本信息,Springboot会自动添加合适版本 -->            <version>1.3.1</version>            <!-- 若是使用默认logback日志,请自行移除exclusions块,该块排除默认日志包 -->            <exclusions>                <exclusion>                    <groupId>org.springframework.boot</groupId>                    <artifactId>spring-boot-starter-logging</artifactId>                </exclusion>            </exclusions>        </dependency>        <!-- MySQL Connector -->        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>        </dependency>        <!-- 读取yml配置文件需要的依赖包 -->        <dependency>            <groupId>com.fasterxml.jackson.dataformat</groupId>            <artifactId>jackson-dataformat-yaml</artifactId>        </dependency>        <!--Log4j2 依赖Starter,此处不采用默认的Logback,视个人项目需求而定 -->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-log4j2</artifactId>        </dependency>        <!--Log4j Web容器日志依赖 -->        <dependency>            <groupId>org.apache.logging.log4j</groupId>            <artifactId>log4j-web</artifactId>        </dependency>        <!--单元测试依赖 -->        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <scope>test</scope>        </dependency>        <!-- Spring Boot测试依赖 -->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>    </dependencies>    <build>        <!-- 这是为了防止maven构建eclipse或者idea项目出错需要指定源文件目录和配置文件目录 -->        <sourceDirectory>src/main/java</sourceDirectory>        <resources>            <resource>                <directory>src/main/resources</directory>            </resource>        </resources>        <plugins>            <!-- SpringBoot项目所需要依赖的插件,该插件主要用于打包Springboot项目 -->            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>            </plugin>        </plugins>    </build></project>

3.在src/main/resources下添加application.yml配置如下(切记,该配置下,配置文件中不能以tab代替空格,否则出错)

server:  port: 8089spring:  datasource:    url: jdbc:mysql://localhost:3306/sample?useSSL=false&characterEncoding=UTF-8    # 请根据自己的数据库做相应更改    username: root    password: 123456    driver-class-name: com.mysql.jdbc.Driver    # tomcat连接池配置    tomcat:      max-wait: 10000      max-active: 50      test-on-borrow: true# mybatis 配置mybatis:  config-location: classpath:mybatis-config.xml

4.日志文件配置-在src/main/resources下配置 log4j2.yml

Configuration:  status: INFO  name: Log4j2 Yaml Config  properties:    property:    - name: ArchiveFileName      value: logs/archive/    - name: filename      value: logs/example  Appenders:    # 日志打印到Console    Console:    - name: DefaultConsoleAppender      target: SYSTEM_OUT      PatternLayout:        pattern: |          %highlight{%d [%t] %-5level: %msg%throwable}    - name: TraceDataAccessAction      target: SYSTEM_OUT      PatternLayout:        pattern: |          %highlight{%d [%t] %-5level: %msg%throwable}    # 日志记录到文件    File:    - name: DefaultFileAppender      fileName: ${filename}-all.log      PatternLayout:        pattern: |          %date-%-5level-%msg      Filters:        ThresholdFilter:          level: INFO    - name: WarnningFileAppender      fileName: ${filename}-warn.log      PatternLayout:        pattern: |          %date-%-5level-%msg      Filters:        ThresholdFilter:          level: WARN  Loggers:    Root:      level: INFO      AppenderRef:      #都是需要默认输出的日志      - ref: DefaultConsoleAppender      - ref: DefaultFileAppender      - ref: WarnningFileAppender    Logger:    #记录错误日志    - name: WARN_FILE_LOGGER      level: WARN      additivity: true    #跟踪sql的执行情况,name为mybatis - mapper街口所在的包名    - name: com.sample.demo.mapper      level: TRACE

5.在src/main/resources添加mybatis配置文件mybatis-config.xml

<!DOCTYPE configuration        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"        "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>    <typeAliases>        <!-- 类型别名定义,为模型类所在包的包名 -->        <package name="com.sample.demo.model"/>    </typeAliases>    <mappers>        <!--             映射文件所在位置,该文件放置于src/main/resources下,但是            包名应该和mapper映射接口保持一致,这样mybatis在获取映射时            才能获取到mapper接口中对应的方法和mapper文件中对应的id的            对应关系         -->        <mapper resource="com/sample/demo/mapper/CityMapper.xml"/>    </mappers></configuration>

6.根据第5步中的mapper名称在src/main/resources源文件目录中创建目录com/sample/demo/mapper并在mapper中添加CityMapper.xml映射文件

<!DOCTYPE mapper        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"        "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!-- 此处的命名空间应和mapper接口保持一致 --><mapper namespace="com.sample.demo.mapper.CityMapper">    <select id="selectCityById" resultType="City">        SELECT            *         FROM city WHERE             id = #{id}    </select></mapper>

7.在这里插入一下ha~~先创建数据库和数据表,完整sql如下

-- create database and use itDROP database IF EXISTS sample;CREATE DATABASE sample;USE sample;-- check tableDROP TABLEIF EXISTS city;DROP TABLEIF EXISTS hotel;-- create tableCREATE TABLE city (    id INT PRIMARY KEY auto_increment,    `NAME` VARCHAR(36),    state VARCHAR(36),    country VARCHAR(36));CREATE TABLE hotel (    city INT,    `NAME` VARCHAR(36),    address VARCHAR(36),    -- zip 邮编    zip VARCHAR(36));INSERT INTO city (NAME, state, country)VALUES    ('San Francisco', 'CA', 'US'),    ('北京市', 'BeiJing', 'CN');INSERT INTO hotel (city, NAME, address, zip)VALUES    (        1,        'Conrad Treasury Place',        'William & George Streets',        '4001'    ),    (        2,        'Chengdu',        'China & SiChuan Province',        '637200'    )

8.在Java源文件目录src/main/java下创建包com.sample.demo并在该包下添加SpringBootMybatis.java。类并添加代码如下

package com.sample.demo;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class SpringBootMybatis {    public static void main(String[] args) {        SpringApplication.run(SpringBootMybatis.class, args);    }}

9.在Java源文件目录src/main/java下创建新的包com.sample.demo.model并在该包下添加实体类City.java。并添加代码如下

package com.sample.demo.model;import java.io.Serializable;public class City implements Serializable {    private static final long serialVersionUID = 1L;    private Long id;    private String name;    private String state;    private String country;    public Long getId() {        return this.id;    }    public City setId(Long id) {        this.id = id;        return this;    }    public String getName() {        return this.name;    }    public City setName(String name) {        this.name = name;        return this;    }    public String getState() {        return this.state;    }    public City setState(String state) {        this.state = state;        return this;    }    public String getCountry() {        return this.country;    }    public City setCountry(String country) {        this.country = country;        return this;    }    @Override    public String toString() {        return getId() + "," + getName() + "," + getState() + "," + getCountry();    }}

10.在Java源文件目录src/main/java下创建新的包com.sample.demo.mapper并在该包下添加CityMapper.java 接口。并添加代码如下

package com.sample.demo.mapper;import org.apache.ibatis.annotations.Mapper;import com.sample.demo.model.City;@Mapperpublic interface CityMapper {    /**     * 该方法名称应与CityMapper.xml中select的id保持一致     * @return     */    public City selectCityById(Integer id);}

11.创建测试类 - 在src/test/java下创建包com.sample.demo.mapper并添加测试类CityMapperTest.java代码如下

package com.sample.demo.mapper;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;@RunWith(SpringRunner.class)@SpringBootTestpublic class CityMapperTest {    @Autowired    private CityMapper cityMapper;    @Test    public void testSelectCityById() {        System.out.println(this.cityMapper.selectCityById(1).toString());    }}

12.运行测试类结果如下(部分)

[33m2017-11-17 14:06:16,647 [main] WARN : maxIdle is larger than maxActive, setting maxIdle to: 50[36m2017-11-17 14:06:17,143 [main] DEBUG: ==>  Preparing: SELECT * FROM city WHERE id = ?[36m2017-11-17 14:06:17,166 [main] DEBUG: ==> Parameters: 1(Integer)[30m2017-11-17 14:06:17,173 [main] TRACE: <==    Columns: id, NAME, state, country[30m2017-11-17 14:06:17,173 [main] TRACE: <==        Row: 1, San Francisco, CA, US[36m2017-11-17 14:06:17,178 [main] DEBUG: <==      Total: 11,San Francisco,CA,US

最后附完整项目结构图
这里写图片描述

项目资源地址
springboot-sample-demo

原创粉丝点击