Mybatis——鉴别器映射

鉴别器映射

有时一个单独的数据库查询会返回很多种不同数据类型的结果集。

discriminator鉴别器元素可以用来处理这种情况

数据库表结构 

 

创建实体类、映射接口和映射文件 
实体类employee
package org.example.demo2;

import lombok.Data;

@Data
public class Employee {
    private Integer employeeId;
    private String employeeName;
}
 实体类HourlyEmployee
package org.example.demo2;

import lombok.Data;

@Data
public class HourlyEmployee extends Employee{
    private Double rate;
}
 实体类SalaryEmployee
package org.example.demo2;

import lombok.Data;

@Data
public class SalaryEmployee extends Employee{
    private Double salary;
}
 EmployeeMapper
package org.example.mapper;

import org.example.demo2.Employee;

public interface EmployeeMapper {
    Employee findEmployeeById(Integer employeeId);
}
EmployeeMapper.xml 

使用resultMap的extends属性来映射两个子类的属性

使用discriminator元素映射employee_type字段

discriminator元素常用的两个属性如下:

column:该属性用于设置需要进行鉴别比较值的列

javaType:该属性用于指定列的类型

discriminator元素可以有1个或者多个case子元素,case元素包含三个属性

value:该值用来匹配column指定字段的值

resultMap:当value值和column的值匹配时的结果映射,优先级高于resultType

resultType:当value值和column的值匹配时的结果类型

<?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="org.example.mapper.EmployeeMapper">
    <resultMap id="employeeMap" type="org.example.demo2.Employee">
        <id property="employeeId" column="employee_id"/>
        <result property="employeeName" column="employee_name"/>
    </resultMap>

    <resultMap id="hourlyMap" type="org.example.demo2.HourlyEmployee" extends="employeeMap">
        <result property="rate" column="rate"/>
    </resultMap>

    <resultMap id="salaryMap" type="org.example.demo2.SalaryEmployee" extends="employeeMap">
        <result property="salary" column="salary"/>
    </resultMap>

    <resultMap id="selectMap" type="org.example.demo2.Employee">
        <discriminator javaType="String" column="employee_type">
            <case value="HE" resultMap="hourlyMap"></case>
            <case value="SE" resultMap="salaryMap"></case>
        </discriminator>
    </resultMap>

    <select id="findEmployeeById" resultMap="selectMap">
        select * from t_employee where employee_id = #{employeeId};
    </select>
</mapper>
 测试类

 

package org.example;

import org.apache.ibatis.session.SqlSession;
import org.example.demo.Order;
import org.example.demo.User;
import org.example.demo2.Employee;
import org.example.demo2.SalaryEmployee;
import org.example.mapper.EmployeeMapper;
import org.example.mapper.UserMapper;
import org.example.utils.MybatisUtil;

import java.util.List;

public class test {
    public static void main(String[] args) {
        test test1 = new test();
        test1.selectAllEmployee();
    }

    public void selectAllEmployee() {
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);

        SalaryEmployee salary = (SalaryEmployee) mapper.findEmployeeById(2);
        System.out.println(salary.getSalary());

        sqlSession.close();
    }
}

 

 

 

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值