MySQL 数据库 下 使用 MyBatis 进行主子表数据查询骚操作

MySQL 数据库 下 使用 MyBatis 进行主子表数据查询骚操作

在实际开发过程中经常会碰到 主表、从表 这样的数据库设计,本文将介绍一下 主、从表 查询、删除 的 Sao 操作。其中涉及到了 MyBatis resultMap 标签 继承复用嵌套 的应用;废话不多少,喜欢的深入研究下,详情参考如下代码:



DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.imis.server.mapper.DemoMapper">

	

	

	<resultMap id="Master_BaseResultMap" type="com.imis.server.entity.MasterTable">
		<id column="id" property="id" jdbcType="VARCHAR" />
		<result column="name" property="name" jdbcType="VARCHAR" />
	resultMap>

	

	<resultMap id="Child_BaseResultMap" type="com.imis.server.entity.ChildTable">
		<id column="id" property="id" jdbcType="VARCHAR" />
		<result column="parent_id" property="parentId" jdbcType="VARCHAR" />
		<result column="name" property="name" jdbcType="INTEGER" />
	resultMap>

	

	

	<resultMap id="BaseResultMap" extends="com.imis.server.mapper.DemoMapper.Master_BaseResultMap" type="com.imis.server.entity.MasterAndChildList">
		<collection property="childList" javaType="java.util.List" ofType="com.dtqy.server.entity.ChildTable" resultMap="com.imis.server.mapper.DemoMapper.Child_BaseResultMap" columnPrefix="child_">collection>
	resultMap>

	<sql id="Master_Base_Column_List">
		master_table.id,
		master_table.name
	sql>

	<sql id="Child_Base_Column_List">
		child_table.id AS child_id,
		child_table.parent_id AS child_parent_id,
		child_table.name AS child_name
	sql>

	<sql id="Master_Example_Where_Clause">
		<where>
			<trim prefix="" suffix="" prefixOverrides="">
				<if test="parameter != null">
					<if test="parameter.id != null and parameter.id != ''">
						
						AND master_table.id = #{parameter.id, jdbcType=VARCHAR}
					if>
					<if test="parameter.name != null and parameter.name != ''">
						
						
					if>
				if>
			trim>
		where>
	sql>

	<sql id="Child_Example_Where_Clause">
		<where>
			<trim prefix="" suffix="" prefixOverrides="">
				<if test="parameter != null">
					<if test="parameter.childId != null and parameter.childId != ''">
						
						AND child_table.id = #{parameter.childId, jdbcType=VARCHAR}
					if>
					<if test="parameter.childName != null and parameter.childName != ''">
						
						
					if>
				if>
			trim>
		where>
	sql>

	
	<select id="count" resultType="java.lang.Integer" parameterType="java.util.Map">
		SELECT
			COUNT(1)
		FROM
			master_table
		<include refid="Master_Example_Where_Clause" />
	select>

	
	<select id="queryList" resultMap="BaseResultMap" parameterType="java.util.Map">
		SELECT
			master_table.*,
			<include refid="Detail_Base_Column_List" />
		FROM
			(
				SELECT
					<include refid="Master_Base_Column_List" />
				FROM
					master_table
				<include refid="Master_Example_Where_Clause" />
				<if test="parameter.pageNumber != null ">
					LIMIT ${(parameter.pageNumber != 0 ? (parameter.pageNumber - 1) : parameter.pageNumber) * parameter.pageSize}, ${parameter.pageSize}
				if>
			)
			LEFT JOIN child_table ON master_table.id = child_table.parent_id
			<include refid="Child_Example_Where_Clause" />
		ORDER BY
			master_table.name DESC,
			child_table.name ASC
	select>

	
	<delete id="deleteById" parameterType="java.lang.String">
		DELETE
			master_table, child_table
		FROM
			master_table LEFT JOIN child_table ON master_table.id = child_table.parent_id
		WHERE
			master_table.id = #{id, jdbcType=VARCHAR};
	delete>

	
	<select id="getById" resultMap="BaseResultMap" parameterType="java.lang.String">
		SELECT
			master_table.*,
			<include refid="Detail_Base_Column_List" />
		FROM
			(
				SELECT
					<include refid="Master_Base_Column_List" />
				FROM
					master_table
				WHERE
					master_table.id = #{id, jdbcType=VARCHAR};
				LIMIT 1
			)
			LEFT JOIN child_table ON master_table.id = child_table.parent_id
		ORDER BY
			child_table.name ASC
	select>

	
	<select id="getByParameter" resultMap="BaseResultMap" parameterType="java.util.Map">
		SELECT
			master_table.*,
			<include refid="Detail_Base_Column_List" />
		FROM
			(
				SELECT
					<include refid="Master_Base_Column_List" />
				FROM
					master_table
				<include refid="Master_Example_Where_Clause" />
				LIMIT 1
			)
			LEFT JOIN child_table ON master_table.id = child_table.parent_id
			<include refid="Child_Example_Where_Clause" />
		ORDER BY
			child_table.jd_rank ASC
	select>

mapper>

参考资料:MyBatis resultMap 标签 继承复用嵌套

你可能感兴趣的:(问题解决,技术研讨,数据库,mysql,mybatis)