标签:mybatis mybatis关联查询 mybatis 一对多 mybatis一对一 mybatis多对多
此篇主要知识点:
1、sql语句块
2、select标签属性
3、ResultMap 标签配置
4、一对一关联
5、一对多关联
6、多对多关联
7、嵌套查询
SQL元素可以被用来定义可重用的SQL 代码段,可以包含在其他语句中。比如在项目中常常做的分页查询、分别需要两条SQL语句、一条是查询所有具体记录信息、另一条需要查询记录数、而两条语句的where条件是一样的。这种类似情况就可以使用SQL语句块来简化配置信息。
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 id="selectPerson" parameterType="int" parameterMap="deprecated" resultType="hashmap" resultMap="personResultMap" flushCache="false" useCache="true" timeout="10000" fetchSize="256" statementType="PREPARED" resultSetType="FORWARD_ONLY">
参见补充部分。
resultMap 元素是MyBatis 中最重要最强大的元素。它就是让你远离90%的需要从结果集中取出数据的 JDBC 代码的那个东西, 而且在一些情形下允许你做一些 JDBC 不支持的事情。事实上, 编写相似于对复杂语句联合映射这些等同的代码, 也许可以跨过上千行的代码。 ResultMap 的设计就是简单语句不需要明确的结果映射,而很多复杂语句确实需要描述它们的关系。
MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap。resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用但是resultType跟resultMap不能同时存在。
在MyBatis进行查询映射的时候,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。当提供的返回类型属性是resultType的时候,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。
所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当我们提供的返回类型属性是resultType的时候,MyBatis对自动的给我们把对应的值赋给resultType所指定对象的属性,而当我们提供的返回类型是resultMap的时候,Mybatis就会根据我们配置的信息做映射
<resultMap id="resultMapId" type="JavaBean" autoMapping="false" extends=""/>
ResultMap的主要组成部分、并且标签体之间可以相互嵌套、来表示更复杂的JavaBean。具体的使用到对应的标签体再说明其作用与标签属性的配置及意义。
下面是其标签体签名:
<constructor> <idArg/> <arg/> </constructor> <id property="" column="" javaType="" jdbcType="" typeHandler=""/> <result typeHandler="" jdbcType="" javaType="" column="" property=""/> <association property=""/> <collection property=""/> <discriminator javaType=""> <case value=""/> </discriminator>
因为在前面提到过、加载Mybatis总配置文件的时候会自动扫描指定包下面的类、并且用类名首字母小写作为名称作为其别名(TypeAliases)、这样我们就不必在select的resultType指定JavaBean的全限定名称了。select语句如下即可:
<select id="getAllAuthors" resultType="author"> SELECT t.id, t.username, t.password, t.email, t.bio, t.favourite_section favouriteSection FROM author t </select>
5.2.1 配置ResultMap
<resultMap id="author" type="author"> <id property="id" column="author_id"/> <result property="username" column="username"/> <result property="password" column="password"/> <result property="email" column="email"/> <result property="bio" column="bio"/> <result property="favouriteSection" column="favouriteSection"/> </resultMap>
5.2.2 将select标签的ResultMap属性值设置为上面ResultMap标签的id、达到映射效果
<select id="getAllAuthors" resultMap="author"> SELECT t.id, t.username, t.password, t.email, t.bio, t.favourite_section favouriteSection FROM author t </select>
以Blog为例、从《Mybatis使用之环境搭建》中知道Blog与Author是一对一关系、这里是在Blog中关联了Author信息。其他的先不管。如何查询Blog信息、要求是除基本信息外还包含作者完整信息
6.1.1 ResultMap配置一:
<resultMap id="oneToOneBlog" type="blog"> <id property="id" column="blog_id"/> <result property="title" column="title"/> <!-- 可以使用resultMap属性指向其他映射文件已经定义好的resultMap --> <association property="author" resultMap="org.alien.mybatis.samples.mapper.AuthorMapper.author"/> </resultMap>
6.1.2 ResultMap配置二:
<resultMap id="oneToOneBlog" type="blog"> <id property="id" column="blog_id"/> <result property="title" column="title"/> <!-- 也可以在此内部定义指向Author类的映射、此种定义不能重用 --> <association property="author" javaType="author"> <id property="id" column="author_id"/> <result property="username" column="username"/> <result property="password" column="password"/> <result property="email" column="email"/> <result property="bio" column="bio"/> <result property="favouriteSection" column="favouriteSection"/> </association> </resultMap>
6.1.3查询语句:
<select id="getBlogOneToOne" resultMap="oneToOneBlog"> SELECT t1.id blog_id, t1.title, t2.id author_id, t2.username, t2.password, t2.email, t2.bio, t2.favourite_section favouriteSection FROM blog t1, author t2 WHERE t1.author_id = t2.id </select>
6.1.4 association标签属性以及标签体
属性:
标签体与ResultMap基本相同、支持嵌套。
更多内容:Mybatis 目录
github地址:https://github.com/andyChenHuaYing/scattered-items/tree/master/items-mybatis
源码下载地址:http://download.csdn.net/detail/chenghuaying/8713311
标签:mybatis mybatis关联查询 mybatis 一对多 mybatis一对一 mybatis多对多
原文地址:http://blog.csdn.net/crave_shy/article/details/45844777