ibatis <result map

4 10:38:12|  分类: ibatis/mybatis|字号 订阅

假如您有简单的映射,不需要重用定义好的resultMap,有一个快速的方法,就是通过设定mapped statement的resultClass属性来隐式地指定result map。诀窍在于,保证返回的ResultSet的字段名称和Java Bean中可写入属性的名称匹配。如Product类,可以创建一个带有隐式result map的mapped statement如下:

<statement id=”getProduct” resultClass=”com.ibatis.example.Product”>

select

PRD_ID as id,

PRD_DESCRIPTION as description

from PRODUCT

where PRD_ID = #value#

</statement>

mapped statement定义了resultClass属性,并为每个字段指定了别名,用于匹配Product类的属性名称。这样就可以了,不需要result map。缺点在于,您无法指定字段的数据类型(通常不是NULLABLE字段不需要),或NULL替代值(或<result>别的属性)。另外还要记住,数据库很少是大小写敏感的,因此隐式result map对大小写也不敏感。假如您的Java Bean有两个属性,一个是firstName,另一个是firstname,数据库会把两者看作同一个属性,因而不能使用隐式的result map(这也可以看作是Java Bean设计的一个潜在问题)。此外,使用resultClass的自动映射也对性能有轻微的不利影响。因为读取ResultSetMetaData信息会使某些JDBC Driver变慢。

基本类型的Result(即StringIntegerBoolean

除了支持符合Java Bean规范的Java类,Result Map还可以给基本类型包装类如String,Integer,Boolean等赋值,Result Map还可以得到基本类型包装类的集合。基本类型可以象Java Bean一样映射,只是要记住一个限制,基本类型只能有一个属性,名字可以任意取(常用“value”或“val”)。例如,如果您要获得所有产品描述的一个列表而不是整个Product类,Result Map如下:

<resultMap id=”get-product-result” class=”java.lang.String”>

<result property=”value” column=”PRD_DESCRIPTION”/>

</resultMap>

更简单方法是,在mapped statement中使用resultClass属性(使用“as”关键字给字段取别名“value”):

<statement id=”getProductCount” resultClass=”java.lang.Integer”>

select count(1) as value

from PRODUCT

</statement>

Map类型的Result

Result Map也可以方便为一个Map(如HashMap或TreeMap)对象赋值。使用下面讨论的API(参见executeQueryForList()),还可以得到Map对象的集合(即Map的List)。Map对象与Java Bean同样的方式映射,只是使用name属性值作为Map的键值,用它来索引相应的数据库字段值,而不是象Java Bean一样给属性赋值。例如,如果您要将Product对象的数据装入Map,可以这样做:

<resultMap id=”get-product-result” class=”java.util.HashMap”>

<result property=”id” column=”PRD_ID”/>

<result property=”code” column=”PRD_CODE”/>

<result property=”description” column=”PRD_DESCRIPTION”/>

<result property=”suggestedPrice” column=”PRD_SUGGESTED_PRICE”/>

</resultMap>

Property的name属性值(即“id”)作为HashMap的键值,而列值则作为HashMap中相应的值。

当然,可以把Map类型Result和隐式的Result Map一起使用。



使用<resultMap id="eqMapVo" type="EquipmentVo"> <result property="eqId" column="eq_id"/> <result property="companyId" column="company_id"/> <result property="itemName" column="item_name"/> <result property="eqName" column="eq_name"/> <result property="serialNumber" column="serial_number"/> <collection property="maps" javaType="Map"> <result column="mm" javaType="string" property="mm"/> <result column="yy" javaType="string" property="yy"/> <result column="week" javaType="string" property="week"/> <result column="dd" javaType="string" property="dd"/> <result column="hh" javaType="string" property="hh"/> <result column="minit" javaType="string" property="minit"/> <result column="eqName" javaType="string" property="eqName"/> <result column="itemName" javaType="string" property="itemName"/> <result column="rm" javaType="bigDecimal" property="rm"/> </collection> </resultMap>映射public class EquipmentVo extends RegionalEquipment { private List<EquipmentDataVo> equipmentDataVoList; private List<Map> maps; public List<Map> getMaps() { return maps; } public void setMaps(List<Map> maps) { this.maps = maps; } public List<EquipmentDataVo> getEquipmentDataVoList() { return equipmentDataVoList; } public void setEquipmentDataVoList(List<EquipmentDataVo> equipmentDataVoList) { this.equipmentDataVoList = equipmentDataVoList; } },抛出org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: Could not set property 'maps' of 'class com.hapstar.regional.domain.vo.EquipmentVo' with value '{hh=2023-05-05 16, eqName=RM/7199, itemName=测试项目, rm=1.46}' Cause: java.lang.IllegalArgumentException: argument type mismatch异常,如何处理
06-03
基于SSM框架的智能家政保洁预约系统,是一个旨在提高家政保洁服务预约效率和管理水平的平台。该系统通过集成现代信息技术,为家政公司、家政服务人员和消费者提供了一个便捷的在线预约和管理系统。 系统的主要功能包括: 1. **用户管理**:允许消费者注册、登录,并管理他们的个人资料和预约历史。 2. **家政人员管理**:家政服务人员可以注册并更新自己的个人信息、服务类别和服务时间。 3. **服务预约**:消费者可以浏览不同的家政服务选项,选择合适的服务人员,并在线预约服务。 4. **订单管理**:系统支持订单的创建、跟踪和管理,包括订单的确认、完成和评价。 5. **评价系统**:消费者可以在家政服务完成后对服务进行评价,帮助提高服务质量和透明度。 6. **后台管理**:管理员可以管理用户、家政人员信息、服务类别、预约订单以及处理用户反馈。 系统采用Java语言开发,使用MySQL数据库进行数据存储,通过B/S架构实现用户与服务的在线交互。系统设计考虑了不同用户角色的需求,包括管理员、家政服务人员和普通用户,每个角色都有相应的权限和功能。此外,系统还采用了软件组件化、精化体系结构、分离逻辑和数据等方法,以便于未来的系统升级和维护。 智能家政保洁预约系统通过提供一个集中的平台,不仅方便了消费者的预约和管理,也为家政服务人员提供了一个展示和推广自己服务的机会。同时,系统的后台管理功能为家政公司提供了强大的数据支持和决策辅助,有助于提高服务质量和管理效率。该系统的设计与实现,标志着家政保洁服务向现代化和网络化的转型,为管理决策和控制提供保障,是行业发展中的重要里程碑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值