当前位置:首页 > 开发 > 系统架构 > 架构 > 正文

MyBatis3 User Guide 第二部分

发表于: 2010-07-17   作者:dongwei_6688   来源:转载   浏览次数:
摘要: 声明:文章内容只作为学习和交流使用,不得用于商业转载,如需使用,请通过站内短信与本人联系,获得许可。   探索SQL映射 (Exploring Mapped SQL Statements)        此刻,你可能很想知道SqlSession或者映射类究竟执行了些什么操作。然而SQL映射(Mapped SQL State

声明:文章内容只作为学习和交流使用,不得用于商业转载,如需使用,请通过站内短信与本人联系,获得许可。

 

探索SQL映射 (Exploring Mapped SQL Statements)

       此刻,你可能很想知道SqlSession或者映射类究竟执行了些什么操作。然而SQL映射(Mapped SQL Statements)是一个很大的话题,如果展开来谈,会占用很大篇幅,但为了能让你对所执行的内容有个整体的认识,下面给出几个例子。

      上面展示的任何一个例子,都可以通过XML或注解二者中的任何一种语法来定义。让我们先来看下XML方式的定义。MyBatis提供的全部特性都可以通过基于XML的映射来实现,这也正是这些年来MyBatis如此受欢迎的原因。如果你之前使用过MyBatis,它的概念对你来说并不陌生,但在XML映射文件上做了大量改进,以便以后的使用上更加清晰。这个例子是一个基于XML的映射,可以适用于上面SqlSession的调用过程。

<?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> 

      对这个简单的例子来说,看起来好像有点杀鸡用牛刀了,但实际上它非常轻巧。在一个XML映射文件中,你可以定义任意多的映射语句,可以对得起你定义一个XML头和DOCTYPE 声明付出的辛劳,呵呵。该文件的剩余部分几乎不用过多的解释就可以看明白。给这个映射起了个名字“selectBlog”,而命名空间“org.mybatis.example.BlogMapper”则允许你用全限定的名字来调用它“org.mybatis.example.BlogMapper.selectBlog”。下面看到的这个例子,就和我们上面做的一样:

Blog blog = (Blog) session.selectOne( "org.mybatis.example.BlogMapper.selectBlog", 101); 

       注意看,这种调用和我们调用一个全限定的类上的方法何其的相似,这其中肯定有原因的。这个名字可以直接映射到和命名空间名字相同的一个类上,它可以匹配方法名,参数,它的返回值就是这个映射的select语句的返回值。因此你可以用一种非常简单的方式,就像你上面看到的那样来调用你所映射的这个类上的方法,但是这里再次出现在下面的示例当中:

BlogMapper mapper = session.getMapper(BlogMapper.class); 
Blog blog = mapper.selectBlog(101); 

        第二种方式有许多优势,首先,它不再依赖于一个字符串常量,因此更加安全;其次,如果你的IDE有代码自动完成功能的话,你可以利用它在那些已经映射了的SQL语句之间进行方便的导航;第三,你无须对返回值进行强制转换,因为BlogMapper接口有清晰的、类型安全的返回值(和类型安全的参数)。

 

关于命名空间(Namespaces)的说明

→命名空间(Namespaces) 在MyBatis之前的版本中,命名空间是可选的,也因此造成了很多的混乱和无助。在现在这版中,命名空间是必须的,而且它的用途不再仅仅是用较长的,全限定的名称来完成简单的隔离。正如你所看到的,命名空间可以用来进行接口绑定(interface bindings),即便你认为你现在还用不上它,但你也必须要遵守这些实践,以免你后来改变主意。一但你使用了命名空间,并且将其置于一个合适的java包命名空间中,将会使你的代码非常干净,并且从长远来看,将会大大提高MyBatis的可用性。                                                                                                     

→命名策略(Name Resolution)  为了减少打字数量,MyBatis采用下面的命名规则来命名所有的配置元素,包括语句(statements)、结果映射(result maps)、缓存(caches)等等。

  • 全限定名(Fully qualified names )可以直接进行查询和使用,比如:“com.mypackage.MyMapper.selectAllThings”,
  • 短名字,比如:“selectAllThings”,可以用来引用名字唯一的对象。然而如果该名字有两个,比如:“com.foo.selectAllThings 和“com.bar.selectAllThings”,那么你就会收到一个错误报告,表名该名字语意不清,因此必须要使用全限定的名称。

         还有一种映射BlogMapper类的窍门。那些Sql语句根本不需要通过XML来进行映射,而可以直接通过Java的注解(Java Annotations)来实现。例如,上面的那些XML可以完全用下面的写法代替:

package org.mybatis.example; 
public interface BlogMapper { 
  @Select("SELECT * FROM blog WHERE id = #{id}") 
  Blog selectBlog(int id); 
}

          对于简单的Sql来说,用注解要清晰的多,然而,对于复杂的语句,注解就会显得既混乱,又不灵活。所以如果你想做一些复杂的事,你最好还是用XML来做映射。

         使用哪种方式取决于你和你的项目组认为哪种更适合于你们,以及用一种统一的方式来定义语句对你们来说有多么重要。也就是说你们没有必要死守一种方式,你们可以非常简单的从注解映射的方式迁移到XML映射的方式,反之亦然。

MyBatis3 User Guide 第二部分

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
特此声明,以下文章出自 http://jdee.sourceforge.net/jdedoc/html/jde-ug/jde-ug.html http://dand
JBoss AOP - User Guide The Case For Aspects 1.0 Table of Contents Preface 1. What Is Aspect-O
Installation Configuration Set user name and email Add SSH keys Repository Create New Reposit
Now we can start a new process instance using the id we defined in the process definition (se
5.4的有中文,下载见附件 有总比没有看,大部分都看得懂,凑合看吧 原文网址:http://www.blogjava.
3.7. Process root element(流程根元素) The root of an BPMN 2.0 XML process is the definitions
3.8.9. Tasks(任务) A task represents work that needs to be done by an external entity, such a
ps:由于篇幅问题,这篇博客主要介绍数据挖掘标准化流程中的project understanding问题,剩下的5个
♣ 第一阶段目标 能把计算的功能封装起来,通过测试程序和API接口测试其简单的加法功能。 ♣ 第二阶
使用UDDI的Web服务描述和发现(第一部分) KarstenJanuszewski MicrosoftCorporation 2001年10月3日
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号