1. 程式人生 > >Mybatis學習第23節 -- 鑒別器 discriminator

Mybatis學習第23節 -- 鑒別器 discriminator

flag doc util val dao test 數據庫表 coins tsql

discriminator或者叫做分類器

Vehicle類

 
package io.github.coinsjack.pojo;

import java.util.Date;

public class Vehicle {

protected Integer id;
protected String vin;
protected Date year;
protected String make;
protected String model;
protected String color;

public Vehicle() {
}

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}
}

Car繼承自Vehicle

package io.github.coinsjack.pojo;

public class Car extends Vehicle {

private Integer doorCount;

public Car() {
}

public Integer getDoorCount() {
return doorCount;
}

public void setDoorCount(Integer doorCount) {
this.doorCount = doorCount;
}

@Override
public String toString() {
return "Car{" +
"doorCount=" + doorCount +
", id=" + id +
", vin=‘" + vin + ‘\‘‘ +
", year=" + year +
", make=‘" + make + ‘\‘‘ +
", model=‘" + model + ‘\‘‘ +
", color=‘" + color + ‘\‘‘ +
‘}‘;
}
}

Suv繼承自Vehicle

package io.github.coinsjack.pojo;

public class Suv extends Vehicle{

private Boolean allWheelDriveFlag;

public Suv() {
}
public Boolean getAllWheelDriveFlag() {
return allWheelDriveFlag;
}
public void setAllWheelDriveFlag(Boolean allWheelDriveFlag) {
this.allWheelDriveFlag = allWheelDriveFlag;
}
@Override
public String toString() {
return "Suv{" +
"allWheelDriveFlag=" + allWheelDriveFlag +
", id=" + id +
", vin=‘" + vin + ‘\‘‘ +
", year=" + year +
", make=‘" + make + ‘\‘‘ +
", model=‘" + model + ‘\‘‘ +
", color=‘" + color + ‘\‘‘ +
‘}‘;
}
}
數據庫表字段
id int(11) NO PRI auto_increment
vin varchar(50) YES
year year(4) YES
make varchar(50) YES
model varchar(20) YES
color varchar(20) YES
vehicle_type int(11) YES
door_count int(11) YES
all_wheel_drive tinyint(1) YES
通過vehicle_type判斷是Car還是Suv, 就需要用到discriminator

VehicleMapper映射文件

<?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="io.github.coinsjack.dao.VehicleMapper">

<resultMap id="vehicleResultMap" type="Vehicle">
<id column="id" property="id"/>
<id column="vin" property="vin"/>
<id column="year" property="year"/>
<id column="make" property="make"/>
<id column="model" property="model"/>
<id column="color" property="color"/>
<discriminator javaType="int" column="vehicle_type">
<case value="1" resultType="Car">
<result column="door_count" property="doorCount"/>
</case>
<case value="2" resultType="Suv">
<result column="all_wheel_drive" property="allWheelDriveFlag"/>
</case>
</discriminator>
</resultMap>

<select id="getVehicleById" resultMap="vehicleResultMap">
select * from tb_vehicle
WHERE `id` = #{id};
</select>
</mapper>

測試

@Test
public void testGetVehicleById() {
SqlSession sqlSession = MyBatisUtil.getSqlSession();
VehicleMapper vehicleMapper= sqlSession.getMapper(VehicleMapper.class);

System.out.printf("查詢結果: %s%n", vehicleMapper.getVehicleById(5));;
System.out.printf("查詢結果: %s%n", vehicleMapper.getVehicleById(6));;
}

測試結果

2018-12-29 17:38:29,567 [main] DEBUG [io.github.coinsjack.dao.VehicleMapper.getVehicleById] - ==> Preparing: select * from tb_vehicle WHERE `id` = ?;
2018-12-29 17:38:29,677 [main] DEBUG [io.github.coinsjack.dao.VehicleMapper.getVehicleById] - ==> Parameters: 5(Integer)
2018-12-29 17:38:29,750 [main] DEBUG [io.github.coinsjack.dao.VehicleMapper.getVehicleById] - <== Total: 1
查詢結果: Car{doorCount=4, id=5, vin=‘2627159999‘, year=Mon Jan 01 08:00:00 CST 2018, make=‘IDEA‘, model=‘DA-20‘, color=‘Black‘}
2018-12-29 17:38:29,762 [main] DEBUG [io.github.coinsjack.dao.VehicleMapper.getVehicleById] - ==> Preparing: select * from tb_vehicle WHERE `id` = ?;
2018-12-29 17:38:29,763 [main] DEBUG [io.github.coinsjack.dao.VehicleMapper.getVehicleById] - ==> Parameters: 6(Integer)
2018-12-29 17:38:29,804 [main] DEBUG [io.github.coinsjack.dao.VehicleMapper.getVehicleById] - <== Total: 1
查詢結果: Suv{allWheelDriveFlag=false, id=6, vin=‘2627159998‘, year=Mon Jan 01 08:00:00 CST 2018, make=‘IDEA‘, model=‘AA-19‘, color=‘Pink‘}

Mybatis學習第23節 -- 鑒別器 discriminator