SpringBoot系列之集成Mybatis教程
環境準備:IDEA + maven
本博客通過例子的方式,介紹Springboot集成Mybatis的兩種方法,一種是通過注解實現,一種是通過xml的方式
進行實驗,要先創建一個Initializer工程,如圖:

打包方式選擇jar即可,因為Springboot使用了嵌入式的Servlet容器,直接運行jar即可,即使是web工程也支持

選擇必要的jar,Mybatis、數據庫驅動是必要的

新建項目后,會自動加上如下配置,,如果你的mysql服務器是5.7版本的,建議指定mysql-connector-java版本,Druid也需要自己加上,pom配置參考:
```xml
<properties>
<java.version>1.8</java.version>
<druid.version>1.1.2</druid.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.27</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
```
mybatis-spring-boot-starter是Springboot的場景啟動器,默認集成了如下jar

新建數據庫和數據表:
```sql
CREATE DATABASE /*!32312 IF NOT EXISTS*/`springboot` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `springboot`;
/*Table structure for table `sys_user` */
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user` (
`userId` int(10) NOT NULL,
`username` varchar(20) NOT NULL,
`sex` char(10) DEFAULT NULL,
`password` varchar(10) DEFAULT NULL,
PRIMARY KEY (`userId`),
UNIQUE KEY `idx_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*Data for the table `sys_user` */
insert into `sys_user`(`userId`,`username`,`sex`,`password`) values (1,'admin','man','11');
```
新建一個bean類,代碼:
```java
import java.io.Serializable;
public class User implements Serializable{
private String userId;
private String username;
private String sex;
private String password;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
```
當然還要配置數據庫JDBC和連接池,具體參考我的博客:[SpringBoot系列之集成Druid配置數據源監控](https://smilenicky.blog.csdn.net/article/details/103547228)
* 注解方式
對于mybatis注解方式,使用很容易,新建一個Mapper接口即可:
```java
import com.example.springboot.mybatis.bean.User;
import org.apache.ibatis.annotations.*;
public interface UserMapper {
@Select("select * from sys_user where userId=#{userId}")
public User getUserById(Integer userId);
@Delete("delete from sys_user where userId=#{userId}")
public int deleteUserById(Integer userId);
@Options(useGeneratedKeys = true,keyProperty = "userId")
@Insert("insert into sys_user(username,sex,password) values(#{username},#{sex},#{password})")
public int insertUser(User user);
@Update("update sys_user set username=#{username} where userId=#{userId}")
public int updateUser(User user);
}
```
@Mapper注解,可以不用加在每一個Mapper上,所以,我們再新建一個Mybatis的配置類,對于是否支持事務,是否支持駝峰命名和大小寫自動轉換都可以加上
```java
import org.mybatis.spring.annotation.MapperScan;
import org.mybatis.spring.boot.autoconfigure.ConfigurationCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
/**
* <pre>
* Mybatis配置類
* </pre>
*
* @author nicky
* <pre>
* 修改記錄
* 修改后版本: 修改人: 修改日期: 2019年12月15日 修改內容:
* </pre>
*/
@Configuration
//開啟支持事務管理
@EnableTransactionManagement
// Mapper接口掃描,加上這個就不需要每一個Mapper接口都加@Mapper注解
@MapperScan(basePackages = {"com.example.springboot.mybatis.mapper"})
public class MybatisConfig {
//配置支持駝峰命名和大小寫自動轉換
@Bean
public ConfigurationCustomizer configurationCustomizer(){
return new ConfigurationCustomizer(){
@Override
public void customize(org.apache.ibatis.session.Configuration configuration) {
configuration.setMapUnderscoreToCamelCase(true);
}
};
}
}
```
為了方便,就不寫Service類了,直接寫個Controller類進行測試,接口符合RestFul規范
```java
import com.example.springboot.mybatis.bean.User;
import com.example.springboot.mybatis.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <pre>
* 接口測試類
* </pre>
*
* @author nicky
* <pre>
* 修改記錄
* 修改后版本: 修改人: 修改日期: 2019年12月15日 修改內容:
* </pre>
*/
@RestController
public class UserController {
@Autowired
UserMapper userMapper;
@GetMapping("/user/{userId}")
public User getUser(@PathVariable("userId") Integer userId){
return userMapper.getUserById(userId);
}
@PostMapping("/user")
public User insertDept(User user){
userMapper.insertUser(user);
return user;
}
}
```
有Post請求,所以只能使用Postman測試,瀏覽器不能測試Post接口

* xml配置方式
在application.yml加上如下配置,注意mybatis配置不屬于spring的,所以不要使用縮進,yaml不熟悉的,可以參考我的博客:[SpringBoot系列之YAML配置用法學習筆記](https://smilenicky.blog.csdn.net/article/details/102877780)
```yaml
mybatis:
# 指定全局配置文件位置
config-location: classpath:mybatis/mybatis-config.xml
# 指定sql映射文件位置
mapper-locations: classpath:mybatis/mapper/*.xml
```
mybatis-config.xml:
```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="mapUnderscoreToCamelCase" value="true"/>
</settings>
</configuration>
```
mybatis/mapper/UserMapper.xml:
```xml
<?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="com.example.springboot.mybatis.mapper.SysUserMapper">
<select id="getApiUserById" resultType="com.example.springboot.mybatis.bean.User">
SELECT * FROM sys_user WHERE userId=#{id}
</select>
<insert id="insertApiUser">
INSERT INTO sys_user(username,sex,password) VALUES(#{username},#{sex},#{password})
</insert>
</mapper>
```
SysUserMapper.java接口代碼:
```java
package com.example.springboot.mybatis.mapper;
import com.example.springboot.mybatis.bean.User;
import org.apache.ibatis.annotations.Param;
//@Mapper
public interface SysUserMapper {
User getApiUserById(@Param("id") Integer id);
void insertApiUser(User user);
}
```
簡單測試一下接口:
```java
import com.example.springboot.mybatis.bean.User;
import com.example.springboot.mybatis.mapper.SysUserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
/**
* <pre>
* 測試接口,就不寫Service類
* </pre>
*
* @author nicky
* <pre>
* 修改記錄
* 修改后版本: 修改人: 修改日期: 2019年12月15日 修改內容:
* </pre>
*/
@RestController
public class UserController {
@Autowired
SysUserMapper userDao;
/**
* xml方式獲取用戶信息
* @param id
* @return
*/
@GetMapping("/api/user/{id}")
public User getUserById(@PathVariable("id") Integer id){
return userDao.getApiUserById(id);
}
}
```
Postman工具測試:

代碼例子下載:[github下載鏈接](https://github.com/u014427391/springbootexamples/tree/master/springboot-mybatis)
- 第一章 SpringBoot簡介和基礎入門
- 1.1、SpringBoot簡單介紹與入門例子
- 1.2、學會創建Spring Initializer項目
- 第二章 Springboot配置文件的使用
- 2.1、SpringBoot配置文件加載位置探究
- 2.2、SpringBoot配置文件占位符的使用
- 2.3、SpringBoot外部配置優先級探究
- 2.4、SpringBoot系列之@PropertySource用法簡介
- 2.5、SpringBoot系列之@Value和@ConfigurationProperties
- 2.6、SpringBoot系列之YAML配置用法學習筆記
- 2.6、SpringBoot系列之@PropertySource讀取yaml文件
- 2.7、SpringBoot系列之profiles配置多環境用法介紹
- 第三章 SpringBoot數據庫訪問操作
- 3.1、使用SpringBoot進行JDBC數據訪問
- 3.2、SpringBoot集成Mybatis入門指南
- 3.3、SpringBoot系列之Spring Data Jpa集成教程
- 3.4、SpringBoot系列之集成Druid配置數據源監控
- 第四章 SpringBoot Web項目實踐
- 4.1、SpringBoot系列之集成jsp模板引擎
- 4.2、SpringBoot系列之集成Thymeleaf用法手冊
- 4.3、SpringBoot系列之i18n國際化多語言支持教程
- 4.4、SpringBoot系列之HATEOAS用法簡介
- 4.5、SpringBoot系列之集成Swagger2
- 第五章 SpringBoot日志框架集成實踐
- 5.1、SpringBoot系列之日志框架介紹及其原理簡介
- 5.2、SpringBoot系列之日志框架使用教程
- 5.3、SpringBoot系列之集成logback實現日志打印
- 5.4、SpringBoot系列之切換log4j日志框架
- 第六章 Springboot集成緩存框架實踐
- 6.1、SpringBoot系列之項目中緩存使用入門教程
- 6.2、SpringBoot系列之集成Redis實現緩存處理
- 第七章 SpringBoot集成消息隊列實踐
- 7.1、RabbitMQ極速入門與實戰教程
- 第八章 單點登錄框架CAS集成實踐
- 81.、CAS單點登錄系列之原理簡單介紹
- 8.2、CAS 5.3.1之使用cas overlay搭建服務端
- 第九章 SpringBoot集成OAuth2.0實踐
- OAuth2.0系列之基本概念和運作流程(一)