本文主要是介绍mybatis中collection的使用(三级联动),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
mybatis中association和collection的column传入多个参数值
项目中在使用association和collection实现一对一和一对多关系时需要对关系中结果集进行筛选,如果使用懒加载模式,即联合使用select
标签时,主sql和关系映射里的sql是分开的,查询参数传递成为问题。
mybatis文档:
property | description |
---|---|
column | 数据库的列名或者列标签别名。与传递给resultSet.getString(columnName)的参数名称相同。注意: 在处理组合键时,您可以使用column=“{prop1=col1,prop2=col2}”这样的语法,设置多个列名传入到嵌套查询语句。这就会把prop1和prop2设置到目标嵌套选择语句的参数对象中。 |
<resultMap id="findCountryCityAddressMap" type="map"><result property="country" column="country"/><collection property="cityList"column="{cityId=city_id,adr=addressCol, dis=districtCol}" //adr作为第二个sql查询条件key,即prop1属性ofType="map" //addressCol即为虚拟列名javaType="java.util.List" select="selectAddressByCityId"/>
</resultMap>
column中放入多个值,然后使用逗号隔开即可。
这里使用一级分行、二级分行、支行名称来模拟后台的三级联动的list(省市区的也是一样,在此不再赘述)
需求:获取所有的分支行信息:一级分行下面有二级分行,相应的二级分行下面有对应的支行信息。
model层:
一级分行实体 :
package com.smp.model.allbankinfo; import java.io.Serializable;
import java.util.List; /**
* <p>
* 一级分行实体
* </p>
*
* @author
* @date 2018-11-14
*
*/
public class ParentBrach implements Serializable { @Override
public String toString() {
return "ParentBrach [parentBrachId=" + parentBrachId + ", parentBrachname=" + parentBrachname + ", brachList="
+ brachList + "]";
} public String getParentBrachId() {
return parentBrachId;
} public void setParentBrachId(String parentBrachId) {
this.parentBrachId = parentBrachId;
} public String getParentBrachname() {
return parentBrachname;
} public void setParentBrachname(String parentBrachname) {
this.parentBrachname = parentBrachname;
} public List<Brach> getBrachList() {
return brachList;
} public void setBrachList(List<Brach> brachList) {
this.brachList = brachList;
} private static final long serialVersionUID = -3997264254867474971L; /**
* 一级分行ID
*/
private String parentBrachId;
/**
* 一级分行名
*/
private String parentBrachname; /**
* 一级分行下面的二级分行列表
*/
private List<Brach> brachList; }
二级分行实体 :
package com.smp.model.allbankinfo; import java.io.Serializable;
import java.util.List; /**
* <p>
* 二级分行实体
* </p>
*
* @author
* @date 2018-11-14
*
*/
public class Brach implements Serializable { @Override
public String toString() {
return "Brach [branchId=" + branchId + ", branchName=" + branchName + ", parentBranchId=" + parentBranchId
+ ", subBrachList=" + subBrachList + "]";
} public String getBranchId() {
return branchId;
} public void setBranchId(String branchId) {
this.branchId = branchId;
} public String getBranchName() {
return branchName;
} public void setBranchName(String branchName) {
this.branchName = branchName;
} public String getParentBranchId() {
return parentBranchId;
} public void setParentBranchId(String parentBranchId) {
this.parentBranchId = parentBranchId;
} public List<SubBrach> getSubBrachList() {
return subBrachList;
} public void setSubBrachList(List<SubBrach> subBrachList) {
this.subBrachList = subBrachList;
} private static final long serialVersionUID = -1635709625244302813L; /**
* 二级分行ID
*/
private String branchId;
/**
* 二级分行名
*/
private String branchName;
/**
* 所属的一级分行ID
*/
private String parentBranchId; /**
* 二级分行旗下的支行列表
*/
private List<SubBrach> subBrachList; }
支行实体 :
package com.smp.model.allbankinfo; import java.io.Serializable; /**
* <p>
* 支行实体
* </p>
*
* @author
* @date 2018-11-14
*
*/
public class SubBrach implements Serializable {
@Override
public String toString() {
return "SubBrach [subBranchId=" + subBranchId + ", subBranchCode=" + subBranchCode + ", subBranchName="
+ subBranchName + ", branchId=" + branchId + "]";
} public String getSubBranchId() {
return subBranchId;
} public void setSubBranchId(String subBranchId) {
this.subBranchId = subBranchId;
} public String getSubBranchCode() {
return subBranchCode;
} public void setSubBranchCode(String subBranchCode) {
this.subBranchCode = subBranchCode;
} public String getSubBranchName() {
return subBranchName;
} public void setSubBranchName(String subBranchName) {
this.subBranchName = subBranchName;
} public String getBranchId() {
return branchId;
} public void setBranchId(String branchId) {
this.branchId = branchId;
} private static final long serialVersionUID = 3306493316002559960L; /**
* 支行ID
*/
private String subBranchId;
/**
* 支行机构码
*/
private String subBranchCode;
/**
* 支行名字
*/
private String subBranchName;
/**
* 所属的二级分行ID
*/
private String branchId; }
dao层:
一级分行
/**
*
*/
package com.smp.orgManage.mapper; import java.util.List; import org.apache.ibatis.annotations.Param; import com.smp.model.BraOffRecParentBra;
import com.smp.model.allbankinfo.ParentBrach; /**
* <p>一级分行mapper接口</p>
*
* @author gaozhenghong
* @date 2018年3月6日
*
*/
public interface OnlineBraOffRecParentBraMapperExt { /**
* 查找所有分支行信息
* @return
*/
List<ParentBrach> selectAllBankInfo();
}
二级分行:
package com.smp.orgManage.mapper; import java.util.List; import org.apache.ibatis.annotations.Param; import com.smp.model.BraOffRecBra;
import com.smp.model.allbankinfo.Brach; /**
* <p>二级分行mapper接口</p>
*
* @author gaozhenghong
* @date 2018年3月6日
*
*/
public interface OnlineBraOffRecBraMapperExt { /**
* 根据ID查询二级分行
* @param parentBraId
* @return
*/
List<Brach> selectRecBrasByParentId(@Param("parentBraId") String parentBraId); }
支行信息:
package com.smp.orgManage.mapper; import java.util.List; import org.apache.ibatis.annotations.Param; import com.smp.model.BraOffRecSubBra;
import com.smp.model.allbankinfo.SubBrach; /**
* <p>支行mapper接口</p>
*
* @author gaozhenghong
* @date 2018年3月6日
*
*/
public interface OnlineBraOffRecSubBraMapperExt { /**
* 根据ID查询分支行
* @param branchId
* @return
*/
List<SubBrach> selectSubBrasByBranchId(@Param("branchId") String branchId); }
mapper层:
一级分行:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "htp://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper
namespace="com.smp.orgManage.mapper.OnlineBraOffRecParentBraMapperExt">
<resultMap id="allBankInfo" type="com.smp.model.allbankinfo.ParentBrach">
<id column="PARENT_BRANCH_ID" property="parentBrachId" jdbcType="VARCHAR" />
<result column="PARENT_BRANCH_NAME" property="parentBrachname"
jdbcType="VARCHAR" />
<collection property="brachList" column="PARENT_BRANCH_ID"
select="com.smp.orgManage.mapper.OnlineBraOffRecBraMapperExt.selectRecBrasByParentId"> </collection>
</resultMap> <select id="selectAllBankInfo" resultMap="allBankInfo"> SELECT
A.ID
PARENT_BRANCH_ID,
A.PARENT_BRANCH_NAME FROM
ONLINE_BRA_OFF_REC_PARENT_BRA A
</select>
</mapper>
二级分行:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "htp://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.smp.orgManage.mapper.OnlineBraOffRecBraMapperExt"> <resultMap id="brach" type="com.smp.model.allbankinfo.Brach">
<id column="BRANCH_ID" property="branchId" jdbcType="VARCHAR" />
<result column="BRANCH_NAME" property="branchName" jdbcType="VARCHAR" />
<result column="PARENT_BRANCH_ID" property="parentBranchId"
jdbcType="VARCHAR" />
<collection property="subBrachList" column="BRANCH_ID"
select="com.smp.orgManage.mapper.OnlineBraOffRecSubBraMapperExt.selectSubBrasByBranchId"></collection>
</resultMap> <select id="selectRecBrasByParentId" parameterType="java.lang.String"
resultMap="brach">
SELECT
T.ID BRANCH_ID,
T.BRANCH_NAME ,
T.PARENT_BRANCH_ID
FROM
ONLINE_BRA_OFF_REC_BRA T
WHERE PARENT_BRANCH_ID = #{parentBraId}
</select>
</mapper>
支行信息:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "htp://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.smp.orgManage.mapper.OnlineBraOffRecSubBraMapperExt">
<resultMap id="subBrach" type="com.smp.model.allbankinfo.SubBrach">
<id column="ID" property="subBranchId" jdbcType="VARCHAR" />
<result column="SUB_BRANCH_NAME" property="subBranchName" jdbcType="VARCHAR" />
<result column="SUB_BRANCH_ORG_CODE" property="subBranchCode" jdbcType="VARCHAR" />
<result column="BRANCH_ID" property="branchId" jdbcType="VARCHAR" />
</resultMap> <!-- 根据ID查询分支行 -->
<select id="selectSubBrasByBranchId" parameterType="java.lang.String"
resultMap="subBrach">
SELECT
ID ,
SUB_BRANCH_ORG_CODE,
SUB_BRANCH_NAME,
BRANCH_ID
FROM
ONLINE_BRA_OFF_REC_SUB_BRA
WHERE BRANCH_ID = #{branchId}
</select>
</mapper>
总结:使用collection来映射一对多的关系,使用其中的select属性对应另一个list的查询。
这篇关于mybatis中collection的使用(三级联动)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!