先看个具体的例子:
- <resultMap id=”get-product-result” class=”com.ibatis.example.Product”>
- <result property=”id” column=”PRD_ID”/>
- <result property=”description” column=”PRD_DESCRIPTION”/>
- </resultMap>
- <statement id=”getProduct” resultMap=”get-product-result”>
- select * from PRODUCT
- </statement>
注意resultMap支持“select *”,并不要求定义ResultSet所有返回字段的映射。
在SQL Map框架中,Result Map是极其重要的组件。在执行查询Mapped Statement时,resultMap负责将结果集的列值映射成Java Bean的属性值。resultMap的结构如下:
- <resultMap id=”resultMapName” class=”some.domain.Class” [extends=”parent-resultMap”]>
- <result property=”propertyName” column=”COLUMN_NAME”
- [columnIndex=”1”]
- [javaType=”int”]
- [jdbcType=”NUMERIC”]
- [nullValue=”-999999”]
- [select=”someOtherStatement”]
- />
- <result ……/>
- <result ……/>
- <result ……/>
- </resultMap>
1.extends 是可选的属性,可设定成另外一个resultMap的名字,并以它为基础。和在Java中继承一个类相似,父resultMap的属性将作为子resutlMap的一部分。父resultMap的属性总是加到子resultMap属性的前面,并且父resultMap必须要在子resultMap之前定义。父resultMap和子resultMap的class属性不一定要一致,它们可以没有任何关系。
注意!ResultSet的列值按它们在resultMap中定义的顺序读取 (这特性会在某些实现得不是很好的JDBC Driver中派上用场)。
2.属性columnIndex 的值是ResultSet中用于赋值Java Bean属性的字段次序号,
提供了我们将数据集的第几个下标字段映射到指定的数据对象属性的方案
3.属性nullValue 指定数据库中NULL的替代值。因此,如果从ResultSet中读出NULL值,Java Bean属性将被赋值属性null指定的替代值。属性null的值可以指定任意值,但必须对于Java Bean属性的类型是合法的。
4.属性select 用于描述对象之间的关系,并自动地装入复杂类型(即用户定义的类型)属性的数据。属性select的值必须是另外一个mapped statement元素的名称。
for instance:
- <resultMap id="DemoResultMap" class="Hashtable">
- <result property="id" column="id"/>
- <result property="Children" column="id"
- select="SELECT_Children"/>
- </resultMap>
-
- <statements>
- <select id="SELECT_Children" resultClass="ChildrenObject">
- SELECT * FROM Children WHERE ParentID = #id#
- </select>
- </statements>
参考:
http://xulongfa.iteye.com/blog/428674
http://jc-dreaming.iteye.com/blog/499917
分享到:
相关推荐
ibatis实现原理解析
这是一个用iBator生成iBatis有关代码的例子。 特别说明: Eclipse应该是3.4.1以上版本, 并且安装了iBator插件。否则可用iBator的命令行版本或ant工具。 测试用数据是: CREATE TABLE PERSON( id INTEGER NOT NULL,...
开发指南 iBATIS SQL Maps Page 3 of 62 Map类型的Result 复杂类型属性(即自定义类型的属性) 避免N+1 Select(1:1) 延迟加载 VS 联合查询(1:1) 复杂类型集合的属性 避免N+1 Select(1:M和M:N) 组合键值或多...
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd"> <sqlMap namespace="Account"> <typeAlias alias="Account" type="Account"/> <resultMap id...
│ │ │ frame-sourcefiles-org.apache.ibatis.executor.loader.cglib.html │ │ │ frame-sourcefiles-org.apache.ibatis.executor.loader.html │ │ │ frame-sourcefiles- org.apache.ibatis.executor.loader...
实际开发所总结记录的 <resultMap class="java.util.HashMap" id="zjxxs"> </resultMap>
resultMap.......................................................................................................................23 cacheModel..............................................................
代码里面增删改查都写在一起了。用的时候得建个名字叫selected的库,contact名的表。表里有4个字段,contactid,firstname, lastname, email.别的就没什么了。
根据数据库表字段生成javabean的Eclipse插件 目前支持mysql oracle 数据库 支持生成Ibatis 配置文件 支持生成国际化配置文件,根据数据库字段描述(oracle) 支持批量生成javabean
查询出列表,也就是返回list, 在我们这个例子中也就是 List<User> , 这种方式返回数据,需要在User.xml 里面配置返回的类型 resultMap, 注意不是 resultType, 而这个resultMap 所对应的应该是我们自己配置的 ...
而IBatisNet若要返回不同的字段就要定义多套ResultMap,否则就定义一套所有字段的ResultMap,任何查询都返回所有字段。这样无疑浪费了数据库服务器与应用服务器之间的网络带宽,在进行海量数据访问时性能将严重降低...
而IBatisNet若要返回不同的字段就要定义多套ResultMap,否则就定义一套所有字段的ResultMap,任何查询都返回所有字段。这样无疑浪费了数据库服务器与应用服务器之间的网络带宽,在进行海量数据访问时性能将严重降低...
而IBatisNet若要返回不同的字段就要定义多套ResultMap,否则就定义一套所有字段的ResultMap,任何查询都返回所有字段。这样无疑浪费了数据库服务器与应用服务器之间的网络带宽,在进行海量数据访问时性能将严重降低...