詳解Spring Boot集成MyBatis(注解方式)
MyBatis是支持定制化SQL、存儲(chǔ)過(guò)程以及高級(jí)映射的優(yōu)秀的持久層框架,避免了幾乎所有的JDBC代碼和手動(dòng)設(shè)置參數(shù)以及獲取結(jié)果集。spring Boot是能支持快速創(chuàng)建Spring應(yīng)用的Java框架。本文通過(guò)一個(gè)例子來(lái)學(xué)習(xí)Spring Boot如何集成MyBatis,而且過(guò)程中不需要XML配置。
創(chuàng)建數(shù)據(jù)庫(kù)
本文的例子使用MySQL數(shù)據(jù)庫(kù),首先創(chuàng)建一個(gè)用戶表,執(zhí)行sql語(yǔ)句如下:
CREATE TABLE IF NOT EXISTS user ( `id` INT(10) NOT NULL AUTO_INCREMENT, `name` VARCHAR(50) NULL DEFAULT NULL , `age` INT(2) NOT NULL , PRIMARY KEY (id) )
工程目錄結(jié)構(gòu)與依賴配置
首先新建一個(gè)Maven工程,并配置Pom依賴,本例中所用到的依賴如下:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.2.RELEASE</version>
<relativePath />
</parent>
<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>1.1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
然后創(chuàng)建一下工程目錄結(jié)構(gòu),如下圖所示:

代碼文件內(nèi)容
0. 創(chuàng)建配置文件——application.properties
寫入一下內(nèi)容:
spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=UTF-8 spring.datasource.username=root spring.datasource.password=123456
1. 創(chuàng)建POJO——entity/User.java
這是一個(gè)POJO,包含了id, name, age三個(gè)屬性,代碼如下:
package com.xyz.dbtest.entity;
public class User {
private int id;
private String name;
private int age;
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
}
2. 創(chuàng)建一個(gè)數(shù)據(jù)層接口——service/UserService.java
這是一個(gè)Mapper類,代碼如下:
package com.xyz.dbtest.dao;
import com.xyz.dbtest.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper //1
public interface UserDao {
@Results({ //2
@Result(property = "id", column = "id"), //2
@Result(property = "name", column = "name"),
@Result(property = "age", column = "age")
})
@Select("SELECT * FROM user WHERE age = #{age}") //3
List<User> get(int age);
@Insert("INSERT INTO user(name, age) VALUES (#{name}, #{age})") //3
void insert(User user);
}
//1 @Mapper將UserDao聲明為一個(gè)Mapper接口
//2 @Results是結(jié)果映射列表,@Result中property是User類的屬性名,colomn是數(shù)據(jù)庫(kù)表的字段名
//3 @Select, @Insert 分別代表了執(zhí)行的真實(shí)SQL
3. 創(chuàng)建一個(gè)用戶服務(wù)——service/UserService.java
這是一個(gè)服務(wù)類Bean,提供三個(gè)函數(shù)功能,代碼如下:
package com.xyz.dbtest.service;
import com.xyz.dbtest.dao.UserDao;
import com.xyz.dbtest.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service //聲明成一個(gè)spring bean
public class UserService {
@Autowired //連接到UserDao Bean
private UserDao userDao;
public String show() {
return "Hello World!";
}
public List<User> showDao(int age) {
return userDao.get(age);
}
public String insert(String name, int age) { //插入一條記錄
User user = new User();
user.setName(name);
user.setAge(age);
userDao.insert(user);
return "Insert ( \""+name+"\", age"+age+") OK!";
}
}
4. 常見一個(gè)Web Controller——controller/UserController.java
這是一個(gè)Spring Web的Controller類,引入了spring-boot-starter-web依賴,代碼如下:
package com.xyz.dbtest.controller;
import com.xyz.dbtest.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@RestController //聲明為一個(gè)Restful的Controller
public class UserController {
@Autowired //自動(dòng)連接到UserService Bean
private UserService userService;
@RequestMapping(value = "/show")
public String show() {
return userService.show();
}
@RequestMapping(value = "/showDao")
public Object showDao(int age) {
return userService.showDao(age);
}
@RequestMapping(value="/insert")
public String insert(String name, int age) {
return userService.insert(name, age);
}
}
5. 創(chuàng)建啟動(dòng)類——main/StartApp.java
這是一個(gè)spring boot啟動(dòng)類。代碼如下:
package com.xyz.dbtest.main;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication(scanBasePackages = "com.xyz.dbtest") //1
@MapperScan(basePackages = "com.xyz.dbtest.dao") //2
public class StartApp {
public static void main(String[] args) {
SpringApplication.run(StartApp.class, args);
}
}
//1 由于StartApp類位于基礎(chǔ)包的自包中,因此需要設(shè)置scanBasePackage
//2 設(shè)置Mapper接口所在的包
運(yùn)行結(jié)果
運(yùn)行Sql語(yǔ)句創(chuàng)建數(shù)據(jù)庫(kù)表后,運(yùn)行StartApp類。啟動(dòng)成功如下圖所示

測(cè)試show服務(wù),結(jié)果如下:

測(cè)試showDao服務(wù),在輸入U(xiǎn)RL時(shí)需要將參數(shù)打包進(jìn)url,結(jié)果如下:
不帶參數(shù)時(shí),訪問(wèn)錯(cuò)誤:

帶參數(shù)時(shí),訪問(wèn)成功,由于數(shù)據(jù)庫(kù)中沒有記錄,所以結(jié)果是一個(gè)空列表:

測(cè)試insert服務(wù)


再次測(cè)試showDao服務(wù)

結(jié)語(yǔ)
通過(guò)本文的例子可以看出,使用Spring boot集成MyBatis幾乎不用任何配置工作,能有效加快開發(fā)效率!
代碼庫(kù)地址:github地址
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java并發(fā)(Runnable+Thread)實(shí)現(xiàn)硬盤文件搜索功能
這篇文章主要介紹了Java并發(fā)(Runnable+Thread)實(shí)現(xiàn)硬盤文件搜索,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01
hibernate-validator改進(jìn)校驗(yàn)框架validator?v0.4使用
這篇文章主要為大家介紹了改進(jìn)?hibernate-validator,新一代校驗(yàn)框架?validator?使用介紹?v0.4,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>2023-03-03
java中字符串如何計(jì)算字節(jié)長(zhǎng)度
這篇文章主要介紹了java中字符串如何計(jì)算字節(jié)長(zhǎng)度,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10
Java使用hutool實(shí)現(xiàn)文件大小的友好輸出
這篇文章主要為大家詳細(xì)介紹了Java如何使用hutool實(shí)現(xiàn)文件大小的友好輸出,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解下2023-11-11
Java中實(shí)現(xiàn)多重排序的幾種方法小結(jié)
Java中的多重排序通常指的是同時(shí)對(duì)一個(gè)集合中的兩個(gè)或更多列或多維度的數(shù)據(jù)進(jìn)行排序,這通常通過(guò)自定義Comparator實(shí)現(xiàn),可以結(jié)合Arrays.sort()或Collections.sort()方法,當(dāng)需要進(jìn)行多重排序時(shí),即根據(jù)多個(gè)字段進(jìn)行排序,我們可以采用以下幾種方法2024-10-10
springboot啟動(dòng)時(shí)候報(bào)錯(cuò)mongodb問(wèn)題
這篇文章主要介紹了springboot啟動(dòng)時(shí)候報(bào)錯(cuò)mongodb問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
mybatis插件優(yōu)雅實(shí)現(xiàn)字段加密的示例代碼
在很多時(shí)候,我們都需要字段加密,比如郵箱,密碼,電話號(hào)碼等,本文主要介紹了mybatis插件優(yōu)雅實(shí)現(xiàn)字段加密的示例代碼,感興趣的可以了解一下2023-11-11

