resultMap的使用以及延时加载机制

1.一对多查询

UserDAOMapper.xml

<SqlMap namespace="User">

<typeAlias alias="user" type="com.ibatis.sample.User"/>
<typeAlias alias="address" type="com.ibatis.sample.Address"/>

<resultMap id="get-user-result" class="user"> resultMap的功能就是将user类的所有属性都映射出来
<result property="id" column="id" /> property是user的属性, column是数据库列名
<result property="name" column="name" />
<result property="addresses" column="id" 此处指明通过getAddressById获得addresses(一个address的数组)属性,getAddressById的参数是id
select="User.getAddressesById"/> 此处的 User.getAddressById User.指的是命名空间
/<resultMap>

<select id="getUsers"
parameterClass="string"
resultMap="get-user-result" >
<![CDATA[
select
id,
name
from t_user
where id = #id#
]]>
</select>

<select id="getAddressesById"
parameterClass="int"
resultClass="address">
<![CDATA[
select
address,
zipcode
from t_address
where user_id = #userid#
]]>
</select>

使用方法代码

List userList = sqlMap.queryForList("User.getUsers", ""); 即可返回user的list
Address[] addresses = userList.getAddresses();

*延时加载
在List userList = sqlMap.queryForList("User.getUsers", "")时,只执行了select id, name, sex from t_user一条SQL语句.当
Address[] addresses = userList.getAddresses();时,才开始执行获取Address的sql语句.这就是延时加载

*延迟加载并非对所有属性有效,只有实现了List接口的属性才能进行延迟加载

2.一对一查询

如果user和address是一对一关联,则使用同时select两个表的查询,以提高性能,节省资源

<resultMap id="get-user-result" class="user">
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="sex" column="sex"/>
<result property="address" column="t_address.address"/>
<result property="zipCode" column="t_address.zipcode"/>
</resultMap>

<select parameterClass="string" resultMap="get-user-result" >
<![CDATA[
select
*
from t_user, t_address
where t_user.id = t_address.user_id
]]>
</select>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值