更新
开始学习,开始没有懂起在association 和collection 标签里面的cloumn 有什么用,重新看类一下,
有了新的体会
<resultMap type="User" id="resultUser">
<collection property="posts" column="id" ofType="Post">
<id property="id" column="post_id"/>
</collection>
</resultMap>
<select id="getUser" resultMap="resultUser">
select * from tuser,tpost where tuser.id=tpost.post_id and tuser.id=#{id};
</select>
(对于一对多,数据表,都是将多的那段建立外建)
对于正面,association 来说,在Post的表里有USer的id,从所有数据,将id作为post收集user的标志,如果不写的,也没有事,
就像 <id> 和<result>标签一样
但是性能,有所不同,
向反,
collection,也是同样的道理
---------------
<resultMap type="Post" id="resultPostsMap">
<result property="title" column="title"/>
<result property="content" column="content"/>
<association property="user" javaType="User">
<result property="id" column="userid"/>
<result property="username" column="username"/>
<result property="mobile" column="mobile"/>
</association>
</resultMap>
<select id="getPosts" resultMap="resultPostsMap" parameterType="int">
SELECT u.*,p.*
FROM tuser u,tpost p
WHERE u.id=p.userid AND p.post_id = #{post_id}
</select>
第一种,从数据库,取出数据,然后根据resultPostsMap setter gettter匹配对象
---------------------------------
<select id="getPostByYes" resultMap="resultPostByYes" parameterType="int">
SELECT
tpost.post_id as post_id,
tpost.userid as post_user_id,
tpost.title as post_title,
tpost.content as post_content,
tuser.id as user_id,
tuser.username as user_username,
tuser.mobile as user_mobile
FROM tpost LEFT OUTER JOIN tuser ON tpost.userid = tuser.id
WHERE post_id = #{post_id}
</select>
<resultMap type="Post" id="resultPostByYes">
<id property="id" column="post_id"/>
<result property="title" column="post_title"/>
<result property="content" column="post_content"/>
<association property="user" column="post_user_id" javaType="User" resultMap="resultUsertByYes"/>
</resultMap>
<resultMap type="User" id="resultUsertByYes">
<id property="id" column="user_id"/>
<result property="username" column="user_username"/>
<result property="mobile" column="user_mobile"/>
</resultMap>
先对数据column 作处理,然后更具两个resultMapp 自动匹配
---------
<!-- 嵌套使用 正面 --> <!-- 一般不用 执行的语句太多 简单的话可以用 -->
<resultMap type="Post" id="ResultPostAs">
<association property="user" column="userid" javaType="User" select="getUserByAssociation"/>
</resultMap>
<select id="getPostByAssociation" parameterType="int" resultMap="ResultPostAs">
SELECT *
FROM tpost
WHERE post_id = #{post_id}
</select>
<select id="getUserByAssociation" parameterType="int" resultType="User">
SELECT *
FROM tuser
WHERE ID = #{id}
</select>
相当于嵌套语句的适用,先取出一堆数据,然后,在取出assocition 的数据
相当于执行两条语句 速度,会变慢,一般适用1 2
原文
http://www.yiibai.com/mybatis/mybatis_integration_with_spring.html