继承映射介绍-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
分享到:
相关推荐
ibatis-2.3.4.726.jar,ibatis-2.3.0.677.jar,ibatis-2.3.3.720.jar下载,都已放入一个压缩包下。
ibatis jar src ibatis 2 3 0 677
iBATIS-SqlMaps,ibatis映射文件
Maven整合的spring-mvc3.x和iBatis3.x
NULL 博文链接:https://xiao9.iteye.com/blog/954159
此文本主要是关于ibatis总配置和映射配置和一些需要主要的细节。
Martin很好地区分了数据映射(Data Mapping)和元数据映射(Metadata Mapping),后者正是O/RM工具的依据,这种工具将数据库的表和列映射到应用程序中的类和字段(field),也就是说它将数据库的元数据映射到类的元...
ibatis 一对多关系映射 ibatis 一对多关系映射ibatis 一对多关系映射
ibatis映射文件信息,接口对应,持久层管理
ibatis代码生成后如何使用Example自动查询功能, 我是找个好长时间才分析出来,分享技术,测试使用,希望对你有所帮助
经典开源插件之ibatis: 一个使用ibatis对数据库增删改查的例子 数据库, ibatis, 经典, 例子, 插件
ibatis: dynamic 使用方法
ibatis配置文件、映射文件详解.doc
ibatis 用HashMap解决Ibatis未知列名和列数的查询结果的resultClass映射
3.iBatis2学习笔记:单表映射 .doc 4.iBatis2学习笔记:SqlMap的配置总结(18条).doc 5.iBatis2学习笔记:入参和返回值的问题.doc 6.iBatis2学习笔记:一对多映射(双向).doc 7.iBatis2学习笔记:多对多映射(双向)...
Ibatis一对一映射提示,需要学习的同学请关注,谢谢。
ibatis学习 ibatis总结 ibatis ibatis ibatis
功能:当你建立好数据库,写好javabean,就可以用这个工具来为你的javabean和数据库之间做一个映射. 当然这个映射只是一个大致的模板,很多时候你可能要稍做修改.但是也为你节约了很多的时间. <br>使用方法: 1....
他们也阐明了怎样取得你已编写的SQL语句及把他们映射给iBATIS使用的Bean。最后,还讨论了iBATIS的优缺点,及为什么是这样的一种方式,即所谓的“在完全OR与JDBC之间的一个幽雅的折衷。” <br>就象Developer's ...