Mybatis的关联查询(一)
一对一的关联查询
一、使用resultType进行输出映射
1. 创建一个新的PO类,由于要将查询出来的属性映射到新的PO类。所有该PO类中应该有查询出来的所有列对应的属性。
//定义新的PO类,该类继承Orders类。有了Orders的全部属性,然后再添加User的属性
public class OrdersCustom extends Orders {
	private String username;// 用户名称
	private String address;// 用户地址
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
}
2. 编写mapper.xml文件
 <select id="findOrderAndUserByType" resultType="OrdersCustom" >
        SELECT
                orders.id,
                orders.user_id userId,
                orders.number,
                orders.createtime,
                orders.note,
                USER .username,
                USER .address
            FROM
                orders,
                USER
            WHERE
        orders.user_id = USER .id;
    </select>
3. 编写mapper接口文件
    public List<OrdersCustom> findOrderAndUserByType() throws Exception;
4. 测试代码
 public void testFindOrderAndUserByType() throws Exception{
        SqlSession session = sessionFactory.openSession();
        Mapper mapper = session.getMapper(Mapper.class);
        List<OrdersCustom> ordersCustomList = mapper.findOrderAndUserByType();
        for (OrdersCustom ordersCustom : ordersCustomList){
            System.out.println(ordersCustom);
        }
    }
二、使用resultMap进行输出结果的映射
1. 使用resultMap进行输出结果映射时,不在需要创建新的PO类,只需要在主查询表的PO类中新增管理查询PO类的属性即可。
public class Orders {
    private Integer id;
    private Integer userId;
    private String number;
    private Date createtime;
    private String note;
	//管理查询Po的类
    private User user;
    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }
......
}
2. 创建映射的resultMap
<resultMap id="OrderAndUserResultMap" type="Orders" >
        <!--
            查询结果中唯一标识列的映射
            column:查询出来的列名
            property:po中的属性名称
        -->
        <id column="id" property="id"/>
        <!--
            查询结果中普通列的映射
            column:查询出来的列名
            property:po中的属性名称
        -->
        <result column="user_id" property="userId" />
        <result column="number" property="number" />
        <result column="createtime" property="createtime" />
        <result column="note" property="note" />
        <!--
            association:该标签用来配置一对一的关系映射
            配置映射的关联的用户信息
            property:要映射到的po类中的属性(orders中的属性)
            javaType:要映射到的那个po类(User类)
        -->
        <association property="user" javaType="User" >
            <!--
           查询结果中唯一标识列的映射
           column:查询出来的列名
           property:po中的属性名称
             -->
            <id column="user_id" property="id" />
            <!--
           查询结果中普通列的映射
           column:查询出来的列名
           property:po中的属性名称
             -->
            <result column="username" property="username" />
            <result column="sex" property="sex" />
            <result column="address" property="address" />
         </association>
    </resultMap>
3. 编写mapper.xml文件
 <select id="findOrderAndUserByMap" resultMap="OrderAndUserResultMap" >
            SELECT
                orders.*,
                USER .username,
                USER .sex,
                USER .address
            FROM
                orders,
                USER
            WHERE
        orders.user_id = USER .id;
    </select>
4. 编写mapper接口文件
 public List<Orders> findOrderAndUserByMap() throws Exception;
5. 测试代码
 public void testFindOrderAndUserByMap() throws Exception{
        SqlSession session = sessionFactory.openSession();
        Mapper mapper = session.getMapper(Mapper.class);
        List<Orders> ordersCustomList = mapper.findOrderAndUserByMap();
        for (Orders orders : ordersCustomList){
            System.out.println(orders);
        }
    }
三 、两种查询方式的特点
- resultType:使用resultType实现较为简单,如果pojo中没有包括查询出来的列名,需要增加列名对应的属性,即可完成映射。
- 如果没有查询结果的特殊要求建议使用resultType。
- resultMap:需要单独定义resultMap,实现有点麻烦,如果对查询结果有特殊的要求,使用resultMap可以完成将关联查询映射pojo的属性中。
- resultMap可以实现延迟加载,resultType无法实现延迟加载
Mybatis的关联查询(一)的更多相关文章
- Mybatis之关联查询
		一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ... 
- SpringBoot+Mybatis实现关联查询
		SpringBoot+Mybatis实现关联查询 今天学习了下Mybatis的动态查询,然后接着上次的Demo改造了下实现表的关联查询. 话不多说,开始今天的小Demo 首先接着上次的项目 https ... 
- Mybatis之关联查询及动态SQL
		前言 实际开发项目中,很少是针对单表操作,基本都会联查多表进行操作,尤其是出一些报表的内容.此时,就可以使用Mybatis的关联查询还有动态SQL.前几篇文章已经介绍过了怎么调用及相关内容,因此这里只 ... 
- JavaWeb_(Mybatis框架)关联查询_六
		系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ... 
- mybatis一对一关联查询——(八)
		1.需求 查询所有订单信息,关联查询下单用户信息. 注意: 因为一个订单信息只会是一个人下的订单,所以从查询订单信息出发关联查询用户信息为一对一查询.如果从用户信息出发查询用户下的订单信息则为一对多查 ... 
- Mybatis一对一关联查询
		有两张表,老师表teacher和班级表class,一个class班级对应一个teacher,一个teacher对应一个class 需求是根据班级id查询班级信息(带老师的信息) 创建teacher和c ... 
- MyBatis学习(四)MyBatis一对一关联查询
		一对一关联查询即.两张表通过外键进行关联.从而达到查询外键直接获得两张表的信息.本文基于业务拓展类的方式实现. 项目骨架 配置文件conf.xml和db.properties前几节讲过.这里就不细说了 ... 
- SSM-MyBatis-15:Mybatis中关联查询(多表操作)
		------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 先简单提及一下关联查询的分类 1.一对多 1.1单条SQL操作的 1.2多条SQL操作的 2.多对一 2.1单 ... 
- MyBatis的关联查询
		关联映射的一对多 //查询经理角色 以及 该角色下对应的员工集合 public SmbmsRole getRoleAndUser(Integer id); <resultMap id=" ... 
随机推荐
- [Erlang11] 那些经历过的Erlang小坑11-20
			11.每次重装系统时都会重新安装Erlang,Ubuntu安装sh秒杀一切. https://gist.github.com/zhongwencool/11174620 12. Erlang Shel ... 
- ASP.NET程序从IIS6移植到IIS7时出现500.22错误(转)
			最可能的原因: • 此应用程序在 system.web/httpModules 节中定义配置. 可尝试的操作: • 将配置迁移到 system.webServer/modules 节.也可 ... 
- .net core i上 K8S(六).netcore程序的service网络代理模式
			上一章我们讲了pod的hostip模式,但在生产环境中,我们都是通过service来访问k8s集群的,service有两种模式来暴漏端口,今天我们来分享一下 1.clusterIP模式 我们在创建se ... 
- Android Get方式发送信息
			程序需要用到Internet权限,所以需要在AndroidManifest.xml添加 <uses-permission android:name="android.permissio ... 
- RHEL因为selinux设置失误,无法重启问题。(centos适用)
			今天做FTP模拟的时候selinux设置出现失误.导致系统无法重新启动.出现如下界面 Failed To Load SELinux policy.freezing .. 网上找了下,解决方法如下: 开 ... 
- OI数据结构&&分治 简单学习笔记
			持续更新!!! [例题]简单题(K-D tree) 题目链接 线段树 [例题](环上最大连续和) 给定一个长度为n的环形序列A,其中A1与A_n是相临的,现在有q次修改操作,每次操作会更改其中一个数, ... 
- CookieJar和HTTPCookieProcessor
			CookieJar和HTTPCookieProcessor 我们在使用爬虫的时候,经常会用到cookie进行模拟登陆和访问.在使用urllib库做爬虫,我们需要借助http.cookiejar库中的C ... 
- 二,PHP缓存机制详解
			一,PHP缓存机制详解 我们可以使用PHP自带的缓存机制来完成页面静态化,但是仅靠PHP自身的缓存机制并不能完美的解决页面静态化,往往需要和其他静态化技术(通常是伪静态技术)结合使用. output ... 
- js常见报错解决方法
			1.获得类名document.getElementsClassName(常出现一个问题): getClassName("gn","pt")[0].appendC ... 
- CGLIB动态代理模式
			概念: 第三方技术CGLIB动态代理和JDK代理不同的是,JDK代理需要提供接口,而CGLIB代理不需要: 它只需要一个非抽象类就能实现动态代理 例子: /** * 非抽象类 * @author Ad ... 
