Mybatis实现递归查询查找子查询
1.简单的数据结构
2.实体类
import java.util.List;
/**
* @ClassName AuditTabRele
* @Description tab 关系表
* @Author wangyj
* @Date 19/11/7 18:38
*/
public class AuditTabRele {
private String tabCode;
private String tabName;
private String pTabCode;
private String tabSort;
private List<AuditTabRele> subTabs;
public String getTabCode() {
return tabCode;
}
public void setTabCode(String tabCode) {
this.tabCode = tabCode;
}
public String getTabName() {
return tabName;
}
public void setTabName(String tabName) {
this.tabName = tabName;
}
public String getpTabCode() {
return pTabCode;
}
public void setpTabCode(String pTabCode) {
this.pTabCode = pTabCode;
}
public String getTabSort() {
return tabSort;
}
public void setTabSort(String tabSort) {
this.tabSort = tabSort;
}
public List<AuditTabRele> getSubTabs() {
return subTabs;
}
public void setSubTabs(List<AuditTabRele> subTabs) {
this.subTabs = subTabs;
}
@Override
public String toString() {
return "AuditTabRele{" +
"tabCode='" + tabCode + '\'' +
", tabName='" + tabName + '\'' +
", pTabCode='" + pTabCode + '\'' +
", tabSort='" + tabSort + '\'' +
", subTabs=" + subTabs +
'}';
}
}
3.Mapper文件
mybatis的javaType和ofType
都是指定对象的类型 不同的是当使用反向查询select从另一个maper文件中取出数据时必须用ofType
都可以为collection和association是指定对象的类型,
都不是必须写的, 只有反向select时需要ofType;
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.jeeplus.modules.china.mapper.SysNewIndexMapper" >
<resultMap type="AuditTabRele" id="AuditTabReleResult">
<result property="tabCode" column="TAB_CODE"/>
<result property="tabName" column="TAB_NAME"/>
<result property="pTabCode" column="P_TAB_CODE"/>
<result property="tabSort" column="TAB_SORT"/>
<!-- 一对多的关系 -->
<!-- 查到的TAB_CODE作为下次查询的p_tab_code -->
<collection property="subTabs" javaType="ArrayList" column="TAB_CODE" select="selectTabs" />
</resultMap>
<select id="selectTabs" resultMap="AuditTabReleResult">
SELECT * FROM AUDIT_TAB_RELE WHERE P_TAB_CODE = #{pTabCode}
</select>
</mapper>
4.查询结果
{
"tabs": [
{
"tabCode": "1",
"tabName": "酬金",
"pTabCode": "0",
"tabSort": "1",
"subTabs": [
{
"tabCode": "4",
"tabName": "升档/平移类酬金",
"pTabCode": "1",
"tabSort": "1",
"subTabs": [
{
"tabCode": "9",
"tabName": "测试",
"pTabCode": "4",
"tabSort": "1"
}
]
},
{
"tabCode": "5",
"tabName": "宽带类酬金",
"pTabCode": "1",
"tabSort": "2"
},
{
"tabCode": "6",
"tabName": "数据类酬金",
"pTabCode": "1",
"tabSort": "3"
},
{
"tabCode": "7",
"tabName": "终端酬金",
"pTabCode": "1",
"tabSort": "4"
},
{
"tabCode": "8",
"tabName": "入网类酬金",
"pTabCode": "1",
"tabSort": "5"
}
]
},
{
"tabCode": "2",
"tabName": "新增用户异常",
"pTabCode": "0",
"tabSort": "2"
},
{
"tabCode": "3",
"tabName": "超合同",
"pTabCode": "0",
"tabSort": "3"
}
]
}