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=" ...
随机推荐
- zookeeper 开机启动
第一种:直接修改/etc/rc.d/rc.local文件 在/etc/rc.d/rc.local文件中需要输入两行,其中export JAVA_HOME=/usr/java/jdk1.8.0_112是 ...
- pageadminCMS.Net Framework的安装教程
很多用户第一次安装PageAdmin建站系统时候会出现这个错误,主要原因:Net Framework是微软的一个系统组件,基本所有windows平台上开发的产品都需要安装Net Framework,除 ...
- todolist作业涉及知识点
window.event对象详细介绍 1.event代表事件的状态,例如触发event对象的元素.鼠标的位置及状态.按下的键等等.event对象只在事件发生的过程中才有效.event的某些属性只对特定 ...
- A. The Meaningless Game(数学)
A. The Meaningless Game time limit per test:1 second memory limit per test:256 megabytes input:stand ...
- leecode刷题(11)-- 反转字符串
leecode刷题(11)-- 反转字符串 反转字符串 描述: 编写一个函数,其作用是将输入的字符串反转过来. 示例 1: 输入: "hello" 输出: "olleh& ...
- 打扮IDEA更换主题
原文链接:https://blog.csdn.net/github_39577257/article/details/80629750 当我们安装一个新的IDEA工具时,第一次进入时会提示我们选择一个 ...
- python 学习(pip工具的安装)
mac 电脑上使用终端命令 curl https://bootstrap.pypa.io/get-pip.py | python3 基于Python 3 pip --version pip3 list ...
- windows10下使用ubuntu,并搭建nodejs环境
1.首先要在win10的设置里打开开发人员使用模式 2.在bash下,下载ubuntu系统 3.安装git,因为要把下载nvm的话,需要git sudo apt-get install git 4.安 ...
- 2019 HEOI游记(真-退役记)
\(\color{#00ffff}{DAY \ \ -1}\) 下午又在说无聊的注意事项,有点紧张,不想做题,只想水题233333 晚上就水了几道网络流,晚四透彻依旧,yhzr二连胜,心里倒是放松了不 ...
- 数学 CF1068B LCM
CF1068B LCM 给定一个正整数\(b (1\leq b \leq 10^{10})\). 把一个正整数a从1枚举到\(10^{18}\),求有多少种不同的\(\large \frac{[a,b ...