mybatis_SQL映射(4)鉴别器
摘录自:http://blog.csdn.net/y172158950/article/details/17505739
鉴别器:有时一个单独的数据库查询也许返回很多不同(但是希望有些关联)数据类型的结果集。鉴别器元素就是被设计来处理这个情况的,还有包括类的继承层次结构。[抄了一个定义,不是很理解,还是看例子吧]
1. 交通工具表vehicle
- create table test.vehicle (
- id bigint(10) primary key AUTO_INCREMENT,
- vin varchar(10),
- year date,
- color varchar(10),
- vendor varchar(10),
- vehicle_type int, //类型:1表示car, 2表示boat
- door_count int, //车门数量,car独有属性
- quant varchar(10) //船桨,boat独有属性
- );
2. java对应的实体类Vehicle,Car,Boat
- package com.yjq.entity;
- import java.sql.Date;
- public class Vehicle {
- private int id;
- private String vin; //交通登记号码
- private Date year;
- private String color;
- private String vendor;
- private int vehicleType;
- public Vehicle() {
- }
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getVin() {
- return vin;
- }
- public void setVin(String vin) {
- this.vin = vin;
- }
- public Date getYear() {
- return year;
- }
- public void setYear(Date year) {
- this.year = year;
- }
- public String getColor() {
- return color;
- }
- public void setColor(String color) {
- this.color = color;
- }
- public String getVendor() {
- return vendor;
- }
- public void setVendor(String vendor) {
- this.vendor = vendor;
- }
- public int getVehicleType() {
- return vehicleType;
- }
- public void setVehicleType(int vehicleType) {
- this.vehicleType = vehicleType;
- }
- }
- <p>package com.yjq.entity;</p><p>public class Car extends Vehicle {
- private int doorCount;</p><p> public Car() {
- }</p><p> public int getDoorCount() {
- return doorCount;
- }</p><p> public void setDoorCount(int doorCount) {
- this.doorCount = doorCount;
- }
- }
- </p>
- package com.yjq.entity;
- public class Boat extends Vehicle {
- private String quant; //船桨
- public Boat() {
- }
- public String getQuant() {
- return quant;
- }
- public void setQuant(String quant) {
- this.quant = quant;
- }
- }
3. 如何将查询结果映射为不同的对象呢?鉴别器登场
- <?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.yjq.entity.Vehicle">
- <resultMap id="vehicleResult" type="Vehicle">
- <id property="id" column="id" />
- <result property="vin" column="vin"/>
- <result property="year" column="year"/>
- <result property="vendor" column="vendor"/>
- <result property="color" column="color"/>
- <result property="vehicleType" column="vehicle_type"/>
- <discriminator javaType="int" column="vehicle_type">
- <case value="1" resultMap="carResult"/>
- <case value="2" resultMap="boatResult"/>
- </discriminator>
- </resultMap>
- <resultMap id="carResult" type="Car">
- <result property="vehicleType" column="vehicle_type"/>
- <result property="doorCount" column="door_count" />
- </resultMap>
- <resultMap id="boatResult" type="Boat">
- <result property="vehicleType" column="vehicle_type"/>
- <result property="quant" column="quant" />
- </resultMap>
- <select id="selectVehicle" parameterType="int" resultMap="vehicleResult">
- select * from vehicle where id =#{id};
- </select>
- </mapper>
4. 表中的数据
5. dao代码,看看查询效果
- package com.yjq.dao;
- import org.apache.ibatis.session.SqlSession;
- import com.yjq.db.DbFactory;
- import com.yjq.entity.Boat;
- import com.yjq.entity.Car;
- import com.yjq.entity.Vehicle;
- public class VehicleDao {
- public Vehicle selectVehicleById(int id) {
- SqlSession session = DbFactory.getInstance().openSession();
- Vehicle vehicle = (Vehicle) session.selectOne("com.yjq.entity.Vehicle.selectVehicle", id);
- session.commit();
- session.close();
- return vehicle;
- }
- public static void print(Vehicle v) {
- if(v instanceof Car) {
- Car c = (Car)v;
- System.out.println("Car: [id=" + c.getId() + ", vehicleType="
- + c.getVehicleType() + ", doorCount=" + c.getDoorCount() + "]");
- } else if (v instanceof Boat) {
- Boat b = (Boat)v;
- System.out.println("Boat: [id=" + b.getId() + ", vehicleType="
- + b.getVehicleType() + ", quant=" + b.getQuant() + "]");
- } else {
- System.out.println("Vehicle: [id=" + v.getId() + ", vehicleType="
- + v.getVehicleType() + "]");
- }
- }
- public static void main(String[] args) {
- VehicleDao dao = new VehicleDao();
- Vehicle v1 = dao.selectVehicleById(1);
- Vehicle v2 = dao.selectVehicleById(2);
- Vehicle v3 = dao.selectVehicleById(3);
- VehicleDao.print(v1);
- VehicleDao.print(v2);
- VehicleDao.print(v3);
- }
- }
- //output
- Car: [id=1, vehicleType=1, doorCount=4]
- Boat: [id=2, vehicleType=2, quant=lxj]
- Vehicle: [id=3, vehicleType=3]
mybatis_SQL映射(4)鉴别器的更多相关文章
- mybatis_SQL映射(1)
文章摘录自:http://blog.csdn.net/y172158950/article/details/17258377 1. select的映射 <select id="sele ...
- mybatis_SQL映射(3)
文章摘录自:http://blog.csdn.net/y172158950/article/details/17304645 1. 表关联 a) 嵌套查询(传说中的1+N问题) <resultM ...
- mybatis_SQL映射(2)
文章摘录自:http://blog.csdn.net/y172158950/article/details/17258377 1. sql的重用:定义一个sql片段,可在任何SQL语句中重用该片段. ...
- [Deep-Learning-with-Python]GAN图片生成
GAN 由Goodfellow等人于2014年引入的生成对抗网络(GAN)是用于学习图像潜在空间的VAE的替代方案.它们通过强制生成的图像在统计上几乎与真实图像几乎无法区分,从而能够生成相当逼真的合成 ...
- 阿里P7终于讲完了JDK+Spring+mybatis+Dubbo+SpringMvc+Netty源码
前言 这里普及一下,每个公司都有职别定级系统,阿里也是,技术岗以 P 定级,一般校招 P5, 社招 P6 起.其实阅读源码也是有很多诀窍的,这里分享几点心得: 首先要会用.你要知道这个库是干什么的,掌 ...
- MyBatis从入门到精通(十三):使用discriminator鉴别器映射
最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 本篇博客主要讲解鉴别器映射discri ...
- Mybatis3.1-[tp_36-37]-_映射文件_select_resultMap关联查询__分步查询传递多列值&fetchType_discriminator鉴别器
_分步查询传递多列值&fetchType_discriminator鉴别器 笔记要点出错分析与总结 Department.java bean public class Department { ...
- NHibernate之映射文件配置说明
NHibernate之映射文件配置说明 1. hibernate-mapping 这个元素包括以下可选的属性.schema属性,指明了这个映射所引用的表所在的schema名称.假若指定了这个属性, 表 ...
- hibernate笔记--继承映射关系的三种实现方式
单表继承映射(一张表): 假设我们现在有三个类,关系如下: Person类有两个子类Student和Teacher,并且子类都具有自己独有的属性.这种实体关系在hibernate中可以使用单表的继承映 ...
随机推荐
- 讲述Sagit.Framework解决:双向引用导致的IOS内存泄漏(中)- IOS不为人知的Bug
前言: 话说昨晚还是前晚,写了一篇:讲述Sagit.Framework解决:双向引用导致的IOS内存泄漏(上) 文章写到最后时,多了很多莫名奇妙的问题!!! 为了解决了这些莫名奇妙的问题,我又战斗了2 ...
- jQuery 事件方法(二)
方法 描述 bind() 向匹配元素附加一个或更多事件处理器 blur() 触发.或将函数绑定到指定元素的 blur 事件 change() 触发.或将函数绑定到指定元素的 change 事件 cli ...
- 简易排水简车的制作 TurnipBit 系列教程
准备工作 ü TurnipBit 开发板 1块 ü 下载数据线 1条 ü 微型步进电机(28BYJ-48) 1个 ü 步进电机驱动板(ULN2003APG) 1块 ü TurnipBit 扩展板 ...
- JavaWeb项目中获取对Oracle操作时抛出的异常错误码
最近在项目中碰到了这么一个需求,一个JavaWeb项目,数据库用的是Oracle.业务上有一个对一张表的操作功能,当时设置了两个字段联合的唯一约束.由于前断没有对重复字段的校验,需要在插入时如果碰到唯 ...
- 基于IndexedDB实现简单文件系统
现在的indexedDB已经有几个成熟的库了,比如西面这几个,任何一个都是非常出色的. 用别人的东西好处是上手快,看文档就好,要是文档不太好,那就有点尴尬了. dexie.js :A Minimali ...
- icon图标和文字整体居中在button按钮
icon图标和文字整体居中在button按钮 icon图标和文字整体居中 一般我们常做的button按钮是文字居中 现在这个需要icon图标和文字一起居中在背景色 <a href="# ...
- SQL Server 审计操作概念
概述 对于一般的数据库系统审计可能不太会被重视,但是对于金融系统就不一样的.金融系统对审计要求会很高,除了了记录数据库各种操作记录还可能会需要开发报表来呈现这些行为数据.使用SQL Server Au ...
- onoffswitch-checkbox
@foreach (EmailSubscription es in Model) { if(true){ <div class="onoffswitch"> ...
- JAVA处理Http请求(GET,POST)
本文用的是java.net里面的方法,HttpClient也可以. java.net.HttpURLConnection java.net.URL 1. GET public static Strin ...
- 【读书笔记】【深入理解ES6】#7-Set集合和Map集合
ES6新标准中将Set集合和Map集合添加到JS中. ES5中Set集合和Map集合 在ES5中,开发者们用对象属性来模拟这两种集合. var set = Object.create(null); s ...