前言
MyBatis主流框架,嵌套语句查询的使用是经典场景,这篇主要说一下mybatis的嵌套语句查询,希望能帮助到需要的童鞋们。觉得有问题的童靴们,可以提出来,大家共同进步。觉得写的差的童靴,也希望不要骂,全世界的程序员,我觉得喜欢写分享的人,不多。。。。。。
开始啦
1、场景
先说明一下我的模拟场景:地区查询,省和市,先查所有省信息,再根据省的code码查询市信息,相当于一对多查询
2、嵌套模块代码
<!-- 嵌套查询 -->
<resultMap id="BaseResultMap" type="com.prereadweb.community.form.ProvinceReturnForm">
<result column="code" jdbcType="VARCHAR" property="code" />
<result column="name" jdbcType="VARCHAR" property="name" />
<collection property="cityList" ofType="" select="getCityList" column="code" >
<result column="code" jdbcType="VARCHAR" property="code" />
<result column="name" jdbcType="VARCHAR" property="cityName" />
</collection>
</resultMap>
参数说明
1、resultMap:
<resultMap id="BaseResultMap" type="com.prereadweb.community.form.ProvinceReturnForm">
id: resultMap块的ID
type:返回参数类型(就是平常sql的resultType)
2、result:
<result column="code" jdbcType="VARCHAR" property="code" />
column:数据库表中的字段名称
jdbcType:数据库字段
property:返参名称
3、collection:
<collection property="cityList" ofType="" select="getCityList" column="code" >
property:需要嵌套查询的字段名称,如↓
select:嵌套查询的sql语句的ID
sql查询
1、“一”查询sql
<!-- 查询地区(省) -->
<select id="getProvince" resultMap="BaseResultMap">
SELECT
code,
name
FROM
bu_area
WHERE
parentCode = FALSE
AND is_delete = FALSE
ORDER BY code
</select>
返参用resultMap,它的值对应上面嵌套代码块的ID
2、“多”查询sql
<!-- 查询地区(市) -->
<select id="getCityList" parameterType="String" resultType="com.prereadweb.community.form.CityReturnForm">
SELECT
code,
name AS cityName
FROM
bu_area
WHERE
parentCode = #{id}
AND is_delete = FALSE
ORDER BY code
</select>
此sql的id要对应上面的collection的select的值,至此mybatis的嵌套查询已OK,
3、resultMap的返参类型com.prereadweb.community.form.ProvinceReturnForm
@Data
public class ProvinceReturnForm {
/* code码 */
private String code;
/* 省名称 */
private String name;
/* 市list */
private List<CityReturnForm> cityList;
}
4、“多”查询sql的返参类型com.prereadweb.community.form.CityReturnForm
@Data
public class CityReturnForm {
/* code码 */
private String code;
/* 市名称 */
private String cityName;
}