MyBatis3中文教程

所需积分/C币:10 2014-03-31 21:53:01 1.34MB PDF
8
收藏 收藏
举报

MIBATIS中文教程,最好的学习IBATIS教程,官方推荐! Ibatis(MyBatis)是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
目录 什么是 My Batis 卡.···非··“; 入门 从XML中构建 Sqlsession Fac tory. 不使用XML构建 Sqlsession Factory 从 Sqlsession Factory中获取 Sqlsession. 555667 探究已映射的SQL语句 命名空间的一点注释 沱围和生命周期 888 SqlsessionFactory Builder Sqlsession Factory..... Salscssion 映射器实例 XML映射配置文件 10 properties 10 Settings typeAliases typehandlers…… 13 objectFactory 14 plugins 15 environments …16 transaction Manager 17 dataSource mappers. SQL映射的XML文件… 19 select 20 insert, update, dclctc 23 Parameters 24 resultMap ·········· 25 高级结果映射.… id g resu 29 支持的JDBC类型 .30 构造方法 关联 集合… ··················· 34 鉴别器 36 缓存 使用自定义缓存 参照缓存 动态SQL …····· .40 choose. when otherw ise trim where. sct redo h ∴.43 Java API 应用目录结构 Sqisessions SqlsessionFactory Builder Sqlsession Factory.… 47 SqIscssion Select Builder 53 Sqlbuilder ············*·· 56 什么是 MyBatis? My Batis是攴持普通SαL査询,存储过程和高缴映射的优秀持久层框架。 MyAtis消除 了几乎所有的JDBC代码和参数的于工设置以及对结果集的检索。 My Batis可以使用简单的 ⅪML或注解用于配置和原始映射,将接口和Java的POJO( Plain old Java objects,普逦的 Java对象)映射成数据库中的记求 入门 每一个 MyBatis的应用程序都以一个 Sqisession Factory对象的灾例为核心。 Sqlsession Factory对象的实例可以通过 Sqlsession Factory Builder对象米获得 Sqisession Factory Builder对象可以通过XML配置文件,或从以往使用惯例中准备好的 Configuration类实例中来构建 SqIscssion Factory对象 从ⅩML中构建 Sqlsession Factory 从XML文件中构建 Sqisession Factory的实例非常简单。这里建议你使用类路径卜的资 源文件来配置,但是你可以使用任意的 Reader实例,这个实例包括由文字形式的文件路径 或URL形式的文件路径fley/来创建。 My Batis包含了一些工具类,称作为资源,这些工具 类包含一些方法,这些方法使得从类路径或其它位置加载资源文件更加简单 String esource ="org/mybatis/example/Configuration. xml"; Reader reader = Resources. getResourceAsReader (resource)i sylMapper new sylsessionFactoryBuilder(), build(reader)i XML配置文件包含对 My Batis系统的核心设置,包含获取数据库连接实例的数据源和 决定事务范围和控制的事务管理器。关于ⅩML配置文件的详细内容可以在文档后面找到, 这里给出一个简单的示例: <?xm- version=1.0" encoding=UTF-8?> < DOCTYPE configuration PUBLIC "-//mybatis. org//DTD Config 3.0//EN' nhttp://mybatis.crg/dtd/mybatis-3-config.dtd"> <confiquration> Envi ronments default=devel opment.> <environment id=development> <transactionManager type="JDBC"/> <datasource type=POCLF <property name="driver" value="driver)", property name rl" value="S(url]"/> <property name="username" value="username)"/> property name-"password" value-"password"/> </datasource> /environment> </envi ronments> <mappers> <mapper resource="org/mybatis/example/BlogMapper xm1"/> </nappers /configuration> 当然,在ⅹML配置文件中还有很多可以配置的,上面的示例指出的则是最关键的部分。 要注意XML头部的声明,需要用来验证XML文档正确性。 environment元素体中包含对事 务管坦和连按池的环境配置。 mappers元素是包含所有 mapper(映射器)的列衣,这些 mapper 的XML文件包含SQL代码和映射定义信息。 不使用XML构建Sq| Session Factory 如果你喜欢从Java程序而不是ⅹML文件中直接创建配置实例,或创建你自己的配置构 建器, My Batis也提供完整的配置类,提供所有从XML文件中加载配置信息的选项。 DataSource dataSource= BlogdataSourceFactory getBlogDataSource()i fransactionFactory transactionFactory = new JabcfransactionFactory()i Environment environment new Environment( deve l opment. ,transactionFactory, datasource)i Configuration confiquration new Confiquration (environment)i onfi gu cation. addMapper(BlogMappercl ass)i SyISessicnFactory sqlsessionFactcry new SclSessionFactoryBuilder(). build(configuration)i 注意这种情况下配置是添加映射器类。映射器类是Java类,这些类包含SQL映射语句 的注解从而避免了XML文件的依赖,ⅩML映射仍然在大多数高级映射(比如:嵌套Join 玦射)时需要。出于这样的原因,如果存在XML配置文件的话, My Batis将会自动查找和 加载一个对等的ⅹML文件(这种情况下,基于类路径下的 Blog Mapper. class类的类名,那 么 Blog Mapper.xml将会被加载)。后面我们会了解更多 从 Sqlsession Factory中获取 Sqlsession 现在,我们已经知道如何获取 Sqlsession Factory对象了,基于同样的启示,我们就可以 获得 Sqisession的实例了。 Sqisession对象完全包含以数据库为背景的所有执行SQL操作的 方法。你可以用 Sqlsession实例来直接执行已映射的SQL语句。例如: SylSessicn session sylMapper openSession( tr Blogblog =(Blog) session. selectone( crg mybatis. example. BlogMapper selectBlog", 101)i y finally t session. close()i 这种方法起到的作用,和我们使用之前的 My Batis版本是相似的,现在有一种更简洁的 方法。使用合理描述参数和SQL语句返冋值的接口(比如 Blog Mapper. c lass),这样现在就 可以执行更简单,更安全的代码,没有容易发生的字符串文字和转换的错误 例如: SalSessicn session =sglSession Factory openSession()i tr BlogMapper mapper- session. getMapper(BlcgMapper class Blogblog- mapper. selectBlog(101) 1 finall session. close() 现在我们来探究一下这里到底执行了什么 探究已映射的SQL语句 这里你也许想知道通过 Sqisession和 Mapper对象到底执行了什么操作。已映射的SQL 语句是一个很大的主题,而且这个主题会贯穿本文档的大部分内容。为」给出一个宏观的概 念,这里有一些示例 上面提到的任何一个小例,语句是通过XML或注解定义的。我们先来看看XML。使 用基于XML的映射语言,在过去的几年中使得 MyBatis非常流行,它为 My Bat is提供所有 的特性设置。如果你以前用过 My Batis,这个概念就应该很熟悉了,但是XML映射文件也 有很多的改进,后面我们会详细来说。这里给出一个基于XML映射语句的示例,这些语句 应该可以满足上述示例中 Sqlsession对象的调用 <?xIn- version="1.o" encoding=UTF-8?> < DOCTYFE mapper PUBLIC "-//mybatis. org//DTD Mapper 3.0//EN" Whttp://mybatis.crg/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org. mybatis. example. BloqMapper> Select id="selectBlog parametertype=int result Type="blog"> select from Blog where id =#iidh </select> </mapper> 这个简单的例子中看起来有很多额外的东西,但是也相当简沽了。如果你喜欢,你可以 在一个单独的XML映射文件中定义很多的映射语句,除XML头部和文档类型声明之外, 你可以得到很多方便之处。在文件的剩余部分是很好的自我解释。在命名空间 “com. mybatis. example. Blog Mapper”中,它定义了一个名为“ select Blog”的映射语句,这 样它允许你使用完全限定名“ org. mybatis. example. Blog Mapper. select Blog"来调用映射语句, 我们下面示例中所有的写法也是这样的 Blogblog =(Blog) session. selectOne( org. mybatis. example. BlogMapper selectBlcg",101) 要注意这个使用完全限定名调用Java对象的方法是相似的,这样做是有原因的。这个 命名可以直接映射相同命名空间卜的映射器类,使用一个名称,参数和返回值和凵映射的查 询语句都一样的方法即可。这就允许你非常容易地调用映射器接口中的方法,这和你前面看 到的是样的,下面这个示例中它又出现了 BlogMapper mapper session. getMapper(BlogMapper class)i Blog blog- mapper. selectBlog(101)i 第二种方式有很多的优点,首先它不是基丁文字的,那就更安全了。第二,如果你的 IDF有代码补全功能,那么你可以利用它来操纵已映射的SQL语句。第三,不需要强制类 型转换,同时 Blog Mapper接口可以保持简洁,返回值类型很安全(参数类型也很安全) 命名空间的一点注释 命名空间在之前版本的 MyBatis中是可选项,非常混乱在使用上也没有帮助。现在, 命名空间是必须的,而且有一个目的,它使用史长的完全限定名来隔离语句。 命名空间使得接口绑定成为可能,就像你看到的那样,如果之前不了解,那么现在你 就会使用它们了,你应该按照下面给出示例的来练习,以免改变自己的想法。使用命名空 间,并将它放在合适的Jaa包空间之下,这将会使你的代码变得简洁,在很长的时间内提 高 My Batis的作用。 命名解析:为∫减少输入量, MyBatis对所有的命名配置元素使用如下的命名解析规 则,包括语句,结果映射,缓存等。 直接查找完全限定名(比如“ com. mypackage. My Mapper. selectAlThings”),如果 发现就使用 短名称(比如“ selectAllThings”)可以用米引用任意含糊的对象。而如果有两个 或两个以上的(比如“com. foo. selectAllThings”和“ com bar. selectAllThings”), 那么就会得到错误报告,说短名称是含糊的,因此就必须使用完全限定名。 对 Blog Mapper这样的映射器类来说,还有一个妙招。它们中间映射的语句可以不需要 在ⅹML中米写,而可以使用Java注解米替换。比如,上面的XML示例可以如下米替换 package crc. mybatis example; public interface BlogMapper @ Select("select from blog wheRE id =tI Blog selectBlog(int id) 对于简单语句来说,使用注解代码会吏加清晰,然而Java注解对于复杂语句来说就会 混乱,应该限制使用。因此,如果你不得不做复杂的事情,那么最好使用ⅹML来映射语句 当然这也取决于你和你的项目团队的决定,看哪种更适合你来使用,还有以长久方式来 使用映射语句的重要性。也就是说,不要将自己局限在一种方式中。你可以轻松地将注解换 成XML映射语句,反之亦然 范围和生命周期 理解我们目前已经讨论过的不同范围和生命周期类是很重要的。不正确的使用它们会导 致严重的并发问题。 Sqlsession Factory Builder 这个类可以被实例化,使用和丢弃。一旦你创建了 SqlsessionFactory后,这个类就不需 要存在了。因此 Sqisession Factory Builder实例的最佳范围是方法范制(也就是本地方法变量)。 你可以重用 Sqlsession Factory Builder来创建多个 Sqlsession Factory实例,但是最好的方式是 不需要保持它·直存在来保证所有ⅹML解析资源,因为还有更重要的事情要做 Sglsessionfactory 旦被创建, Sqisession Factory实例应该在你的应用程序执行期间都存在。没有理由来 处理或重新创建它。使用 Sqisession Factory的最佳实践是在应用程序运行期间不要重复创建 多次。这样的操作将被视为是非常糟糕的。因此 SqIsession Factory的最佳范围是应用范围。 有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式。然而这两种方法都不 认为是最佳实践。这样的话,你可以考虑依赖注入容器,比如 Goog le Guice或 Spring。这样 的框架允许你创建支持程序米管理单例 Sqlsessionfactory的生命周期。 Sq session 每个线程都应该有它自己的 Sqlsession实例。 Sqlsession的实例不能共享使用,它也是 线稈不安全的。因此最佳的范围是请求或方法范围。绝对不能将 Sqisession实例的引用放在 个类的静态字段甚至是实例字段中。也绝不能将 SqIsession实例的引用放在任何类型的管 理范围中,比如 Serlyet架构中的 HLlpSession。如果你现在止用仼意的Web框架,要考虑 SqIscssion放在一个和HTTP请求对象相似的范围内。换句话说,基于收到的HTP请求, 你可以打开了一个 Sqlsession,然后返回响应,就可以关闭它了。关团 Session很重要,你 应该确保使用 finally来关闭它。下面的示例就是一个确保 SqIscssion关闭的基本模式 SqlSession session-sqISessionFactory openSession()i ry // dc work 3 finally i session. close()i 在你的代码中一贯地使用这和模式,将会保证所有数据库资源都正确地关闭(假设你没 有通过你自己的连接关闭,这会给 MyBatis造成一种迹象表明你要自己管理连接资源)。 映射器实例 射器是你创建绑定映射语句的接冂。映射器接∏的实例可以从 SqIsession中获得。那 么从技术上来说,当被请求时,任意映射器实例的最宽范围和 Sqlsession是相同的。然而, 决射器实例的最佳沱围是方法范围。也就是说,它们应该在使用它们的方法中被请求,然后 就抛弃掉。它们不需要明确地关闭,那么在请求对象中保留它们也就不是什么问题了,这和 SqIscssion相似。你也许会发现,布这个水平上管理太多的资源的话会失控。保持简单,将 决射器放在方法范围内。下面的示例就展示了这个实例: SalSessicn session- sqlSessionFactory opensession()i BlogMapper mapper session getMapper(BlcgMapper class)i // dc work y finally session. close()i XML映射配置文件 My Batis的ⅩML配置文件包含了影响 My Batis行为甚深的设置和属性信息。XML文档 的高层级结构如下 configuration配置 properties属性 settings设置 typeAliases类型命名 ● typcHandlcrs类型处理器 objecLFactory对象工 plugins 插件 ● environments环境 environment环境变量 transaction Manager事务管理器 ● dala Source数据源 映射器 properties 这些是外部化的,可替代的属性,这些属性也可以配置在典型的Java展性配置文件中, 或者通过 properties元素的了元素来传递。例如: <properties resource-org/mybatis/example/config. properties"> <property name=username value=dev user"/ <property name=password" value=F2Fa3! 33TYyg"/> </properties> 其中的属性就可以在整个酉置文件中使用,使用叮替换的属性来实现动态配置。比如: <datasource type=PCOLED> <property name="driver l value="driver/> roperty name-Wurl 1ue="S{ur1}"/> <property name=username value=s username]"/> <property name="password" value="s(password)"/> </dataSource> 这个例子中的 username 和 rd将会由 properties元素中设置的值来替换。 driver和 ur属性将会从包含进来的 config. propcrtics文件中的值来替换。这里提供很多配置的选项 属性也可以被传递到 Sqisession Builder: build()方法中。例如 SyISessicnFactory factory sqlSessionFactoryBuilder. buila(reader, props)i or salsessicnFactory factory sqISessionFactoryBuilder, build(reader, environment, props) 如果在这些地方,属性多于一个的话, My Batis按照如下的顺序加载它们 在 properties元素体内指定的属性首先被读取。

...展开详情
试读 57P MyBatis3中文教程
立即下载 低至0.43元/次 身份认证VIP会员低至7折
一个资源只可评论一次,评论内容不能少于5个字
huangchj 谢谢分享,电子书页数很多,但是还是觉得理论和实践没有结合,有很多东西看不懂。
2015-01-20
回复
geoinfotech 谢谢分享,电子书页数很多,但是还是觉得理论和实践没有结合,有很多东西看不懂。
2014-10-07
回复
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
  • 签到新秀

    累计签到获取,不积跬步,无以至千里,继续坚持!
关注 私信 TA的资源
上传资源赚积分or赚钱
    最新推荐
    MyBatis3中文教程 10积分/C币 立即下载
    1/57
    MyBatis3中文教程第1页
    MyBatis3中文教程第2页
    MyBatis3中文教程第3页
    MyBatis3中文教程第4页
    MyBatis3中文教程第5页
    MyBatis3中文教程第6页
    MyBatis3中文教程第7页
    MyBatis3中文教程第8页
    MyBatis3中文教程第9页
    MyBatis3中文教程第10页
    MyBatis3中文教程第11页
    MyBatis3中文教程第12页

    试读结束, 可继续读6页

    10积分/C币 立即下载 >