感觉以前ibatis学习得不够精细,最近又回过头来学习了一遍。
一,在实际应用中我们可能遇到这么一种场景:
- 首先从一张表里搜索出一批会员的数据,对一些状态等字段进行筛选。
- 筛选后的那些会员数据要关联到另外一张表中去查。然后再筛选
- 重复2步骤。
- 最后拼装这么多表里面需要的会员数据
如果用SQL语句拼接是可以解决这种CASE的,但是会大大影响SQL执行的速度,给数据库带来压力。所以有些大数据量情况下需要用程序,分几个SQL去依次查询,最后拼装这么多表里面查出来的有关数据。
这样子的话如果能够一查出来就形成这样一种数据结构
{memberId1=XXXObject,memberId2=XXXObject, ……}就好了
看到 IBATIS 可以用queryForMap来搞定
然后查寻出的HashMap还可以根据自己指定的字段作为Key值。那我这个CASE如果用会员的memberId作为这个返回MAP的KEY值的话,程序里面数据结构的问题就解决了。
如以下SQL 配置
<select id="MS-FIND-APPLYING-MEMBER-ID-PAGINATOR-LIST" parameterClass="TA-SERVICE-RECORD-PARAM" resultMap="RM-SERVICE-RECORD"><!-- 这里的RM-SERVICE-RECORD-->假定已经定义了
SELECT GMT_CREATE,
GMT_MODIFIED,
MEMBER_ID,
PAYMENT_ID
……
from service_record
where
……
</select>
SELECT GMT_CREATE,
GMT_MODIFIED,
MEMBER_ID,
PAYMENT_ID
……
from service_record
where
……
</select>
用这个函数来获取到的MAP就是,一个会员的member_id对应这个会员查出来的所有信息的一个MAP。是一个MAP的嵌套。
public static Map selectApplyMembers(ServiceRecordParam param, String id) throws SQLException {
return sqlMapper.queryForMap("MS-FIND-APPLYING-MEMBER-ID-PAGINATOR-LIST", param, id);
}