mybatis高级映射

resultType &resultMap :

1、resultType :使用resultType实现较为简单,如果pojo中没有包括查询出来的列名,需要增加列名对应的属性,即可完成映射。
比如在常见一些明细记录的展示,比如用户购买商品明细,将关联查询信息全部展示在页面时,此时可直接使用 resultType 将每一条记录映射到 pojo 中,在前端页面遍历 list ( list 中是 pojo )即可。
2、resultMap :使用 association 和 collection 完成一对一和一对多以及多对多的高级映射(对结果有特殊的映射要求)。
association :
作用:将关联查询信息映射到一个pojo对象中。如为了方便查询关联信息可以使用 association 将关联订单信息映射为用户对象的 pojo 属性中,比如:查询订单及关联用户信息。
使用 resultType 无法将查询结果映射到 pojo 对象的 pojo 属性中,根据对结果集查询遍历的需要选择使用 resultType 还是 resultMap 。
collection :作用:将关联查询信息映射到一个list集合中。如为了方便查询遍历关联信息可以使用 collection 将关联信息映射到 list 集合中,比如:查询用户权限范围模块及模块下的菜单,可使用 collection 将模块映射到模块 list 中,将菜单列表映射到模块对象的菜单 list 属性中,这样的作的目的也是方便对查询结果集进行遍历查询。如果使用 resultType 无法将查询结果映射到 list 集合中。

resultType 实现一对一查询

resultType 实现一对一查询相对比较简单,只需定义pojo类即可实现,那么接下来实现都是基于mybatis代理方式来实现resultType 和resultMap,即接口实现等不写了,用代理的方式就很好去用这些映射文件去实现相应的功能 ,。
mapper.xml映射文件配置如:





   
   
  

而对于resultMap ,需要在映射文件中配置resultMap 要映射的类属性和对应数据库的列名

  
  
  
  

    
    
    
     
     
     
     


    
     -->

    

resultType 和 resultMap小结:
1、resultType :使用 resultType 实现较为简单,如果 pojo 中没有包括查询出来的列名,需要增加列名对应的属性,即可完成映射。
2、如果没有查询结果的特殊要求建议使用 resultType 。
3、resultMap :需要单独定义 resultMap ,实现有点麻烦,如果对查询结果有特殊的要求,使用 resultMap 可以完成将关联查询映射 pojo 的属性中。
4、resultMap 可以实现延迟加载, resultType 无法实现延迟加载。

一对多查询

在接下来的映射文件的配置中,resultType 的使用还是基本一样的,而resultMap 就很容易体现两者的区别了。
使用 resultType 实现:将订单明细映射到一个类的类属性中中,需要自己处理,使用双重循环遍历,去掉重复记录,将订单明细放在类属性中,实现起来相对麻烦,不建议使用。
而mybatis 使用 resultMap 的 collection 对关联查询的多条记录映射到一个 list 集合属性中。

mapper.xml映射文件的配置

  
  
      
    

    
        
    
     
     
     
     
  
  
       
       
       
       
       
       
       
       
       
         
           
        
     
    
   

       
       
       
       
     
         
      
     
     
  
     


   
   


多对多查询

这个mapper.xml是实现多对多查询的结果,以用户查询商品明细为例子。
映射思路:将用户信息映射到user类中。
在user类中添加订单列表属性List orders,将用户创建的订单映射到orders
在Orders中添加订单明细列表属性Listdetial,将订单的明细映射到detial
在OrderDetail中添加Items属性,将订单明细所对应的商品映射到Items
总结来说:在User类中创建List集合属性,在orders类中创建Listdetials集合属性,
最后在detial类中定义类属性iterm,最后实现映射文件( 即嵌套再嵌套的关系)

    
    
    
  

    
     
     
     
   
   
        
             
              
              
            
                 
                   
                              
                               
                                
                   
                              
                                
                               
                                        
                                           
                                            
                               
                               
                     
                   
        
         
   


   
      

  

总结:mybatis高级映射主要是对数据库的表的字段进行映射到pojo类或者集合中,不同要求所使用resultType和resultMap 也不同。

你可能感兴趣的:(mybatis高级映射)