继承映射介绍-iBATIS supports inheritance hierarchies by using a special mapping called a discriminator. Using a discriminator you can determine the type of class to be instantiated based on a value in the database. The discriminator is a part of the ResultMap and works much like a switch statement.
问题:对于Manager和Developer来说,他们都是Employee类的子类,且都有自己特殊的属性,Manager有managerId和info属性,developer有developerId和project属性。在使用IBATIS查询一批Employee类时,如何通过自动映射通过判断Employee_type取得他们各自的属性?
1、pojo beans
2、sqlMap
<sqlMap namespace="Employee">
<typeAlias alias="Employee" type="model.Employee" />
<resultMap id="resultEmployee" class="Employee">
<result property="id" column="id" />
<result property="name" column="name" />
<discriminator javaType="int" column="employee_type">
<subMap value="1" resultMap="managerMap" />
<subMap value="2" resultMap="developerMap" />
</discriminator>
<!-- 如果employee_type的值是1,则对应managerMap的映射。如果是2,则对应developerMap的映射。-->
</resultMap>
<resultMap id="managerMap" class="model.Manager" extends="resultEmployee">
<result property="managerId" column="manager_id" />
<result property="info" column="info" />
</resultMap>
<resultMap id="developerMap" class="model.Developer" extends="resultEmployee">
<result property="developerId" column="developer_id" />
<result property="project" column="product" />
</resultMap>
<select id="getAllEmployees" resultMap="resultEmployee">
SELECT id, name ,employee_type, manager_id, info, developer_id,
product FROM employee E left join manager M on M.employee_id =
E.id left join developer D on D.employee_id = E.id
</select>
</sqlMap>
3、test code
public class TestSqlMap {
private static SqlMapClient sqlMapClient = null;
@Before
public void loadFile() {
String resource = "sqlMap/sql-map-config.xml";
try {
Reader reader = Resources.getResourceAsReader(resource);
sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
reader.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
public void testSql(){
try {
List<Employee> list = sqlMapClient.queryForList("getAllEmployees",null);
for (Employee employee : list){
System.out.println(employee.toString());
}
assertEquals(5, list.size());
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
4、test result:
Employee ID = 1 Name = Kate Manager ID = 1 Info = info Kate
Employee ID = 4 Name = James Manager ID = 2 Info = info James
Employee ID = 5 Name = Susan Developer ID = 3 Project = web
Employee ID = 2 Name = Josh Developer ID = 1 Project = web
Employee ID = 3 Name = Peter Developer ID = 2 Project = desktop
修改sqlMap,去掉managerMap的extends="resultEmployee"和developerMap的extends="resultEmployee" :
Employee ID = 0 Name = null Manager ID = 1 Info = info Kate
Employee ID = 0 Name = null Manager ID = 2 Info = info James
Employee ID = 0 Name = null Developer ID = 3 Project = web
Employee ID = 0 Name = null Developer ID = 1 Project = web
Employee ID = 0 Name = null Developer ID = 2 Project = desktop
5、在以上的例子中,子映射(sub map)对应这标准的结果映射,如果discriminator 找到了一个值去匹配subMap ,则父结果集的映射将失效,参加第四点的修改后的输出,除非子映射明确的扩展了父映射(extends)。
如果discriminator 找不到值去匹配subMap,则使用父结果映射:
Employee ID = 1 Name = Kate
Employee ID = 4 Name = James
Employee ID = 5 Name = Susan
Employee ID = 2 Name = Josh
Employee ID = 3 Name = Peter
- 大小: 6.5 KB
分享到:
相关推荐
在Java开发中,Maven和iBatis是两个非常重要的工具。Maven是一个项目管理和综合工具,它帮助开发者管理依赖、构建项目,并提供了一种标准化的项目结构。而iBatis则是一个SQL映射框架,它将SQL语句与Java代码分离,...
Spring MVC 和 iBatis 是两个在 Java Web 开发中广泛使用的框架。Spring MVC 作为 Model-View-Controller 模式的实现,负责处理用户请求并返回响应,而 iBatis 则是一个轻量级的持久层框架,它简化了 SQL 的操作。在...
在映射文件中,iBATIS提供了强大的映射机制,比如自动类型转换、结果集嵌套处理、自动生成主键等。例如,和可以将查询结果的列名映射到Java对象的属性上,<discriminator>元素可以根据特定列的值来决定如何映射结果...
根据提供的文件信息,我们可以从中提炼出与ibatis及其Example特性相关的知识点。以下是对这些知识点的详细阐述: ### 1. **ibatis简介** ibatis(现称为MyBatis)是一种支持普通SQL查询、存储过程及高级映射的优秀...
在Java Web开发中,iBATIS(现在被称为MyBatis)是一个流行的持久层框架,它提供了灵活的SQL映射机制,使得开发者可以更方便地操作数据库。本篇将深入讲解iBATIS一对一映射的概念、配置及应用,帮助你更好地理解和...
标题和描述中提到的“ibatis映射文件信息,接口对应”是指Ibatis如何通过映射文件与Java接口进行关联,实现数据操作的封装和调用。 首先,我们需要了解Ibatis的核心组成部分:SqlMapConfig.xml配置文件、Mapper接口...
标题 "ibatis 的关系映射" 指的是在使用 iBATIS(一款优秀的Java持久层框架)时,如何处理数据库中的对象关系映射(ORM)问题。在Java应用程序中,iBATIS 提供了一种方便的方式来将数据库操作与业务逻辑解耦,使得...
在IT行业中,数据库关系映射是开发Web应用时不可或缺的一部分,特别是对于ORM(对象关系映射)框架如iBATIS(现在称为MyBatis)。本文将深入探讨如何在iBATIS中实现一对多和多对多的关系映射,并提供相关的源码分析...
标题 "iBatis 一对多映射" 描述中提到的是关于 iBatis 框架下的一对多关系映射。iBatis 是一个基于 Java 的持久层框架,它允许程序员将 SQL 查询与 Java 代码相结合,以实现更灵活的数据访问。在数据库关系模型中,...
此文本主要是关于ibatis总配置和映射配置和一些需要主要的细节。
1. 配置Ibatis:首先,你需要在项目中引入Ibatis的jar包,并设置相应的配置文件(如mybatis-config.xml),配置数据源、事务管理器以及Mapper扫描路径。 2. 创建SQL映射文件:在项目的资源目录下创建SQL映射文件,...
在IT行业中,数据库关系映射是数据访问层的重要部分,特别是在使用ORM(对象关系映射)框架时。Ibatis,作为一个轻量级的Java ORM框架,提供了强大的功能来处理复杂的数据映射,其中包括一对多的关系映射。在这个...
这个“IBatisDemo”项目是一个简化的示例,旨在展示如何在.NET环境中集成和使用IBatis。在这个Demo中,我们将深入探讨IBatis的核心概念、配置、以及如何与数据库进行交互。 **1. IBatis .NET 简介** IBatis .NET 是...
2. **结果集映射**:iBATIS 使用 `<resultMap>` 元素来定义结果集的映射规则,将数据库查询结果中的列与 Java 对象的属性对应起来。例如: ```xml <result property="id" column="USER_ID"/> ...
iBATIS,全称为“Java SQL Mapping Framework”,是由Apache软件基金会开发的一款优秀的开源持久层框架。这个框架的主要目的是简化Java应用程序与数据库之间的交互,通过XML或注解方式将SQL语句映射到Java方法,实现...
Ibatis 是一款轻量级的Java持久层框架,它允许开发者将SQL语句与Java代码分离,从而使得数据库访问更加灵活、易于维护。本篇文章将深入探讨Ibatis的核心概念、最佳实践以及与其他框架如Struts和Spring的整合。 1. ...
4. **SQL Mapping映射文件**:在IBatis.NET中,SQL Mapping文件是XML格式的,它定义了SQL语句、存储过程以及它们与实体类之间的映射关系。通过这种方式,开发者可以在不修改业务代码的情况下,调整数据库查询逻辑。 ...
Ibatis的出现,解决了传统JDBC中手动编写SQL和结果集映射的繁琐工作,提供了更加灵活的数据访问接口。 在"ibatis demo"中,我们通常会看到以下核心概念和知识点: 1. **配置文件**:Ibatis的配置文件(mybatis-...
《iBatis官方中文文档》是开发者们学习和掌握iBatis框架的重要参考资料,它包含了iBatis的详细使用说明和一系列技术要点。iBatis是一个优秀的持久层框架,它允许开发者将SQL语句直接写在配置文件中,极大地提高了...