mybatis 根据参数映射对应模型
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 {
//主键id
private 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());
转[ http://blog.csdn.net/wzwenhuan/article/details/36031021]
mybatis 根据参数映射对应模型的更多相关文章
- 【转载】Mybatis多参数查询映射
转载地址:http://www.07net01.com/zhishi/402787.html 最近在做一个Mybatis的项目,由于是接触不久,虽然看了一下资料,但在实际开发中还是暴 露了很多问题,其 ...
- ASP.NET Core 2.2 十九. Action参数的映射与模型绑定
前文说道了Action的激活,这里有个关键的操作就是Action参数的映射与模型绑定,这里即涉及到简单的string.int等类型,也包含Json等复杂类型,本文详细分享一下这一过程.(ASP.NET ...
- MyBatis 的 XML 映射文件使用说明
简介 文档参考地址:http://www.mybatis.org/mybatis-3/zh/index.html MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器 ...
- MyBatis传递参数
MyBatis传递参数 一.使用 map 接口传递参数 在 MyBatis 中允许 map 接口通过键值对传递多个参数,把接口方法定义为 : public List<Role> findR ...
- MyBatis实战之映射器
映射器是MyBatis最强大的工具,也是我们使用MyBatis时用得最多的工具,因此熟练掌握它十分必要.MyBatis是针对映射器构造的SQL构建的轻量级框架,并且通过配置生成对应的JavaBean返 ...
- mybatis实现继承映射
ORM 框架的优势在于能让我们利用面向对象的思维去操作数据库, hibernate 作为重量级的 ORM 框架对面向对象的支持很强大.作为半自动化的 mybatis ,对面向对象的支持也是很完备的.这 ...
- Mybatis学习—XML映射文件
总结自 Mybatis官方中文文档 Mapper XML 文件 MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同 ...
- Mybatis基于代理Dao实现CRUD操作 及 Mybatis的参数深入
Mybatis基于代理Dao实现CRUD操作 使用要求: 1.持久层接口和持久层接口的映射配置必须在相同的包下 2.持久层映射配置中mapper标签的namespace属性取值必须是持久层接口的全限定 ...
- Mybatis学习--XML映射配置文件
学习笔记,选自Mybatis官方中文文档:http://www.mybatis.org/mybatis-3/zh/configuration.html MyBatis 的配置文件包含了影响 MyBat ...
随机推荐
- etcd和redis的比较和日常使用场景
转自https://blog.csdn.net/weixin_41571449/article/details/79429511 个人观点:etcd的红火来源于kurbernetes用etcd做服务发 ...
- Java高级特性 第5节 序列化和、反射机制
一.序列化 1.序列化概述 在实际开发中,经常需要将对象的信息保存到磁盘中便于检索,但通过前面输入输出流的方法逐一对对象的属性信息进行操作,很繁琐并容易出错,而序列化提供了轻松解决这个问题的快捷方法. ...
- Java面向对象 第4节 类的多态性
一.多态的概念 在面向对象语言中,多态是指在一棵继承树中的类中可以有多个同名但不同方法体及不同形参的方法.通常有两种途径实现多态:方法的重载和覆盖. 多态性允许以统一的风格处理已存在的变量及相关的类. ...
- 1.1.25 word图片批量对齐
1.打开文件,点击[开始]>[编辑]>[替换](或ctrl+h)> \ 在[查找内容]输入^g>定位到[替换为]>[格式]>[段落]>[对齐方式|居中]> ...
- C#编程经验-选择结构和循环结构
选择结构:if elseif else ifswitch 循环结构:whiledo whilefor()foreach() 种类太多,不便记忆,人脑要记多种结构,要用的时候一种也把握不住所以,为方便记 ...
- 围绕Buganizer的产品流程
做技术的一定知道缺陷跟踪系统(bug系统),更不用说做测试的了,不过普遍都认为这系统是用来记录bug的,其实在google内部,这套系统是产品/项目围绕的核心.Google Buganizer扩展了类 ...
- unittest 出报告 并配合 jenkins,发现有用例错误,但是构建没出现红点 的解决方法
加了个 判断 测试用例总数 和 测试运行成功数 是否一致的判断,不一致 就断言失败,jenkins哪里是红点
- Lepus监控之SQLServer配置(后续整理)
1.安装pymssql模块 1-1.环境准备: 1-1-1.unixODBC安装 yum install unixODBC unixODBC-devel -y 1-1-2.freetds安装下载 fr ...
- linux git clone 指定分支
git clone -b develop http://192.168.11.11:8888/scm/git/vrmmo 指定下载develop分支
- JDK1.7 ConcurrentHashMap--解决高并发下的HashMap使用问题
高并发下也可以使用HashTable .Collections.synchronizedMap因为他们是线程安全的,但是却牺牲了性能,无论是读操作.写操作都是给整个集合加锁,导致同一时间内其他操作均为 ...