# Spring Boot 2.x整合Mybatis的方式有哪些
## 前言
MyBatis作為一款優秀的持久層框架,在Spring Boot生態中有著廣泛的應用。Spring Boot 2.x版本提供了多種與MyBatis整合的方式,開發者可以根據項目需求選擇最適合的整合方案。本文將詳細介紹三種主流整合方式及其實現細節。
## 一、官方starter整合(推薦方式)
### 1. 引入依賴
```xml
<!-- Spring Boot MyBatis官方starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<!-- 數據庫驅動(以MySQL為例) -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
# application.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/test_db
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
mapper-locations: classpath:mapper/*.xml # XML映射文件位置
type-aliases-package: com.example.model # 實體類包路徑
@Mapper // 關鍵注解
public interface UserMapper {
@Select("SELECT * FROM users WHERE id = #{id}")
User findById(Long id);
}
注解 | 作用 |
---|---|
@Mapper |
標識MyBatis接口 |
@Select |
定義查詢SQL |
@Insert |
定義插入SQL |
@Update |
定義更新SQL |
@Delete |
定義刪除SQL |
@Results |
結果集映射 |
@Result |
單字段映射 |
@Mapper
public interface ProductMapper {
@Insert("INSERT INTO products(name,price) VALUES(#{name},#{price})")
@Options(useGeneratedKeys = true, keyProperty = "id")
int insert(Product product);
@Select("SELECT * FROM products WHERE id = #{id}")
@Results({
@Result(property = "id", column = "id"),
@Result(property = "name", column = "name"),
@Result(property = "price", column = "price")
})
Product selectById(Long id);
}
src/main/resources
├── application.yml
└── mapper
├── UserMapper.xml
└── ProductMapper.xml
<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
<resultMap id="BaseResultMap" type="User">
<id column="id" property="id" />
<result column="username" property="username" />
</resultMap>
<select id="selectAll" resultMap="BaseResultMap">
SELECT * FROM users
</select>
</mapper>
public interface UserMapper {
List<User> selectAll(); // 方法名與XML中的id對應
}
mybatis:
config-location: classpath:mybatis-config.xml # 全局配置文件(可選)
mapper-locations: classpath:mapper/**/*.xml # 支持通配符
@Mapper
public interface OrderMapper {
// 注解方式
@Select("SELECT * FROM orders WHERE id = #{id}")
Order findSimpleOrder(Long id);
// XML方式
Order findComplexOrderWithDetails(Long id);
}
<!-- OrderMapper.xml -->
<select id="findComplexOrderWithDetails" resultMap="OrderDetailResult">
<!-- 復雜關聯查詢 -->
</select>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.1</version>
</dependency>
@Configuration
@MapperScan(basePackages = "com.example.db1", sqlSessionTemplateRef = "db1SqlSessionTemplate")
public class Db1Config {
// 配置第一個數據源...
}
@Configuration
@MapperScan(basePackages = "com.example.db2", sqlSessionTemplateRef = "db2SqlSessionTemplate")
public class Db2Config {
// 配置第二個數據源...
}
整合方式 | 優點 | 缺點 | 適用場景 |
---|---|---|---|
官方starter | 開箱即用,配置簡單 | 定制化能力較弱 | 標準項目快速開發 |
純注解方式 | 無XML,代碼直觀 | 復雜SQL可讀性差 | 簡單CRUD操作 |
XML配置方式 | 復雜SQL易維護,支持動態SQL | 需要維護額外文件 | 復雜查詢場景 |
混合模式 | 靈活平衡開發效率與維護性 | 風格需要統一 | 中大型項目 |
最終建議:對于新項目推薦使用官方starter+注解為主、XML為輔的混合模式,既能保證開發效率,又能應對復雜查詢需求。 “`
注:本文示例代碼基于Spring Boot 2.5.x + MyBatis 3.5.x版本,實際使用時請根據具體版本調整依賴和配置。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。