zoukankan      html  css  js  c++  java
  • mybatis-resultMap使用与详解

    1,当数据库的字段名与属性名称不一致时,在mybatis中如何处理?

    第一种方式: 采用投影对字段重命名
    <
    select id="load" parameterType="int" resultMap="addressMap"> select * user_id as userId from t_address where id=#{id} </select>
    第二种方式: 使用resultMap

    <resultMap type="Address" id="addressMap"> <!-- id是用来对主键映射的 --> <!-- result是用来对一般属性映射的 --> <!-- 只需要对不一致的字段进行映射,其它的没有必要, id一致是,可以不映射 --> <id column="id" property="id"/> <result column="postcode" property="postcode"/> </resultMap> <select id="load" parameterType="int" resultMap="addressMap"> select * from t_address where id=#{id} </select>

    2,resultMap中除了前面的id result两个属性之外,还有很多有趣的属性,

    2.1 association取关联对象  (外键关联)

    第一种方式 会发N+1条sql,不可取 

    <
    resultMap type="Address" id="addressMap"> <!-- association 用来作关联 property属性:要关联的对象名称 column属性:用哪一列进行关联 javaType属性: 要关联的对象类型 select属性:执行的sqlId --> <!-- association最大的问题就是取关联对象时,会发N条sql 因此以下取关联对象的方式不会使用的 --> <association property="user" column="user_id" javaType="User" select="com.yangwei.shop.entity.User.load" /> </resultMap>
    <select id="load" parameterType="int" resultMap="addressMap"> select * from t_address where id=#{id} </select>
       第二种方式  只会发1条sql ,请使用这种
      注意sql的写法
    <resultMap type="Address" id="addressMap" autoMapping="true"> <!-- 设置了autoMapping之后,自己对象的属性会完成自动映射 --> <id column="a_id" property="id" />
         <-- 取关联对象-->
    <association property="user" javaType="User"> <!-- 这里面的字段都是user表中的,全部必须手动映射,没有映射的将是null --> <id column="id" property="id"/> <result column="username" property="username"/> <result column="passwd" property="passwd"/> <result column="nickname" property="nickname"/> <result column="type" property="type"/> </association> </resultMap> <select id="load" parameterType="int" resultMap="addressMap"> select *,t1.id as a_id from t_address t1 right join t_user t2 on(t1.user_id=t2.id) where t1.id=#{id} </select>
    第三种方式: 与第二种差不多,只是将结果resultMap单独出来
    <
    resultMap type="Address" id="addressMap" autoMapping="true"> <!-- 设置了autoMapping之后,自己对象的属性会完成自动映射 --> <id column="a_id" property="id" /> <association property="user" javaType="User" resultMap="userMap" /> </resultMap> <resultMap type="User" id="userMap"> <id column="id" property="id"/> <result column="username" property="username"/> <result column="passwd" property="passwd"/> <result column="nickname" property="nickname"/> <result column="type" property="type"/> </resultMap>
    <select id="load" parameterType="int" resultMap="addressMap"> select *,t1.id as a_id from t_address t1 right join t_user t2 on(t1.user_id=t2.id) where t1.id=#{id} </select>

     2.2 collection 获取对象中关联的集合数据

        <resultMap type="User" id="userMap" autoMapping="true">
            <!--User类中有 List<Address> address属性;-->
            <!--column写不写都无所谓-->
            <!--ofType必须设置 List里面的类型-->
          
        <id column="user_id" property="id"></id> <!--下面的查询会有两个id,需要指明用哪一个映射-->
    <collection property="address" column="user_id" ofType="Address"> <id column="a_id" property="id" /> <result column="name" property="name"/> <result column="postcode" property="postcode"/> <result column="detail" property="detail"/> <result column="phone" property="phone"/> </collection> </resultMap> <select id="load" parameterType="int" resultMap="userMap"> select *,t2.id as a_id from t_user t1 left join t_address t2 on(t1.id=t2.user_id) where t1.id=#{id} </select>
    ----------- 赠人玫瑰,手有余香     如果本文对您有所帮助,动动手指扫一扫哟   么么哒 -----------


    未经作者 https://www.cnblogs.com/xin1006/ 梦相随1006 同意,不得擅自转载本文,否则后果自负
  • 相关阅读:
    性能测试监控指标-数据库
    cpu 故障定位
    ubuntu安装boost
    固定IP下虚拟机网卡配置及ssh
    零基础天池新闻推荐初学-04-排序模型+模型融合的简单学习(TODO 待进一步完善)
    零基础天池新闻推荐初学-04-特征工程(制作特征列和标签列,转为监督学习)
    零基础天池新闻推荐初学-03-多路召回
    零基础天池新闻推荐初学-02-数据分析
    零基础天池新闻推荐初学-01-赛题理解&Baseline
    初学推荐系统-06- GBDT+LR模型
  • 原文地址:https://www.cnblogs.com/xin1006/p/3319594.html
Copyright © 2011-2022 走看看