mybatis 多对一,xml 文件的处理 学习总结

更新

开始学习,开始没有懂起在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="id" column="post_id"/>
        <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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值