mybatis中的resultType和resultMap的用法与区别

通常我们在配置mybatis的映射文件的时候,经常会用到resultType和resultMap这两个参数。在这里我详细介绍一下两者的用法。
resultType相信大家都很熟悉了,它其实就是映射我们sql结果集返回的java对象。比如你查询用户表:select * from user;在这里其实返回的就是我们的User对象。

resultmap则是负责字段映射的。比如我们java对象中属性和数据库中的字段不匹配时,就可以通过resultmap建立映射关系。但是如果你以为resultmap就只是负责字段映射的话,你就错了。有时候我们需要进行关联查询,这时候我们resultmap就能发挥作用了。
比如我要查询某个部门下面的所有员工,这就是一个一对多的关联查询。这时候我们就需要用到resultmap了。
在我们的映射文件中做如下配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
	PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lp.mybatis.pojo.DepartmentMapper">
	
	<!--type代表返回的对象类型  -->
	<resultMap type="Department" id="departRM">
		<!-- id为主键 ,result为普通属性-->
		<id property="id" column="id"/>
		<result property="departmentName" column="department_name"/>
		<result property="employName" column="employ_name"/>
		
		<!--一对多查询使用collection  property代表pojo中的对象属性,ofType代表返回的类型 -->
		<collection property="users" ofType="User">
		<!-- 上面的主键名称和下面的主键名称不能重复,不然只能查询出对多的一条数据>
			<id property="id" column="user_id"/>
			<result property="username" column="username"/>
			<result property="password" column="password"/>
			<result property="email" column="email"/>
			<result property="departmentId" column="department_id"/>			
		</collection>
	</resultMap>
	<select id="get" parameterType="Integer" resultMap="departRM">
select d.id,d.department_name,d.employ_name,u.id as user_id ,u.username,u.password,u.department_id,u.email from t_department d LEFT JOIN t_user u on d.id=u.department_id WHERE d.id=#{id};
	</select>
</mapper>




pojo中的实体文件

package com.lp.mybatis.pojo;

import java.util.List;

public class Department {

	private Integer id;
	private String departmentName;
	private String employName;
	private List<User> users;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getDepartmentName() {
		return departmentName;
	}
	public void setDepartmentName(String departmentName) {
		this.departmentName = departmentName;
	}
	public String getEmployName() {
		return employName;
	}
	public void setEmployName(String employName) {
		this.employName = employName;
	}
	@Override
	public String toString() {
		return "Department [id=" + id + ", departmentName=" + departmentName + ", employName=" + employName + ", users="
				+ users + "]";
	}
	
}

这里department的pojo对象封装了List<User//>,因为返回的是多个员工

@Test
	public void TestDepartment() {
		SqlSession session = factory.openSession();
		DepartmentMapper deMapper = session.getMapper(DepartmentMapper.class);
		Department department = deMapper.get(2);
		System.out.println(department);
	}

结果输出

Department [id=2, departmentName=实施部, companyName=谷雨, users=[User [id=5, username=刘鹏, password=1234, departmentId=2, email=test@.cn], User [id=6, username=刘明, password=123, departmentId=2, email=test@.cn]]]

这是一对多的关联查询,还有一对一的关联查询我就不赘述了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值