MyBatis Xml学习之高级映射示例

首先贴上Mybatis官方文档地址:mybatis – MyBatis 3 | XML 映射器

示例

// 类1
@Data
public class SelectRet {

    private Integer id;

    private String rybh;

    private String ryxm;
    private String xb;
    private String shfzhh;
    @TableField("Belong")
    private String Belong;
    private String rysh;
    private Boolean ifcj;
    private String dwbh;

    List<SelectTagbh> taglist;

}
// 类2
@Data
public class SelectTagbh {
    private String tagbh;
    private String tagmc;
    private List<SelectTagchild> tagchildlist;
}
// 类3
@Data
public class SelectTagchild {
    private String tagchildbh;
    private String tagchildmc;
}

需求:根据上面这些类我简单介绍一下需求:现在我们需要根据人员分页然后查出所有与人员相关的信息。每个人员有一个或多个标签,每个标签下也有一个或多个子标签,现在需要根据人员展示数据,根据标签分类子标签。

数据库我们很好实现这些数据的查询,联查一下表格就ok了,那么数据查完了我们还需要进行下一步处理,因为牵涉到类的嵌套,我们都知道,如果没有嵌套的类,我们在里面直接设置resultType属性就好了,但是现在有了类的嵌套,返回值是上面的类1的情况,这时候简单的映射已经不能满足需求,需要我们自己完成数据结果的映射。接下来直接上代码:

<select id="select" resultMap="selectRetMap">
    SELECT a.id, a.rybh, a.ryxm, a.xb, a.shbzh, a.Belong, a.rysf, a.ifcj, a.dwbh, c.tagbh, c.tagchildbh, d.mc as tagmc, e.mc as tagchildmc
    from ry a
    INNER JOIN (SELECT id from ry limit 10) b on b.id = a.id
    LEFT JOIN tagrecordtable c on c.tagrybh = a.rybh
    LEFT JOIN tagtable d on d.bh = c.tagbh
    LEFT JOIN tagchildtable e on e.bh = c.tagchildbh and e.lxid = d.lxid
 </select>

映射:

id属性就是上述中使用的的值,这样我们就完成了从数据到Java对象的映射。

<resultMap id="selectRetMap" type="com.xx.xx.vo.SelectRet">
    <id column="id" property="id"/>
    <result column="rybh" property="rybh"/>
    <result column="ryxm" property="ryxm"/>
    <result column="xb" property="xb"/>
    <result column="shfzhh" property="shfzhh"/>
    <result column="Belong" property="Belong"/>
    <result column="rysh" property="rysh"/>
    <result column="ifcj" property="ifcj"/>
    <result column="dwbh" property="dwbh"/>
    <collection property="taglist" javaType="ArrayList" ofType="xx.xx.xx.vo.SelectTagbh">
        <result column="tagbh" property="tagbh"/>
        <result column="tagmc" property="tagmc"/>
        <collection property="tagchildlist" javaType="ArrayList" ofType="xx.xx.xx.vo.SelectTagchild">
            <result column="tagchildbh" property="tagchildbh"/>
            <result column="tagchildmc" property="tagchildmc"/>
        </collection>
    </collection>
</resultMap>

这里面要注意的一点就是中javaType属性和ofType属性。

引用官方的话就是: “ofType” 属性。这个属性非常重要,它用来将 JavaBean(或字段)属性的类型和集合存储的类型区分开来。

javaType属性指的是Java的数据类型,比如ArrayListHashMap..., 而ofType指的是集合存储的类型,也就是一个类,用来装这些数据。相信通过例子大家都能够明白。

还有更加复杂的用法等待开发......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值