SpringBoot集成Mybatis

起头自述
本文主要是参考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: 8089
spring:
  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 it
DROP database IF EXISTS sample;
CREATE DATABASE sample;

USE sample;

-- check table
DROP TABLE
IF EXISTS city;

DROP TABLE
IF EXISTS hotel;

-- create table
CREATE 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;

@SpringBootApplication
public 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;

@Mapper
public 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)
@SpringBootTest
public 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: 1
1,San Francisco,CA,US

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

项目资源地址
springboot-sample-demo

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值