[mybatis]resultMap详解

打印 上一主题 下一主题

主题 678|帖子 678|积分 2034

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
resultMap

    Mybatis中提供了resultMap功能,可以将数据库查询效果映射到Java对象,用于解决 字段名与属性名不一致复杂关系(如一对多)的映射题目。 
比如一个User类,在它的属性里还有另一个子对象(或者多个),可以是个List或者其他实体类,这个时候就需要用到
    格式:
  1. <resultMap type="User" id="userOrderMap">
复制代码
type:要映射的实体类;id:给该resultMap定义一个唯一标识符。

id、result标签:用于映射指定的属性(不包罗除String外的实体类对象),这两者的在映射上没有太多不同。id可以用于标识对象的主键字段,提升性能(MyBatis用主键判断对象是否重复)。
  1. <resultMap id="" type="">
  2.     <id column="" property=""></id>
  3.     <result column="" property=""></id>
  4. </resultMap>
复制代码
column:对应表的列名
property:java对象的属性名

collection标签:用于映射一对多的子对象,比如将多条数据映射到某个聚集中(聚集的元素类型是某种实体类)。假如有点晕,就记得:给聚集、map等类型的属性赋值,利用collection
  1. <!-- 给list的属性赋值-->
  2. <collection property="" ofType="">
  3.     <id column="" property=""></id>
  4.     <result column="" property=""></id>
  5. </collection>
  6. <!-- 给map属性赋值-->
  7. <collection
  8.     property=""           
  9.     javaType="java.util.HashMap"  <!-- 固定为某个Map,此处写的是HashMap -->
  10.     ofType=""         
  11.     keyColumn=""           <!-- 指定作为Map键的列 -->
  12.     keyProperty=""              <!-- 键值对中,值对象中作为键的属性 -->
  13. >
  14.     <id column="" property=""/>
  15.     <result column="" property=""/>
  16. </collection>
复制代码
property:父对象中对应的子对象
ofType:子对象对应的数据类型,比如该子对象的数据类型是User类,那么此处就填写User。假如是给Map元素赋值,那么该属性的功能是指定 value 的数据类型
keyColumn:在映射Map类型数据时,用于指定key 的数据类型
给Map映射的内容,光形貌比力抽象难明,下面是个示例:
  1. public class Order {
  2.     private Long id;
  3.     private String orderNumber;
  4.     private Map<Long, OrderItem> itemMap; // 键为商品ID,值为OrderItem对象
  5.    
  6.     // Getters & Setters
  7. }
  8. public class OrderItem {
  9.     private Long id;        // 与keyProperty="id"对应
  10.     private String name;
  11.     private Integer quantity;
  12.    
  13.     // Getters & Setters
  14. }
  15. //映射后的数据结构
  16. order.getItemMap() = {
  17.     1001: OrderItem(id=1001, name="商品A", quantity=2),
  18.     1002: OrderItem(id=1002, name="商品B", quantity=5)
  19. }
复制代码
 <association>标签
    与利用collection标签映射List用法一致,只是将collection改成association即可。区别在于,collection是给聚集中多个元素的属性进行赋值,association是给父对象的某一个子对象元素中的属性进行赋值。
示例:
  1. <association property="user" javaType="User">
  2.   <id column="id" property="id"/>            
  3.   <result column="username" property="name"/>   
  4.   <result column="sex" property="sex"/>        
  5.   <!-- 其他字段映射... -->
  6. </association>
复制代码
                                                           

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

李优秀

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表