MyBatis 嵌套查询,多表查询中的联合查询语句

[复制链接]
admin 发表于 6 天前 | 显示全部楼层 |阅读模式
MyBatis 嵌套查询就是将原来多表查询中的联合查询语句拆成单个表的查询,再使用mybatis的语法嵌套在一 起,通过定义resultMap和sql语句中的association或collection元素来实现嵌套查询。

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.jinhei.manage.mapper.NodeMapper">
  6.    
  7.     <resultMap type="Node" id="NodeResult">
  8.         <result property="id"    column="id"    />
  9.         <result property="nodeName"    column="node_name"    />
  10.         <result property="address"    column="address"    />
  11.         <result property="businessType"    column="business_type"    />
  12.         <result property="regionId"    column="region_id"    />
  13.         <result property="partnerId"    column="partner_id"    />
  14.         <result property="createTime"    column="create_time"    />
  15.         <result property="updateTime"    column="update_time"    />
  16.         <result property="createBy"    column="create_by"    />
  17.         <result property="updateBy"    column="update_by"    />
  18.         <result property="remark"    column="remark"    />
  19.     </resultMap>

  20.     <resultMap type="NodeVo" id="NodeVoResult">
  21.         <result property="id"    column="id"    />
  22.         <result property="nodeName"    column="node_name"    />
  23.         <result property="address"    column="address"    />
  24.         <result property="businessType"    column="business_type"    />
  25.         <result property="regionId"    column="region_id"    />
  26.         <result property="partnerId"    column="partner_id"    />
  27.         <result property="createTime"    column="create_time"    />
  28.         <result property="updateTime"    column="update_time"    />
  29.         <result property="createBy"    column="create_by"    />
  30.         <result property="updateBy"    column="update_by"    />
  31.         <result property="remark"    column="remark"    />
  32.         <result property="vmCount"    column="vm_count"    />
  33. <!--    region NodeVo里面的实体    column外键,javaType java类型 -->
  34.         <association property="region" javaType="Region" column="region_id" select="com.jinhei.manage.mapper.RegionMapper.selectRegionById" />
  35.         <association property="partner" javaType="Partner" column="partner_id" select="com.jinhei.manage.mapper.PartnerMapper.selectPartnerById" />

  36.     </resultMap>
  37.     <sql id="selectNodeVo">
  38.         select id, node_name, address, business_type, region_id, partner_id, create_time, update_time, create_by, update_by, remark from tb_node
  39.     </sql>

  40.     <select id="selectNodeList" parameterType="Node" resultMap="NodeResult">
  41.         <include refid="selectNodeVo"/>
  42.         <where>  
  43.             <if test="nodeName != null  and nodeName != ''"> and node_name like concat('%', #{nodeName}, '%')</if>
  44.             <if test="regionId != null "> and region_id = #{regionId}</if>
  45.             <if test="partnerId != null "> and partner_id = #{partnerId}</if>
  46.         </where>
  47.     </select>
  48.    
  49.     <select id="selectNodeById" parameterType="Long" resultMap="NodeResult">
  50.         <include refid="selectNodeVo"/>
  51.         where id = #{id}
  52.     </select>
  53.     <select id="selectNodeVoList" resultMap="NodeVoResult">
  54.         SELECT
  55.             n.id,
  56.             n.node_name,
  57.             n.address,
  58.             n.business_type,
  59.             n.region_id,
  60.             n.partner_id,
  61.             n.create_time,
  62.             n.update_time,
  63.             n.create_by,
  64.             n.update_by,
  65.             n.remark,
  66.             COUNT(v.id) AS vm_count
  67.         FROM
  68.             tb_node n
  69.                 LEFT JOIN
  70.             tb_vending_machine v ON n.id = v.node_id
  71.         <where>
  72.             <if test="nodeName != null  and nodeName != ''"> and n.node_name like concat('%', #{nodeName}, '%')</if>
  73.             <if test="regionId != null "> and n.region_id = #{regionId}</if>
  74.             <if test="partnerId != null "> and n.partner_id = #{partnerId}</if>
  75.         </where>
  76.         GROUP BY
  77.             n.id
  78.     </select>

  79.     <insert id="insertNode" parameterType="Node" useGeneratedKeys="true" keyProperty="id">
  80.         insert into tb_node
  81.         <trim prefix="(" suffix=")" suffixOverrides=",">
  82.             <if test="nodeName != null and nodeName != ''">node_name,</if>
  83.             <if test="address != null and address != ''">address,</if>
  84.             <if test="businessType != null">business_type,</if>
  85.             <if test="regionId != null">region_id,</if>
  86.             <if test="partnerId != null">partner_id,</if>
  87.             <if test="createTime != null">create_time,</if>
  88.             <if test="updateTime != null">update_time,</if>
  89.             <if test="createBy != null">create_by,</if>
  90.             <if test="updateBy != null">update_by,</if>
  91.             <if test="remark != null">remark,</if>
  92.          </trim>
  93.         <trim prefix="values (" suffix=")" suffixOverrides=",">
  94.             <if test="nodeName != null and nodeName != ''">#{nodeName},</if>
  95.             <if test="address != null and address != ''">#{address},</if>
  96.             <if test="businessType != null">#{businessType},</if>
  97.             <if test="regionId != null">#{regionId},</if>
  98.             <if test="partnerId != null">#{partnerId},</if>
  99.             <if test="createTime != null">#{createTime},</if>
  100.             <if test="updateTime != null">#{updateTime},</if>
  101.             <if test="createBy != null">#{createBy},</if>
  102.             <if test="updateBy != null">#{updateBy},</if>
  103.             <if test="remark != null">#{remark},</if>
  104.          </trim>
  105.     </insert>

  106.     <update id="updateNode" parameterType="Node">
  107.         update tb_node
  108.         <trim prefix="SET" suffixOverrides=",">
  109.             <if test="nodeName != null and nodeName != ''">node_name = #{nodeName},</if>
  110.             <if test="address != null and address != ''">address = #{address},</if>
  111.             <if test="businessType != null">business_type = #{businessType},</if>
  112.             <if test="regionId != null">region_id = #{regionId},</if>
  113.             <if test="partnerId != null">partner_id = #{partnerId},</if>
  114.             <if test="createTime != null">create_time = #{createTime},</if>
  115.             <if test="updateTime != null">update_time = #{updateTime},</if>
  116.             <if test="createBy != null">create_by = #{createBy},</if>
  117.             <if test="updateBy != null">update_by = #{updateBy},</if>
  118.             <if test="remark != null">remark = #{remark},</if>
  119.         </trim>
  120.         where id = #{id}
  121.     </update>

  122.     <delete id="deleteNodeById" parameterType="Long">
  123.         delete from tb_node where id = #{id}
  124.     </delete>

  125.     <delete id="deleteNodeByIds" parameterType="String">
  126.         delete from tb_node where id in
  127.         <foreach item="id" collection="array" open="(" separator="," close=")">
  128.             #{id}
  129.         </foreach>
  130.     </delete>
  131. </mapper>
复制代码
参考案例
网站建设,公众号小程序开发,多商户单商户小程序制作,高端系统定制开发,App软件开发联系我们【手机/微信:17817817816
微信扫码

网站建设,公众号小程序开发,商城小程序,系统定制开发,App软件开发等

粤ICP备2024252464号

在本版发帖
微信扫码
QQ客服返回顶部
快速回复 返回顶部 返回列表