第12章--整合MyBatis.pptVIP

  • 5
  • 0
  • 约2.16万字
  • 约 49页
  • 2018-05-27 发布于福建
  • 举报
4.resultMap resultMap元素是MyBatis中最重要最强大的元素。与使用JDBC从结果集获取数据相比,它可以省掉90%的代码,也可以允许做一些JDBC不支持的事情。事实上,要写一个类似于连结映射(join mapping)这样复杂的交互代码,可能需要上千行的代码。设计resultMap 的目的,就是只使用简单的配置语句而不需要详细地处理结果集映射,对更复杂的语句除了使用一些必须的语句描述以外,就不需要其他的处理了。 下面示例使用外部resultMap: resultMap id=userResultMap type=com.someapp.model.User id property=id column=user_id / result property=username column=user_name/ result property=password column=hashed_password/ /resultMap id和result都映射一个单独列的值到简单数据类型的单独属性或字段。这两者之间的唯一不同是 id表示标识属性。 引用userResultMap的语句只需使用resultMap属性即可(注意去掉resultType属性)。如: select id=selectUsers resultMap=userResultMap select user_id, user_name, hashed_password from some_table where id = #{id} /select association(一对一关联) (1)关联嵌套查询 关联嵌套查询,示例如下: resultMap id=blogResult type=Blog association property=author column=author_id javaType=Author select=selectAuthor/ /resultMap select id=selectBlog resultMap=blogResult SELECT * FROM BLOG WHERE ID = #{id} /select select id=selectAuthor resultType=Author SELECT * FROM AUTHOR WHERE ID = #{id} /select 上述关联嵌套查询,有两个查询语句:一个加载博客,一个加载作者。而且博客的结果映射描述了“selectAuthor”语句应该被用来加载它的author属性。其他所有的属性将会被自动加载,假设它们的列和属性名相匹配。 这种方式很简单,但是对于大量数据集合和列表性能较差。 问题是:执行了一个单独的SQL 语句来获取结果列表。而对返回的每条记录,则执行了一个查询语句来为每个加载细节。导致成百上千的SQL语句被执行,这通常不是期望的。 所以MyBatis还有另外一种方法:关联嵌套结果。 (2)关联嵌套结果 联合博客表和作者表的查询,示例如下: select id=selectBlog resultMap=blogResult select B.id as blog_id, B.title as blog_title, B.author_id as blog_author_id, A.id as author_id, A.username as author_username, A.password as author_password, A.email as author_email, A.bio as author_bio from Blog B left outer join Author A on B.author_id = A.id where B.id = #{id} /select 注意上面这个联合查询,以及采取保护来确保所有结果被唯一而且清晰的名字来重命名。这使得映射非常简单。现在映射这个结果: resultMap id=blogResult type=Blog id property=id column=blog_id / result property=title column=blog_title/ association property=author column=blog_author_id javaType=Author resultMap=authorRes

文档评论(0)

1亿VIP精品文档

相关文档