MyBatis

MyBatis是一个Java持久化框架，它通过XML描述符或注解把对象与存储过程或SQL语句关联起来，映射成資料庫內對應的紀錄。:226 MyBatis是在Apache许可证 2.0下分发的自由软件，是iBATIS 3.0的分支版本，其维护团队也包含iBATIS的初创成员。 与其他对象关系映射框架不同，MyBatis没有将Java对象与数据库表关联起来，而是将Java方法与SQL语句关联。MyBatis允许用户充分利用数据库的各种功能，例如存储过程、视图、各种复杂的查询以及某数据库的专有特性。如果要对遗留数据库、不规范的数据库进行操作，或者要完全控制SQL的执行，MyBatis是一个不错的选择。 与JDBC相比，MyBatis简化了相关代码：SQL语句在一行代码中就能执行。MyBatis提供了一个映射引擎，声明式的把SQL语句执行结果与对象树映射起来。通过使用一种内建的类XML表达式语言，或者使用Apache Velocity集成的插件，SQL语句可以被动态的生成。 MyBatis与Spring Framework和Google Guice（英语：Google Guice）集成，这使开发者免于依赖性问题。 MyBatis支持声明式数据缓存（declarative data caching）。当一条SQL语句被标记为“可缓存”后，首次执行它时从数据库取得的所有数据会被存储在一段高速缓存中，今后执行这条语句时就会从高速缓存中读取结果，而不是再次命中数据库。MyBatis提供了基于 Java HashMap 的默认缓存实现，以及用于与OSCache（英语：OSCache）、Ehcache（英语：Ehcache）、Hazelcast（英语：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网站所提供的用户手册。参见外部链接。 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语言驱动程序允许用户使用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 Generator）能对数据库表内省，生成执行的增删改查（英语：Create, read, update and delete）（CRUD）时所需的MyBatis代码。有相关的Eclipse插件可供使用。 MyBatis Migrations是一个Java控制台应用程序，它通过管理数据定义语言（DDL）文件来跟踪数据库模式（英语：Database schema）的变更。 Migrations可以查询当前数据库的状态，应用或恢复对数据库模式（英语：Database schema）的变更。它也有助于发现和解决由多个开发人员并行修改数据库模式的情况。 MyBatis项目继承自iBATIS 3.0，其维护团队也包含iBATIS的初创成员。 2010年5月19日项目创建。当时Apache iBATIS 3.0发布，其开发团队宣布会在新的名字、新的站点中继续开发。 2013年11月10日，项目迁移到了GitHub。 Hibernate iBATIS JDBC Java持久化API（JPA） EclipseLink（英语：EclipseLink） Ebean（英语：Ebean） 面向Java对象查询（jOOQ） Apache Cayenne（英语：Apache Cayenne） pureQuery NHydrate（英语：NHydrate） Hydrate（页面存档备份，存于互联网档案馆） OpenJPA（英语：OpenJPA） Spring Framework Google Guice（英语：Google Guice） O/R Broker ObjectiveSql （页面存档备份，存于互联网档案馆） 可译作“MyBatis数据库迁移管理工具”。 即模式迁移（英语：Schema migration） 周冠亞、黃文毅. 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）.  官方网站