ibatis 查询 实体类中包含实体类 一对多

本文详细介绍了如何使用iBATIS查询生成实体类及其包含的方法,包括XML配置示例、实体类定义、配置注意事项以及iBATIS版本兼容性。重点在于展示如何在查询结果中嵌套子实体类,以及对一对多/多对多关系的正确配置方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用ibatis查询,查询生成的实体类中包含实体类的方法:

xml代码:

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"   
  
"http://www.ibatis.com/dtd/sql-map-2.dtd">  
<sqlMap namespace="sys">  
    <typeAlias alias="menu" type="com.cuishen.sqlmaptest.vo.Menu" />  
    <resultMap id="sub-menu-map" class="menu">  
        <result property="id" column="subid" />  
        <result property="name" column="subname" />  
        <result property="url" column="suburl" />  
        <result property="layer" column="sublayer" />  
        <result property="grade" column="subgrade" />  
        <result property="position" column="subposition" />  
        <result property="parentId" column="subparentid" />  
    </resultMap>  
    <resultMap id="menu-map" class="menu" groupBy="id">  
        <result property="id" column="id" />  
        <result property="name" column="name" />  
        <result property="url" column="url" />  
        <result property="layer" column="layer" />  
        <result property="grade" column="grade" />  
        <result property="position" column="position" />  
        <result property="parentId" column="parentid" />  
        <result property="subMenus" resultMap="sys.sub-menu-map" />  
    </resultMap>  
  
    <select id="getTopMenu" parameterClass="java.util.HashMap" resultMap="sys.menu-map">  
    select   
    t.id as id,t.name as name,t.url as url,t.layer as layer,t.grade as grade,t.position as position,  
    t.parentid as parentid,s.id as subid,s.name as subname,s.url as suburl,s.layer as sublayer,  
    s.grade as subgrade,s.position as subposition,s.parentid as subparentid  
    from menu t left join menu s  
    on t.id = s.parentid  
    where t.layer=1 order by t.position, s.position  
    </select>  
</sqlMap>  


com.cuishen.sqlmaptest.vo.Menu如下:

package com.cuishen.sqlmaptest.vo;  
  
import java.util.List;  
  
/** 
 * POJO - 菜单 
 * @author cuishen 
 */  
public class Menu implements java.io.Serializable {  
    private static final long serialVersionUID = 7172793340860021199L;  
  
    private Long id;  
    private String name;  
    private String url;  
    private Short layer;  
    private Short grade;  
    private Short position;  
    private Long parentId;  
    private List subMenus;  
  
    public Menu() { }  
  
    public Long getId() {  
        return this.id;  
    }  
  
    public void setId(Long id) {  
        this.id = id;  
    }  
  
    //...  
    //getter、setter方法  
    //...  
  
    public List getSubMenus() {  
        return subMenus;  
    }  
  
    public void setSubMenus(List subMenus) {  
        this.subMenus = subMenus;  
    }  
} 

注意: 


1. 注意这个配置:<result property="subMenus" resultMap="sys.sub-menu-map" />,resultMap是sys.sub-menu-map,要加命名空间sys,而不是sub-menu-map,否则iBATIS可能会报错!

2. 一对多/多对多映射的集合属性subMenus必须用简单的getter/setter,不能在getter/setter里做其他处理,否则会导致iBATIS报错!! 

3. 在iBATIS2.3.0.677上测试通过,更老旧的版本可能不支持该解决方案!!


从iBATIS3.0开始该解决方案的配置改为:
xlm代码:


<resultMap id="blogResult" type="Blog">  
    <id property=”id” column="blog_id" />  
    <result property="title" column="blog_title"/>  
    <collection property="posts" ofType="Post">  
        <id property="id" column="post_id"/>  
        <result property="subject" column="post_subject"/>  
        <result property="body" column="post_body"/>  
    </collection>  
</resultMap>  

转自:

http://cuishen.iteye.com/blog/544207


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值