mybatis discriminator 鉴定器
http://www.tuicool.com/articles/I7rQBnB
ORM 框架的优势在于能让我们利用面向对象的思维去操作数据库,hibernate作为重量级的 ORM 框架对面向对象的支持很强大。作为半自动化的 mybatis,对面向对象的支持也是很完备的。这篇文章就来讨论一下如何利用mybatis
实现继承映射。
类图
有一个机动车父类,它有两个子类: Car 和 Bus
关系模型 (t_vehicle)
ORM 映射有一个原则:对象模型细粒度,关系模型粗粒度。所以我们将所有的车都存储一张表里(t_vehicle),通过鉴别字段 vType 来区分车的类型( "c" 代表 Car , "b" 代表 Bus )
三个实体类的代码
Vehicle
package com.tgb.mybatis.model;public class Vehicle {//主键idprivate String id;//车的名字private String name;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}}
Car
package com.tgb.mybatis.model;public class Car extends Vehicle {//车门的数量private int carDoor;//车的牌子private String band;public int getCarDoor() {return carDoor;}public void setCarDoor(int carDoor) {this.carDoor = carDoor;}public String getBand() {return band;}public void setBand(String band) {this.band = band;}}
Bus
package com.tgb.mybatis.model;public class Bus extends Vehicle {//公共汽车的容量private int capacity;public int getCapacity() {return capacity;}public void setCapacity(int capacity) {this.capacity = capacity;}}
看看对“车”进行操作的 Mapper 接口【只关注查询】
package com.tgb.mybatis.data;import com.tgb.mybatis.model.Bus;
import com.tgb.mybatis.model.Car;
import com.tgb.mybatis.model.Vehicle;public interface VehicleMapper {//根据id查询机动车Vehicle getVechicleById(String id);//根据名字查询小汽车Car getCarByName(String name);
}
xml 方式 ORM 映射
<?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.tgb.mybatis.data.VehicleMapper"><select id="getVechicleById" resultMap="vehicleMap">SELECT * FROM TB_VEHICLE WHERE VID = #{id}</select><select id="getCarByName" resultMap="vehicleMap">SELECT * FROM TB_VEHICLE WHERE VTYPE='c' AND VName = #{id}</select><resultMap type="vehicle" id="vehicleMap"><id property="id" column="vId"/><result property="name" column="vName"/><discriminator javaType="string" column="vType"><case value="c" resultType="car"><result property="carDoor" column="cardoor"/><result property="band" column="band"/></case><case value="b" resultType="bus"><result property="capacity" column="capacity"/></case></discriminator></resultMap> </mapper>
分析
其中最为关键的就是<discriminator > 标签中的内容,根据鉴别字段的值自动映射成对应的子类
客户端测试代码
VehicleMapper mapper = session.getMapper(VehicleMapper.class); Vehicle vehicle = mapper.getVechicleById("1"); System.out.println(vehicle.getName()); Car car = mapper.getCarByName("路虎007"); System.out.println(car.getBand());
很简单的一个例子,和大家分享一下
mybatis discriminator 鉴定器相关推荐
- Mybatis resultMap discriminator(鉴定器) 实操
文章目录 实体对象 Mapper 文件配置 测试用例 接口调用响应 数据库数据 数据库表结构 实体对象 @Data public class SysUser {private Long id;priv ...
- Mybatis Interceptor 拦截器原理 源码分析
Mybatis采用责任链模式,通过动态代理组织多个拦截器(插件),通过这些拦截器可以改变Mybatis的默认行为(诸如SQL重写之类的),由于插件会深入到Mybatis的核心,因此在编写自己的插件前最 ...
- mybatis使用拦截器显示sql,使用druid配置连接信息
mybatis使用拦截器显示sql,使用druid配置连接信息 mybatis sql Druid 1.显示出sql内容: 新建2个类: MybatisInterceptor :拦截sql,并获得输出 ...
- ExifTool文件鉴定器
ExifTool文件鉴定器 ExifTool常被拿来做照片信息读取,也可对任意文件进行读取 官方源码下载地址:https://metacpan.org/release/Image-ExifTool 普 ...
- Mybatis 通过拦截器动态修改SQL
01 使用场景 当我们在多租户的项目中,编写SQL语句都要带上tenant字段,用于区分不同的租户只能操作自己的数据. 比如,像下面的SQL select * from member where id ...
- mybatis 自定义拦截器
拦截器注解 mybatis自定义拦截器实现步骤: 实现org.apache.ibatis.plugin.Interceptor接口. 添加拦截器注解org.apache.ibatis.plugin.I ...
- 一步步教你mybatis分页,mybatis分页拦截器 使用,mybatis拦截器分页
mybatis 分页详解.mybatis分页查询,mybatis分页拦截器使用.struts2下mybatis分页 mybatis默认是支持分页的,内部通过创建可滚动的Result ...
- 分享一个U盘容量鉴定软件 360u盘鉴定器
分享一个U盘容量鉴定软件 360u盘鉴定器 ,官方提取出来的.很小的软件,携带方便,只有1.9M. 也可以鉴定其它U盘,点下图箭头处. 下载地址为:http://www.400gb.com/fil ...
- mybatis学习(54):鉴定器
数据库表 数据库叫blog_gp1701 author表 数据 blog表 数据 comment表 数据 post表 数据 vechcle 目录结构 jar包导入 先给对应的jar包导入 建立一个ju ...
- 【MyBatis】 ---- 映射器(接口+XML文件)
目录 一. 配置元素 1. select元素 2. insert元素 3. sql元素 4. resultMap元素 5. resultMap元素中的级联 (代码github) 一.映射器的配置元素 ...
最新文章
- 在HTML5 localStorage中存储对象
- Session,Cookie,jsessionid,Url重写
- 【渝粤题库】陕西师范大学200671 电子技术基础
- node.js 将文件目录读取 通过匿名函数自执行 将异步改为同步
- Python中的openpyxl如何对excel修改文件
- 【java】我工作三年了,该懂并发了!
- 10.N个整数中查找是否相加为K[深度搜索]
- Flutter进阶—创建有状态控件
- GBDT原理及利用GBDT构造新的特征-Python实现
- 如何使用jQuery将事件附加到动态HTML元素? [重复]
- labelme批量转换json
- android cpu降温代码,Android手机CM设置中CPU模式解释
- .Net framework 3.5缺失解决
- IPv4 至 IPv6改造过渡方案
- [灯哥开源—四足机器人]程序算法讲解与STM32移植——运行框架(两个主线程)
- Python —— 数据科学的手段 (第2版)配套代码
- 金蝶迷你版所有数据引出excel没有反应,如何处理
- android 微信分享多张图片大小,Android 关于微信分享图片过大失败的解决方案
- win10 蓝牙无法删除 完美解决方案
- Android:视频播放器dkplayer