`

MyBatis技术介绍

阅读更多
一. MyBatis定义
MyBat is 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBat is 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索。MyBat is 可以使用简单的XML或注解用于配置和原始映射,将接口和 Java 的 POJO(Plain Old Java Objects,普通的Java 对象)映射成数据库中的记录。

二.入门
每一个 MyBat is 的应用程序都以一个 SqlSessionFactory 对象的实例为核心。SqlSessionFactory 对 象 的 实 例 可 以 通 过 SqlSessionFactoryBuilder 对 象 来 获 得 。SqlSessionFactoryBuilder 对象可以通过 XML 配置文件,或从以往使用惯例中准备好的Configurat ion 类实例中来构建 SqlSessionFactory 对象。当然,在XML配置文件中还有很多可以配置的,上面的示例指出的则是最关键的部分。要注意 XML 头部的声明,需要用来验证 XML文档正确性。environment 元素体中包含对事务管理和连接池的环境配置。 mappers 元素是包含所有 mapper (映射器) 的列表,这些 mapper的 XML文件包含 SQL代码和映射定义信息。从 XML中构建 SqlSessionFactory
从 XML 文件中构建 SqlSessionFactory 的实例非常简单。这里建议你使用类路径下的资源文件来配置,但是你可以使用任意的 Reader 实例,这个实例包括由文字形式的文件路径或 URL形式的文件路径 file://来创建。MyBatis 包含了一些工具类,称作为资源,这些工具类包含一些方法,这些方法使得从类路径或其它位置加载资源文件更加简单。
String resource = "org/mybatis/example/Configuration.xml";
Reader reader = Resources.getResourceAsReader(resource);
sqlMapper = new SqlSessionFactoryBuilder().build(reader);
XML配置文件包含对 MyBat is 系统的核心设置,包含获取数据库连接实例的数据源和决定事务范围和控制的事务管理器。当然,在XML配置文件中还有很多可以配置的,上面的示例指出的则是最关键的部分。要注意 XML 头部的声明,需要用来验证 XML文档正确性。environment 元素体中包含对事务管理和连接池的环境配置。 mappers 元素是包含所有 mapper (映射器) 的列表,这些 mapper的 XML文件包含 SQL代码和映射定义信息。
三.不使用 XML构建 SqlSessionFactory
  如果你喜欢从 Java 程序而不是 XML文件中直接创建配置实例,或创建你自己的配置构建器,MyBat is 也提供完整的配置类,提供所有从 XML文件中加载配置信息的选项。  注意这种情况下配置是添加映射器类。映射器类是 Java 类,这些类包含 SQL 映射语句
的注解从而避免了 XML 文件的依赖,XML 映射仍然在大多数高级映射(比如:嵌套 Join
映射)时需要。出于这样的原因,如果存在 XML配置文件的话,MyBatis 将会自动查找和
加载一个对等的 XML 文件(这种情况下,基于类路径下的 BlogMapper.class 类的类名,那么 BlogMapper.xml将会被加载)。后面我们会了解更多。
四.从 SqlSessionFactory中获取 SqlSession
现在,我们已经知道如何获取 SqlSessionFactory 对象了,基于同样的启示,我们就可以获得 SqlSession 的实例了。 SqlSession 对象完全包含以数据库为背景的所有执行 SQL操作的方法。你可以用 SqlSession 实例来直接执行已映射的 SQL 语句。  这种方法起到的作用,和我们使用之前的 MyBat is 版本是相似的,现在有一种更简洁的方法。使用合理描述参数和 SQL 语句返回值的接口(比如 BlogMapper.class),这样现在就可以执行更简单,更安全的代码,没有容易发生的字符串文字和转换的错误。
五.探究已映射的 SQL语句
这里你也许想知道通过 SqlSession 和 Mapper 对象到底执行了什么操作。已映射的SQL语句是一个很大的主题,而且这个主题会贯穿本文档的大部分内容。为了给出一个宏观的概念,这里有一些示例。 上面提到的任何一个示例,语句是通过 XML 或注解定义的。我们先来看看 XML。使用基于 XML 的映射语言,在过去的几年中使得 MyBat is 非常流行,它为 MyBat is 提供所有的特性设置。
六.命名空间的一点注释
命名空间在之前版本的 MyBat is 中是可选项,非常混乱在使用上也没有帮助。现在,命名空间是必须的,而且有一个目的,它使用更长的完全限定名来隔离语句。 命名空间使得接口绑定成为可能,就像你看到的那样,如果之前不了解,那么现在你就会使用它们了,你应该按照下面给出示例的来练习,以免改变自己的想法。使用命名空间,并将它放在合适的 Java 包空间之下,这将会使你的代码变得简洁,在很长的时间内提高 MyBatis 的作用。
命名解析:为了减少输入量,MyBat is 对所有的命名配置元素使用如下的命名解析规则,包括语句,结果映射,缓存等。
  直接查找完全限定名(比如“com.mypackage.MyMapper.selectAllThings”),如果发现就使用。
  短名称(比如“selectAllThings”)可以用来引用任意含糊的对象。而如果有两个或两个以上的(比如“com.foo.selectAllThings”和“com.bar.selectAllThings”),
那么就会得到错误报告,说短名称是含糊的,因此就必须使用完全限定名。

七.范围和生命周期
  理解我们目前已经讨论过的不同范围和生命周期类是很重要的。不正确的使用它们会导致严重的并发问题。
SqlSessionFactoryBuilder
  这个类可以被实例化,使用和丢弃。一旦你创建了 SqlSessionFactory 后,这个类就不需要存在了。因此 SqlSessionFactoryBuilder 实例的最佳范围是方法范围(也就是本地方法变量)。你可以重用 SqlSessionFactoryBuilder 来创建多个 SqlSessionFactory 实例,但是最好的方式是不需要保持它一直存在来保证所有 XML解析资源,因为还有更重要的事情要做。
SqlSessionFactory
  一旦被创建,SqlSessionFactory 实例应该在你的应用程序执行期间都存在。没有理由来处理或重新创建它。使用 SqlSessionFactory 的最佳实践是在应用程序运行期间不要重复创建多次。这样的操作将被视为是非常糟糕的。因此 SqlSessionFactory 的最佳范围是应用范围。
有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式。然而这两种方法都不认为是最佳实践。这样的话,你可以考虑依赖注入容器,比如 Google Guice 或 Spring。这样的框架允许你创建支持程序来管理单例 SqlSessionFactory 的生命周期。
SqlSession
  每个线程都应该有它自己的 SqlSession 实例。SqlSession 的实例不能共享使用,它也是线程不安全的。因此最佳的范围是请求或方法范围。绝对不能将 SqlSession 实例的引用放在一个类的静态字段甚至是实例字段中。也绝不能将 SqlSession 实例的引用放在任何类型的管理范围中,比如 Serlvet 架构中的 HttpSession。如果你现在正用任意的 Web 框架,要考虑
SqlSession 放在一个和 HTTP 请求对象相似的范围内。换句话说,基于收到的 HTTP 请求,你可以打开了一个 SqlSession,然后返回响应,就可以关闭它了。关闭 Session 很重要,你应该确保使用 finally 块来关闭它。
分享到:
评论

相关推荐

    《深入浅出MyBatis技术原理与实战》高清完整PDF下载

    单单在51job招聘网站中MyBatis在全国也有近万个岗位的需求,加上未在51job发布的企业,可见需求相当大,而在当今市场上却没有任何一本介绍MyBatis的书籍,为了填补这一空白本书主要介绍了Java MyBatis技术。...

    深入浅出MyBatis技术原理与实战(高清带目录版)

    《深入浅出MyBatis技术原理与实战》分为3 个部分,依次介绍了MyBatis 的基础应用、原理及插件开发、实践应用,使读者能够由浅入深、循序渐进地掌握MyBatis 技术。首先,《深入浅出MyBatis技术原理与实战》在官方API ...

    深入浅出MyBatis技术原理与实战

    , 《深入浅出MyBatis技术原理与实战》分为3 个部分,依次介绍了MyBatis 的基础应用、原理及插件开发、实践应用,使读者能够由浅入深、循序渐进地掌握MyBatis 技术。首先,《深入浅出MyBatis技术原理与实战》在官方...

    深入浅出MyBatis技术原理与实战.pdf

     《深入浅出MyBatis技术原理与实战》分为3个部分,依次介绍了MyBatis的基础应用、原理及插件开发、实践应用,使读者能够由浅入深、循序渐进地掌握MyBatis技术。首先,《深入浅出MyBatis技术原理与实战》在官方API的...

    (高清+目录)深入浅出MyBatis技术原理与实战.zip

    单单在51job招聘网站中MyBatis在全国也有近万个岗位的需求,加上未在51job发布的企业,可见需求相当大,而在当今市场上却没有任何一本介绍MyBatis的书籍,为了填补这一空白本书主要介绍了Java MyBatis技术。...

    深入浅出MyBatis技术原理与实战 PDF 高清 电子书

    《深入浅出MyBatis技术原理与实战》分为3 个部分,依次介绍了MyBatis 的基础应用、原理及插件开发、实践应用,使读者能够由浅入深、循序渐进地掌握MyBatis 技术。首先,《深入浅出MyBatis技术原理与实战》在官方API ...

    MyBatis技术文档.pdf

    MyBatis 技术实践的详细介绍

Global site tag (gtag.js) - Google Analytics