mybatis框架-使用resultMap实现高级结果映射,collection属性的使用

需求:获取指定用户的用户信息和地址列表

修改user实体类  添加集合的引用。

/**
* 根绝用户id,获取该角色下的地址信息
* @param userID
* @return
*/
public User getUserListAddressByUserID(@Param("userID")Integer userID);

<resultMap type="User" id="userAddressList">
<id property="id" column="id"/>
<result property="userCode" column="userCode" />
<result property="userName" column="userName" />
<result property="userRole" column="userRole" />
<!--User类中引用的List集合类 同样为了复用,也可以将collection的映射结果使用resultMap元素提到外边,这个和association的用法是相同的 -->
<collection property="addressList" ofType="Address">
<id property="id" column="b_id"/>
<result property="contact" column="contact" />
<result property="addressDesc" column="addressDesc" />
<result property="tel" column="tel" />
</collection>
</resultMap>
<select id="getUserListAddressByUserID" resultMap="userAddressList" parameterType="Integer">
SELECT a.*,b.id as b_id,b.contact,b.addressdesc,b.tel from smbms_user a,smbms_address b where a.id=b.userid and a.id=#{userID}
</select>

  1 package cn.smbms.pojo;
  2
  3 import java.util.Date;
  4 import java.util.List;
  5
  6 public class User {
  7     private Integer id; //id
  8     private String userCode; //用户编码
  9     private String userName; //用户名称
 10     private String userPassword; //用户密码
 11     private Integer gender;  //性别
 12     private Date birthday;  //出生日期
 13     private String phone;   //电话
 14     private String address; //地址
 15     private Integer userRole;    //用户角色
 16     private Integer createdBy;   //创建者
 17     private Date creationDate; //创建时间
 18     private Integer modifyBy;     //更新者
 19     private Date modifyDate;   //更新时间
 20     private Role role;//用户角色
 21     private List<Address> addressList;//一个用户有多个地址列表
 22
 23
 24
 25     public List<Address> getAddressList() {
 26         return addressList;
 27     }
 28     public void setAddressList(List<Address> addressList) {
 29         this.addressList = addressList;
 30     }
 31     public Role getRole() {
 32         return role;
 33     }
 34     public void setRole(Role role) {
 35         this.role = role;
 36     }
 37     public Integer getId() {
 38         return id;
 39     }
 40     public void setId(Integer id) {
 41         this.id = id;
 42     }
 43     public String getUserCode() {
 44         return userCode;
 45     }
 46     public void setUserCode(String userCode) {
 47         this.userCode = userCode;
 48     }
 49     public String getUserName() {
 50         return userName;
 51     }
 52     public void setUserName(String userName) {
 53         this.userName = userName;
 54     }
 55     public String getUserPassword() {
 56         return userPassword;
 57     }
 58     public void setUserPassword(String userPassword) {
 59         this.userPassword = userPassword;
 60     }
 61     public Integer getGender() {
 62         return gender;
 63     }
 64     public void setGender(Integer gender) {
 65         this.gender = gender;
 66     }
 67     public Date getBirthday() {
 68         return birthday;
 69     }
 70     public void setBirthday(Date birthday) {
 71         this.birthday = birthday;
 72     }
 73     public String getPhone() {
 74         return phone;
 75     }
 76     public void setPhone(String phone) {
 77         this.phone = phone;
 78     }
 79     public String getAddress() {
 80         return address;
 81     }
 82     public void setAddress(String address) {
 83         this.address = address;
 84     }
 85     public Integer getUserRole() {
 86         return userRole;
 87     }
 88     public void setUserRole(Integer userRole) {
 89         this.userRole = userRole;
 90     }
 91     public Integer getCreatedBy() {
 92         return createdBy;
 93     }
 94     public void setCreatedBy(Integer createdBy) {
 95         this.createdBy = createdBy;
 96     }
 97     public Date getCreationDate() {
 98         return creationDate;
 99     }
100     public void setCreationDate(Date creationDate) {
101         this.creationDate = creationDate;
102     }
103     public Integer getModifyBy() {
104         return modifyBy;
105     }
106     public void setModifyBy(Integer modifyBy) {
107         this.modifyBy = modifyBy;
108     }
109     public Date getModifyDate() {
110         return modifyDate;
111     }
112     public void setModifyDate(Date modifyDate) {
113         this.modifyDate = modifyDate;
114     }
115 }
 1 @Test
 2     public void testGetUserListAddressByUserId(){
 3         SqlSession sqlSession = null;
 4         List<User> userList = new ArrayList<User>();
 5         User user=new User();
 6         try {
 7             sqlSession = MyBatisUtil.createSqlSession();
 8
 9
10             user = sqlSession.getMapper(UserMapper.class).getUserListAddressByUserID(1);
11
12         } catch (Exception e) {
13             // TODO: handle exception
14             e.printStackTrace();
15         }finally{
16             MyBatisUtil.closeSqlSession(sqlSession);
17         }
18         //去掉role类的属性是可以的
19         logger.debug("testGetUserListByRoleId roleid: " + user.getUserCode() + " and userName: " + user.getUserName()+"and userRoleName:"+11111111);
20         //这种写法控制台一行日志是输不出来的,因为用到了Role类中的属性
21         //    logger.debug("testGetUserListByRoleId roleid: " + user.getUserCode() + " and userName: " + user.getUserName()+"and userRoleName:"+user.getRole().getRoleName());
22             for(Address address: user.getAddressList()){
23                 logger.debug("testGetUserListAddressByUserId contact: " + address.getContact() + " and addressDesc: " + address.getAddressDesc()+"and tel:"+address.getTel());
24             }
25
26     }

原文地址:https://www.cnblogs.com/dongyaotou/p/12006132.html

时间: 2024-11-11 12:43:59

mybatis框架-使用resultMap实现高级结果映射,collection属性的使用的相关文章

mybatis中的resultMap 的高级映射

引用:https://www.cnblogs.com/yansum/p/5774873.html Mybatis 高级结果映射 ResultMap Association Collection 在阅读本文章时,先说几个mybatis中容易混淆的地方: 1. mybatis中的列不是数据库里的列而是查询里的列,可以是别名(如 select user_name as userName,这时column='userName' property="userName") 2.Mysql中使用自增

Mybatis框架中实现一对多关系映射

学习过Hibernate框架的伙伴们很容易就能简单的配置各种映射关系(Hibernate框架的映射关系在我的blogs中也有详细的讲解),但是在Mybatis框架中我们又如何去实现 一对多的关系映射呢? 其实很简单 首先我们照常先准备前期的环境(具体解释请  参考初识Mybatis进行增.删.改.查 blogs )这里我就直接上代码了 主配置文件:Configuration.xml <?xml version="1.0" encoding="UTF-8" ?&

MyBatis 入门到精通(三) 高级结果映射

MyBatis的创建基于这样一个思想:数据库并不是您想怎样就怎样的.虽然我们希望所有的数据库遵守第三范式或BCNF(修正的第三范式),但它们不是.如果有一个数据库能够完美映射到所有应用程序,也将是非常棒的,但也没有.结果集映射就是MyBatis为解决这些问题而提供的解决方案.例如,我们如何映射下面这条语句? [html] view plaincopy <select id="selectBlog_by_id" parameterType="int" resul

Mybatis学习第22节 -- 高级结果映射 构造方法映射

知识储备:  对于大部分编程语言的函数来说, 函数的signature是函数名和函数参数,而对于函数参数的名称, 编译器不关心. 为ShopCustom创建一个构造函数 public ShopCustom(Integer id, String shopName, String shopDesc) { this.id = id; this.shopName = shopName; this.shopDesc = shopDesc;} 为ShopMapperCustom添加一个新方法 public

【Mybatis框架】输出映射-resultType与resultMap

输出映射接下来说说有关Mapper.xml配置文件中查询标签中关于返回值类型resultType与resultMap的一些内容 1.resultType使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功.如果查询出来的列名和pojo中的属性名全部不一致,没有创建pojo对象.只要查询出来的列名和pojo中的属性有一个一致,就会创建pojo对象. 1.1输出简单类型1.1.1需求用户信息的综合查询列表总数,通过查询总数和上边用户综合查询列表才可以实

mybatis框架入门

初识mybatis 对原生jdbc程序(单独使用jdbc开发)问题总结 mybatis框架原理 mybatis入门程序 用户的增删查改 mybatis开发dao两种方法 原始dao开发方法(程序需要编写dao接口和dao实现类) mybatis的mapper接口(相当于dao接口)代理开发方法 mybatis配置文件SqlMapConfig.xml mybatis核心 mybatis输入映射 mybatis输出映射 mybatis的动态sql 第二天 订单商品的数据分析 改机映射(一对一.一对多

Mybatis框架简单使用

Mybatis框架简单使用 环境搭建 新建一个JavaWeb项目,在web\WEB-INF\创建lib文件,并且在其下添加Mybatis的核心包以及依赖包,以及Mysql驱动包,junit4测试包等. 加入配置文件 在src路径下面,新建log4j.properties文件. # Global logging configuration log4j.rootLogger=DEBUG, stdout # Console output... log4j.appender.stdout=org.apa

Mybatis 高级结果映射 ResultMap Association Collection

作者:ilovejava_2010 MyBatis的创建基于这样一个思想:数据库并不是您想怎样就怎样的.虽然我们希望所有的数据库遵守第三范式或BCNF(修正的第三范式),但它们不是.如果有一个数据库能够完美映射到所有应用程序,也将是非常棒的,但也没有.结果集映射就是MyBatis为解决这些问题而提供的解决方案.例如,我们如何映射下面这条语句? <!-- Very Complex Statement --> <select id="selectBlogDetails"

【MyBatis框架】高级映射-延迟加载

延迟加载1.什么是延迟加载 resultMap可以实现高级映射(使用association.collection实现一对一及一对多映射),association.collection具备延迟加载功能.需求:如果查询订单并且关联查询用户信息.如果先查询订单信息即可满足要求,当我们需要查询用户信息时再查询用户信息.把对用户信息的按需去查询就是延迟加载. 延迟加载:先从单表查询.需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速度要快. 2.使用association实现