MyBatis
MyBatis是一個Java持久化框架,它通過XML描述符或註解把對象與存儲過程或SQL語句關聯起來,映射成資料庫內對應的紀錄。[1]:226
開發者 | MyBatis團隊 |
---|---|
當前版本 | 3.5.11(2022年9月18日 | )
源代碼庫 | |
編程語言 | Java |
操作系統 | 跨平台 |
類型 | 持久化框架 |
許可協議 | Apache許可證 2.0 |
網站 | https://mybatis.org/mybatis-3/zh_CN/ |
MyBatis是在Apache許可證 2.0下分發的自由軟件,是iBATIS 3.0的分支版本,其維護團隊也包含iBATIS的初創成員。[2]
功能概況
編輯與其他對象關係映射框架不同,MyBatis沒有將Java對象與數據庫表關聯起來,而是將Java方法與SQL語句關聯。MyBatis允許用戶充分利用數據庫的各種功能,例如存儲過程、視圖、各種複雜的查詢以及某數據庫的專有特性。如果要對遺留數據庫、不規範的數據庫進行操作,或者要完全控制SQL的執行,MyBatis是一個不錯的選擇。
與JDBC相比,MyBatis簡化了相關代碼:SQL語句在一行代碼中就能執行。MyBatis提供了一個映射引擎,聲明式的把SQL語句執行結果與對象樹映射起來。通過使用一種內建的類XML表達式語言,或者使用Apache Velocity集成的插件,SQL語句可以被動態的生成。
MyBatis與Spring Framework和Google Guice集成,這使開發者免於依賴性問題。
MyBatis支持聲明式數據緩存(declarative data caching)。當一條SQL語句被標記為「可緩存」後,首次執行它時從數據庫取得的所有數據會被存儲在一段高速緩存中,今後執行這條語句時就會從高速緩存中讀取結果,而不是再次命中數據庫。MyBatis提供了基於 Java HashMap 的默認緩存實現,以及用於與OSCache、Ehcache、Hazelcast和Memcached連接的默認連接器。MyBatis還提供API供其他緩存實現使用。
用法
編輯SQL語句存儲在XML文件或Java 註解中。一個MyBatis映射的示例(其中用到了Java接口和MyBatis註解):
package org.mybatis.example;
public interface BlogMapper {
@Select("select * from Blog where id = #{id}")
Blog selectBlog(int id);
}
執行的示例:
BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);
SQL語句和映射也可以外化到一個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="org.mybatis.example.BlogMapper">
<select id="selectBlog" parameterType="int" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>
也可以使用MyBatis API執行語句:
Blog blog = session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);
詳細信息可以參考MyBatis網站所提供的用戶手冊。參見外部連結。
與Spring集成
編輯MyBatis與Spring Framework集成。Spring Framework允許MyBatis參與Spring事務,建立了MyBatis映射器和會話,並把他們注入到其他bean中。
如下所示是一個基本的XML配置示例:建立了映射器,並注入到「BlogService」bean中。
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="blogMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
<property name="mapperInterface" value="org.mybatis.example.BlogMapper" />
</bean>
<bean id="blogService" class="org.mybatis.example.BlogServiceImpl">
<property name="blogMapper" ref="blogMapper" />
</bean>
現在調用MyBatis只需要調用一個bean:
public class BlogServiceImpl implements BlogService {
private BlogMapper blogMapper;
public void setBlogMapper(BlogMapper blogMapper) {
this.blogMapper = blogMapper;
}
public void doSomethingWithABlog(int blogId) {
Blog blog = blogMapper.selectBlog(blogId);
...
}
}
Velocity語言
編輯Velocity語言驅動程序允許用戶使用Apache Velocity來快速生成動態SQL查詢。
<select id="findPerson" lang="velocity">
#set( $pattern = $_parameter.name + '%' )
SELECT *
FROM person
WHERE name LIKE @{pattern, jdbcType=VARCHAR}
</select>
MyBatis生成器
編輯MyBatis提供了代碼生成器。MyBatis生成器(MyBatis Generator)能對數據庫表內省,生成執行的增刪改查(CRUD)時所需的MyBatis代碼。有相關的Eclipse插件可供使用。
MyBatis Migrations
編輯MyBatis Migrations[註 1]是一個Java控制台應用程序,它通過管理數據定義語言(DDL)文件來跟蹤數據庫模式的變更。[註 2]
Migrations可以查詢當前數據庫的狀態,應用或恢復對數據庫模式的變更。它也有助於發現和解決由多個開發人員並行修改數據庫模式的情況。
歷史
編輯MyBatis項目繼承自iBATIS 3.0,其維護團隊也包含iBATIS的初創成員。
2010年5月19日項目創建。當時Apache iBATIS 3.0發布,其開發團隊宣布會在新的名字、新的站點中繼續開發[3]。
參見
編輯註腳
編輯參考文獻
編輯- ^ 周冠亞、黃文毅. Spring 5企業級開發實戰. 清華大學出版社. 2019. ISBN 9787302531029.
- ^ iBATIS Home. ibatis.apache.org. [2020-11-11]. (原始內容存檔於2020-07-11).
- ^ iBATIS Project Team Moving to Google Code. [2014-04-08]. (原始內容存檔於2016-03-04).
- ^ Bye Google Code welcome Github. [2014-04-08]. (原始內容存檔於2013-11-10).