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中可以使用单表的继承映 ...
随机推荐
- python利用pysvn发布lib的小程序
背景: 本人在公司的平台部门工作,我们部门写出的代码都是编译成.a文件,定期发布版本到各个产品,现在老大要求我负责每周向公司的某个产品发布lib.发布lib的步骤大概就是自动化的兄弟给我提供一个归档的 ...
- 人工神经网络,支持任意数量隐藏层,多层隐藏层,python代码分享
http://www.cnblogs.com/bambipai/p/7922981.html------误差逆传播算法讲解 人工神经网络包含多种不同的神经网络,此处的代码建立的是多层感知器网络,代码以 ...
- 微信小程序开发之scroll-view
本文主要介绍通过scroll-view实现回至顶部,如下效果 一.页面代码 顶部的工具栏放一个查找按钮,滚动区域实现分页,目的就是为了点击上一页\下一页时,自动回到顶部. scroll-view必须指 ...
- 跨域WebApi的Jquery EasyUI的数据交互
目录 1 大概思路... 1 2 创建WebAPI 1 3 创建CrossMainController并编写... 1 4 Nuget安装microso ...
- 关于php变量的赋值和引用的区别
刚开始学习php,发现有些地方和js语法不同,所以记录下来. 这篇文章是总结php中变量赋值和引用的区别. 我们知道,js中,原始类型的赋值,是将值直接复制给变量:引用类型的赋值,是将内存地址复制给变 ...
- Linux 创建子进程执行任务
Linux 操作系统紧紧依赖进程创建来满足用户的需求.例如,只要用户输入一条命令,shell 进程就创建一个新进程,新进程运行 shell 的另一个拷贝并执行用户输入的命令.Linux 系统中通过 f ...
- Juicer模板引擎使用笔记
关于Juicer:Juicer 是一个高效.轻量的前端 (Javascript) 模板引擎,使用 Juicer 可以是你的代码实现数据和视图模型的分离(MVC). 除此之外,它还可以在 Node.js ...
- Windows数据库编程接口简介
数据库是计算机中一种专门管理数据资源的系统,目前几乎所有软件都需要与数据库打交道(包括操作系统,比如Windows上的注册表其实也是一种数据库),有些软件更是以数据库为核心因此掌握数据库系统的使用方法 ...
- windbg蓝屏调试
一般在写Windows内核程序的时候,经常会出现蓝屏的问题,这个时候一般是采用记录下dump文件然后用windbg查看得方式,具体的过程就不说了,网上一大堆的内容.现在我主要记录自己当初按照网上的方案 ...
- js实现黑客帝国文字下落效果
突然想到这个效果便想实现以下. 当然免不了要百度一下,于是查找到 http://www.cnblogs.com/myvin/p/4775152.html这篇文章, 效果可以查看博文中的给出的效果图.那 ...