MyBatis

维基百科,自由的百科全书
跳转到导航 跳转到搜索
MyBatis
开发者MyBatis团队
当前版本3.5.11(2022年9月18日,​3年前​(2022-09-18
源代码库
  • {{URL|example.com|可选的显示文本}}
Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
编程语言Java
引擎
    Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
    操作系统跨平台
    类型持久化框架
    许可协议Apache许可证 2.0
    网站https://mybatis.org/mybatis-3/zh_CN/

    MyBatis是一个Java持久化框架,它通过XML描述符或注解把对象存储过程SQL语句关联起来,映射成数据库内对应的纪录。[1]:226

    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 FrameworkGoogle Guice英语Google Guice集成,这使开发者免于依赖性问题。

    MyBatis支持声明式数据缓存(declarative data caching)。当一条SQL语句被标记为“可缓存”后,首次执行它时从数据库获取的所有数据会被存储在一段高速缓存中,今后执行这条语句时就会从高速缓存中读取结果,而不是再次命中数据库。MyBatis提供了基于 Java HashMap 的默认缓存实现,以及用于与OSCache英语OSCacheEhcache英语EhcacheHazelcast英语HazelcastMemcached连接的默认连接器。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)文件来跟踪数据库模式英语Database schema的变更。[注 2]

    Migrations可以查询当前数据库的状态,应用或恢复对数据库模式英语Database schema的变更。它也有助于发现和解决由多个开发人员并行修改数据库模式的情况。

    历史[编辑]

    MyBatis项目继承自iBATIS 3.0,其维护团队也包含iBATIS的初创成员。

    2010年5月19日项目创建。当时Apache iBATIS 3.0发布,其开发团队宣布会在新的名字、新的站点中继续开发[3]

    2013年11月10日,项目迁移到了GitHub[4]

    参见[编辑]

    注脚[编辑]

    1. ^ 可译作“MyBatis数据库迁移管理工具”。
    2. ^ 模式迁移英语Schema migration

    参考文献[编辑]

    1. ^ 周冠亚、黄文毅. Spring 5企業級開發實戰. 清华大学出版社. 2019. ISBN 9787302531029. 
    2. ^ iBATIS Home. ibatis.apache.org. [2020-11-11]. (原始内容存档于2020-07-11). 
    3. ^ iBATIS Project Team Moving to Google Code. [2014-04-08]. (原始内容存档于2016-03-04). 
    4. ^ Bye Google Code welcome Github. [2014-04-08]. (原始内容存档于2013-11-10). 

    外部链接[编辑]