首先贴上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的数据类型,比如ArrayList,HashMap..., 而ofType指的是集合存储的类型,也就是一个类,用来装这些数据。相信通过例子大家都能够明白。
还有更加复杂的用法等待开发......