您的位置:首页 > 编程语言 > Java开发

SpringBoot集成Mybatis

2017-11-17 14:09 459 查看
起头自述

本文主要是参考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<
dfd2
span class="hljs-symbol">:
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: