mybatis resultType和resultMap的区别和使用场景

1.resultType

从这条语句中返回的期望类型的类的完全限定名或别名。 注意如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身。可以使用 resultType 或 resultMap,但不能同时使用。

例如:

1.student实体类

package com.generic.feng.modules.student.entity;

import java.util.List;

import org.hibernate.validator.constraints.Length;

import com.generic.feng.common.entity.DataEntity;
import com.generic.feng.modules.sys.entity.Office;


/**
 * 学生管理Entity
 * @author gsl
 * @version 2018-10-09
 */
public class Student extends DataEntity<Student> {
	
	private static final long serialVersionUID = 1L;
	private String studentName;		// 学生姓名
	private String studentNo;		// 学生编号
	private String phoneNumber;		// 手机号
	private Office office;		// 部门id
	private String officeId;		// 部门id
	private List<String> list;
	private String roleId;
	
	
	
	public String getRoleId() {
		return roleId;
	}

	public void setRoleId(String roleId) {
		this.roleId = roleId;
	}

	public List<String> getList() {
		return list;
	}

	public void setList(List<String> list) {
		this.list = list;
	}

	public String getOfficeId() {
		return officeId;
	}

	public void setOfficeId(String officeId) {
		this.officeId = officeId;
	}

	public Student() {
		super();
	}

	public Student(String id){
		super(id);
	}

	@Length(min=0, max=255, message="学生姓名长度必须介于 0 和 255 之间")
	public String getStudentName() {
		return studentName;
	}

	public void setStudentName(String studentName) {
		this.studentName = studentName;
	}
	
	@Length(min=0, max=255, message="学生编号长度必须介于 0 和 255 之间")
	public String getStudentNo() {
		return studentNo;
	}

	public void setStudentNo(String studentNo) {
		this.studentNo = studentNo;
	}
	
	@Length(min=0, max=255, message="手机号长度必须介于 0 和 255 之间")
	public String getPhoneNumber() {
		return phoneNumber;
	}

	public void setPhoneNumber(String phoneNumber) {
		this.phoneNumber = phoneNumber;
	}
	
	public Office getOffice() {
		return office;
	}

	public void setOffice(Office office) {
		this.office = office;
	}
	
}

2.mapper.xml

<sql id="studentColumns">
    a.id AS "id",
	a.student_name AS "studentName",
	a.student_no AS "studentNo",
	a.phone_number AS "phoneNumber",
	a.office_id AS "office.id",
	a.create_by AS "createBy.id",
	a.create_date AS "createDate",
	a.update_by AS "updateBy.id",
	a.update_date AS "updateDate",
	a.remarks AS "remarks",
	a.del_flag AS "delFlag",
	o5.name AS "office.name"
</sql>

<sql id="studentJoins">
	LEFT JOIN sys_office o5 ON o5.id = a.office_id
</sql>
<select id="findList" resultType="Student">
	SELECT 
	<include refid="studentColumns"/>
	FROM student a
	<include refid="studentJoins"/>
</select>

如果数据库的字段和POJO里面的属性不匹配,则可以使用别名来进行映射。如果两者一样就不需要设置别名。

2.resultMap

resultMap 元素是 MyBatis 中最重要最强大的元素。它可以让你从 90% 的 JDBC ResultSets 数据提取代码中解放出来,并在一些情形下允许你进行一些 JDBC 不支持的操作。实际上,在为一些比如连接的复杂语句编写映射代码的时候,一份 resultMap 能够代替实现同等功能的长达数千行的代码。ResultMap 的设计思想是,对于简单的语句根本不需要配置显式的结果映射,而对于复杂一点的语句只需要描述它们的关系就行了。

例子

1.teacher实体类

package com.ruoyi.system.domain;

import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.core.domain.BaseEntity;

/**
 * 老师基础表 sys_teacher
 * 
 * @author ruoyi
 * @date 2019-07-02
 */
public class Teacher extends BaseEntity
{
	private static final long serialVersionUID = 1L;
	
	/** 老师主键id */
	private String teacherId;
	/** 老师姓名 */
	private String teacherName;
	/** 老师年龄 */
	private Integer teacherAge;
	/** 删除标志(0代表存在 2代表删除) */
	private String delFlag;

	public void setTeacherId(String teacherId) 
	{
		this.teacherId = teacherId;
	}

	public String getTeacherId() 
	{
		return teacherId;
	}
	public void setTeacherName(String teacherName) 
	{
		this.teacherName = teacherName;
	}

	public String getTeacherName() 
	{
		return teacherName;
	}
	public void setTeacherAge(Integer teacherAge) 
	{
		this.teacherAge = teacherAge;
	}

	public Integer getTeacherAge() 
	{
		return teacherAge;
	}
	public void setDelFlag(String delFlag) 
	{
		this.delFlag = delFlag;
	}

	public String getDelFlag() 
	{
		return delFlag;
	}

    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("teacherId", getTeacherId())
            .append("teacherName", getTeacherName())
            .append("teacherAge", getTeacherAge())
            .append("delFlag", getDelFlag())
            .append("createBy", getCreateBy())
            .append("createTime", getCreateTime())
            .append("updateBy", getUpdateBy())
            .append("updateTime", getUpdateTime())
            .append("remark", getRemark())
            .toString();
    }
}

2.mapper.xml

<resultMap type="Teacher" id="TeacherResult">
   <result property="teacherId"    column="teacher_id"    />
   <result property="teacherName"    column="teacher_name"    />
   <result property="teacherAge"    column="teacher_age"    />
   <result property="delFlag"    column="del_flag"    />
   <result property="createBy"    column="create_by"    />
   <result property="createTime"    column="create_time"    />
   <result property="updateBy"    column="update_by"    />
   <result property="updateTime"    column="update_time"    />
   <result property="remark"    column="remark"    />
</resultMap>
 <select id="selectTeacherList" parameterType="Teacher" resultMap="TeacherResult">
        <include refid="selectTeacherVo"/>
        <where>  
            <if test="teacherId != null  and teacherId != '' "> and teacher_id = #{teacherId}</if>
             <if test="teacherName != null  and teacherName != '' "> and teacher_name = #{teacherName}</if>
             <if test="teacherAge != null "> and teacher_age = #{teacherAge}</if>
             <if test="delFlag != null  and delFlag != '' "> and del_flag = #{delFlag}</if>
             <if test="createBy != null  and createBy != '' "> and create_by = #{createBy}</if>
             <if test="createTime != null "> and create_time = #{createTime}</if>
             <if test="updateBy != null  and updateBy != '' "> and update_by = #{updateBy}</if>
             <if test="updateTime != null "> and update_time = #{updateTime}</if>
             <if test="remark != null  and remark != '' "> and remark = #{remark}</if>
         </where>
    </select>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值