笔记:mybatis的多表连接和嵌套查询简单笔记

4 篇文章 0 订阅

1.mapper.xml

<?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">
<!--
namespace: 命名空间,用于标识每一个Mapper XML文件中的语句,预防在不同的Mapper XML文件中存在相同的语句ID
-->
<mapper namespace="lz.cn.mapper.EmployeeMapper">

    <!-- 结果集映射: 列《》属性名 -->
    <resultMap id="baseResultMap" type="Employee">
        <!-- 专门映射主键列 -->
        <id property="empno" column="EMPNO" />
        <result property="ename" column="ENAME"/>
        <result property="job" column="JOB"/>
        <result property="mgr" column="MGR"/>
        <result property="hiredate" column="HIREDATE"/>
        <result property="sal" column="SAL"/>
        <result property="comm" column="COMM"/>
        <result property="deptno" column="DEPTNO"/>
    </resultMap>


    <!--
    1.嵌套结果,一条语句查询出来,多表连接查询
    -->
    <resultMap id="extendResultMap" type="Employee" extends="baseResultMap">
        <!--一对一关联查询-->
        <association property="department" javaType="Department" columnPrefix="D_">
            <!--关联的嵌套结果-->
            <id property="deptno" column="deptno"/>
            <result property="dname" column="dname"></result>
            <result property="location" column="location"></result>
        </association>

    </resultMap>

    <select id="selectById" resultMap="extendResultMap" parameterType="int">
        select e.EMPNO,
              e.ENAME,
              e.JOB,
              e.MGR,
              e.HIREDATE,
              e.SAL,
              e.COMM,
              e.DEPTNO,
              d.DEPTNO    D_DEPTNO,
              d.DNAME     D_DNAME,
              d.LOC       D_LOC
        from EMPLOYEE E,DEPARTMENT D
         where E.DEPTNO = D.DEPTNO
         and E.EMPNO=#{id}
    </select>

    <!--
    2.嵌套查询,多个sql语句
    -->
    <resultMap id="extentResultMap2" type="Employee" extends="baseResultMap">
        <!--一对一关联查询-->
        <association property="department" column="deptno" select="selectDepartmentById"/>
    </resultMap>

    <select id="selectDepartmentById" resultType="Department" parameterType="int">
        select * from DEPARTMENT where DEPTNO=#{deptno}
    </select>

    <select id="selectTwoById" parameterType="int" resultMap="extentResultMap2">
        select * from EMPLOYEE where empno=#{empno}
    </select>

</mapper>
  • 第一种selectById运用sql语句管理查询简单粗暴
  • 俩个sql语句,用association标签关联起来;
    • 需要指定级联实体Bean在上级Bean中的属性名称,即association标签的property属性
    • 指定下一步查询需要使用的select语句,即association标签的select属性,该属性值为Mapper接口查询方法的全限定名;
    • 需要使用column属性,用于指定第二步查询的输入参数,第二步查询只有一个输入参数时,使用第一步查询结果的column名称即可;

2.mapper接口

package lz.cn.mapper;
import lz.cn.vo.Employee;
public interface EmployeeMapper {
    /**
     * 联合查询 一个sql语句
     * @param empno
     * @return
     */
    public Employee selectById(int empno);

    public Employee selectTwoById(int empno);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值