映射SQL语句

广告位

此时,您可能想知道SqlSession 或者映射器类(Mapper class)是怎样执行的。映射SQL 语句…

此时,您可能想知道SqlSession 或者映射器类(Mapper class)是怎样执行的。映射SQL
语句是一个很大的主题,该主题将可能占据本文档的大部分内容。但是,为了让您看到它是怎样
运行的,这里举两个例子。
在上面的例子中,映射语句已经在XML 配置文件或注解中定义。让我们首先来看看XML 配置
文件,所有MyBatis 提供的功能特性都可以通过基于XML 映射配置文件配置来实现。如果您以前
使用过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 声明,但该文件余下的部分
是自解(self explanatory,可理解为不加解释就能明白)的。它定义了映射语句的名称
“selectBlog”,在命名空间“org.mybatis.example.BlogMapper”,允许您通过指定完整类名
“org.mybatis.example.BlogMapper”来访问上面的例子:
 

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

这非常类似java 中通过完整类名来调用方法,而这样做是有原因的。这个名称可以直接映射

到一个具在相同命名空间的映射类,这个映射类有一个方法的名称、参数及返回类型都与select
映射语句相匹配。正如您前面看到的,这使您很简单地调用映射类里的方法,下面是另外的一个
例子:
  BlogMapper mapper = session.getMapper(BlogMapper.class);  Blog blog = mapper.selectBlog(101);  

第二种方法有很多好处。第一,它不依赖于字符串,所以更安全。第二,如果您的IDE 有自
动完成功能,您可以利用这功能很快导航到您的映射SQL 语句。第三,您不需要关注返回类型,
不需要进行强制转换,因为使用BlogMapper 接口已经限定了返回类型,它会安全地返回。

关于命名空间

1、命名空间:在以前的版本中是可选的、复杂的且没多大用处。但在这个版本中,命名空间是必
须的,并且不仅仅是简单地使用完整类名来隔离区分语句。
正如您看到的那样,命名空间能够进行接口绑定,即使您认为现在不会使用到它,但您应该
按照这些准则来做。一旦使用了命名空间并且放入适当的java 包命名空间中将会使您的代码清
晰,并提高MyBatis 的长期可用性。
2、名称解析: 为了减少大量地输入, MyBatis 对所有的配置元素,包括statements、result
maps、caches 等使用下面的名称解析规则:
• 完整类名:(例如: “com.mypackage.MyMapper.selectAllThings”)可用来直接查找并
使用。
• 短名称: (例如: “selectAllThings”)可用来引用明确的实体对象。但是,如果出现有
两个或更多(例如“com.foo.selectAllThings 和com.bar.selectAllThings”)实体对
象,您将收到一个错误报告(短名称含糊不清),因此,这时就必须使用完整类名。

 

对映射类还有一个更好的方法,就像前面的BlogMapper。它们的映射语句不需要完全在XML
中配置。相反,它们可以使用Java 注解。例如上面的XML 配置可以替换为:
 

  package org.mybatis.example;  public interface BlogMapper {      @Select("SELECT * FROM blog WHERE id = #{id}")      Blog selectBlog(int id);  } 
对简单的映射语句,使用注解可以显得非常地清晰。但是java 注解本身的局限难于应付更复
杂的语句。如果您准备要做某些复杂的事情,最好使用XML 文件来配置映射语句。

这将由您和您的项目小组来确定哪种方式是适合的,以一致的方式来定义映射语句是非常重
要的。也就是说,您不会被限于仅用一种方式。您能够非常容易地从基于注解的映射语句移植到
XML 配置文件中,反之亦然。

 

  

拾荒的老头

关于作者: 拾荒的老头

为您推荐