• 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>
    

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

    多对多关系

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

  • 相关阅读:
    HTML5新特性之文件和二进制数据的操作
    HTML5本地存储之IndexedDB
    HTML5新标签之Canvas
    HTML5 Canvas实战之烟花效果
    Asp.NET core/net 5接口返回实体含有long/int64的属性序列后最后几位变为0的解决
    Aero for WTL application
    C++WTL基于MCI的音频播放器源码
    c++ 深拷贝,浅拷贝,赋值操作的调用情况
    发布一个生成按钮图片的工具 c#写的
    贴图:CImage VS Bitmap
  • 原文地址:https://www.cnblogs.com/xj619/p/11189156.html
Copyright © 2020-2023  润新知