zoukankan      html  css  js  c++  java
  • MyBatis联表查询

    一对一关系

    数据库中我有两张表t_user和t_dept,t_user表中的每个记录在t_dept中有且只有一条记录与之对应。这种对应关系就是1对1关系。下面来查询每个员工的信息和部门信息。
    部门对象:

    	private int deptno;
    	private String deptname;
    	private int deptdesc;
    

    员工对象:

    	private int no;
    	private String name;
    	private int age;
    	private Dept dept;
    

    创建这两个对象必须要有无参构造方法,set/get方法。底层还是用的反射实例化的对象。
    映射文件配置:

    <!-- 定义接收数据库参数类型 -->
    <resultMap type="user" id="relaMap">
    		<id column="no" property="no"/>
    		<result column="name" property="name"/>
    		<result column="age" property="age"/>
    		<association property="dept" javaType="Dept">
    			<id column="deptno" property="deptno"/>
    			<result column="deptname" property="deptname"/>
    			<result column="deptdesc" property="deptdesc"/>
    		</association>
    	</resultMap>
    	<select id="queryByRe" resultMap="relaMap">
    		SELECT t_user.no
    		,t_user.name
    		,t_user.age
    		,t_dept.deptno
    		,t_dept.deptname
    		,t_dept.deptdesc
    		FROM t_user
    		LEFT JOIN t_dept
    		ON t_user.deptno=t_dept.deptno
    	</select>
    

    测试结果:
    在这里插入图片描述

    一对多关系

    上述一对一关系中,一个员工的部门只会有一个,但是反过来,一个部门肯定有多个员工,这种情况下就是一对多关系。下面来对一对多关系的查询。
    部门对象:

    	private int deptno;
    	private String deptname;
    	private int deptdesc;
    	//list用来放多个员工对象正好体现一对多关系
    	private List<User> users;
    

    员工对象:

    	private int no;
    	private String name;
    	private int age;
    	//方便测试还是用原来的,这个可有可无
    	private Dept dept;
    

    映射文件的配置:

    		<!-- 定义返回值dept的接受类型 -->
    		<resultMap type="dept" id="reladMap">
    		<id column="deptno" property="deptno"/>
    		<result column="deptname" property="deptname"/>
    		<result column="deptdesc" property="deptdesc"/>
    		<collection property="users" ofType="user">
    			<id column="no" property="no"/>
    			<result column="name" property="name"/>
    			<result column="age" property="age"/>
    		</collection>
     	</resultMap>
    	
    	<select id="queryByRed" resultMap="reladMap">
    		SELECT 
    		u.no
    		,u.name
    		,u.age
    		,d.deptno
    		,d.deptname
    		,d.deptdesc
    		FROM t_user u
    		LEFT JOIN t_dept d
    		ON u.deptno=d.deptno
    	</select>
    

    最后得到测试结果:
    在这里插入图片描述

    多对多关系

    多对多关系就是双向的一对多。

  • 相关阅读:
    kali的一些基本操作
    Linux下find和rm的组合使用--整理转载
    虚拟接口模板- virtual-template
    点到点(point-to-point) 与 端到端(end to end)
    Ruby学习笔记-第二章
    Ruby学习笔记-第一章
    每天一个Linux命令-find
    每天一个Linux命令-du df
    每天一个Linux命令-more less
    每天一个Linux命令-cat
  • 原文地址:https://www.cnblogs.com/xj619/p/11189156.html
Copyright © 2011-2022 走看看