Mybatis使用之查询详解
一:简介
此篇主要知识点:
1、sql语句块
2、select标签属性
3、ResultMap 标签配置
4、一对一关联
5、一对多关联
6、多对多关联
7、嵌套查询
二:SQL语句块
2.1 作用
SQL元素可以被用来定义可重用的SQL 代码段,可以包含在其他语句中。比如在项目中常常做的分页查询、分别需要两条SQL语句、一条是查询所有具体记录信息、另一条需要查询记录数、而两条语句的where条件是一样的。这种类似情况就可以使用SQL语句块来简化配置信息。
2.2 实例
2.2.1 SQL语句定义:
<sql id="queryColumns"> id, username, password </sql>
2.2.2 使用:
<select id="queryAuthor" parameterType="int" resultType="author">
SELECT
<include refid="queryColumns"/>
FROM author
WHERE id = #{id}
</select>
三:select标签属性
3.1 标签属性集合:
<select
id="selectPerson"
parameterType="int"
parameterMap="deprecated"
resultType="hashmap"
resultMap="personResultMap"
flushCache="false"
useCache="true"
timeout="10000"
fetchSize="256"
statementType="PREPARED"
resultSetType="FORWARD_ONLY">
3.2具体意义:
参见补充部分。
四:ResultMap 标签配置
4.1 介绍
resultMap 元素是MyBatis 中最重要最强大的元素。它就是让你远离90%的需要从结果集中取出数据的 JDBC 代码的那个东西, 而且在一些情形下允许你做一些 JDBC 不支持的事情。事实上, 编写相似于对复杂语句联合映射这些等同的代码, 也许可以跨过上千行的代码。 ResultMap 的设计就是简单语句不需要明确的结果映射,而很多复杂语句确实需要描述它们的关系。
4.2 ResultMap 与ResultType的区别
MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap。resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用但是resultType跟resultMap不能同时存在。
在MyBatis进行查询映射的时候,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。当提供的返回类型属性是resultType的时候,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。
所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当我们提供的返回类型属性是resultType的时候,MyBatis对自动的给我们把对应的值赋给resultType所指定对象的属性,而当我们提供的返回类型是resultMap的时候,Mybatis就会根据我们配置的信息做映射
4.3 标签属性
<resultMap id="resultMapId"
type="JavaBean"
autoMapping="false"
extends=""/>
4.4 标签体
ResultMap的主要组成部分、并且标签体之间可以相互嵌套、来表示更复杂的JavaBean。具体的使用到对应的标签体再说明其作用与标签属性的配置及意义。
下面是其标签体签名:
<constructor>
<idArg/>
<arg/>
</constructor>
<id property="" column="" java