一对一的关联查询

一、使用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);
}
}

三 、两种查询方式的特点

  1. resultType:使用resultType实现较为简单,如果pojo中没有包括查询出来的列名,需要增加列名对应的属性,即可完成映射。
  2. 如果没有查询结果的特殊要求建议使用resultType。
  3. resultMap:需要单独定义resultMap,实现有点麻烦,如果对查询结果有特殊的要求,使用resultMap可以完成将关联查询映射pojo的属性中。
  4. resultMap可以实现延迟加载,resultType无法实现延迟加载

Mybatis的关联查询(一)的更多相关文章

  1. Mybatis之关联查询

    一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...

  2. SpringBoot+Mybatis实现关联查询

    SpringBoot+Mybatis实现关联查询 今天学习了下Mybatis的动态查询,然后接着上次的Demo改造了下实现表的关联查询. 话不多说,开始今天的小Demo 首先接着上次的项目 https ...

  3. Mybatis之关联查询及动态SQL

    前言 实际开发项目中,很少是针对单表操作,基本都会联查多表进行操作,尤其是出一些报表的内容.此时,就可以使用Mybatis的关联查询还有动态SQL.前几篇文章已经介绍过了怎么调用及相关内容,因此这里只 ...

  4. JavaWeb_(Mybatis框架)关联查询_六

    系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...

  5. mybatis一对一关联查询——(八)

    1.需求 查询所有订单信息,关联查询下单用户信息. 注意: 因为一个订单信息只会是一个人下的订单,所以从查询订单信息出发关联查询用户信息为一对一查询.如果从用户信息出发查询用户下的订单信息则为一对多查 ...

  6. Mybatis一对一关联查询

    有两张表,老师表teacher和班级表class,一个class班级对应一个teacher,一个teacher对应一个class 需求是根据班级id查询班级信息(带老师的信息) 创建teacher和c ...

  7. MyBatis学习(四)MyBatis一对一关联查询

    一对一关联查询即.两张表通过外键进行关联.从而达到查询外键直接获得两张表的信息.本文基于业务拓展类的方式实现. 项目骨架 配置文件conf.xml和db.properties前几节讲过.这里就不细说了 ...

  8. SSM-MyBatis-15:Mybatis中关联查询(多表操作)

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 先简单提及一下关联查询的分类 1.一对多 1.1单条SQL操作的 1.2多条SQL操作的 2.多对一 2.1单 ...

  9. MyBatis的关联查询

    关联映射的一对多 //查询经理角色 以及 该角色下对应的员工集合 public SmbmsRole getRoleAndUser(Integer id); <resultMap id=" ...

随机推荐

  1. replaceState 实现返回从新定位

    在web 开发中,选择列表分类,在中商品, 详情页面后,返回的时候我们想定位到原来选择的分类 就需要借助window.history.replaceState来实现 function getProdu ...

  2. .net 序列化反序列化

    .net 序列化创建对象的深拷贝 public static object DeepClone(object original) { using (MemoryStream stream = new ...

  3. thinkphp里数据嵌套循环

    做thinkphp时要用到循环里面嵌套循环的,并第二个循环是和外面的有关联的. thinkphp官网给出的文档为: <volist name="list" id=" ...

  4. Ray tracing performance benchmark

    accel. avg size 3.14accel. avg depth 16.15accel. max size 8accel. max depth 20accel. GPIT 3.00 MB tr ...

  5. BZOJ2430 chocolate

    有一个显然的想法是因为最后要花分成n*m个小块,所以每条边一定是要被切开的. 所以直接排序就可以了qwq,按照代价从大到小切一定是最优的. #include<iostream> #incl ...

  6. hdu 1542/1255 Atlantis/覆盖的面积

    1542 1255 两道扫描线+线段树的入门题. 基本没有什么区别,前者是模板,后者因为是求覆盖次数至少在两次以上的,这个同样是具有并集性质的,所以把cover的判断条件更改一下就可以了qwq. hd ...

  7. [ActionScript 3.0] AS利用ByteArray向PHP发送二进制数据生成图片

    flash as3向php发送二进制数据,通过php保存成图片. AS端: package { import com.JPEGEncoder.JPGEncoder; import flash.disp ...

  8. 如何使用MySQL Workbench创建数据库存储过程

    方法/步骤   1 打开My SQL Workbench 2 右击要启动的my SQL数据库连接,然后选择[connection  to  database] 3 此时进入数据库实例管理界面,下方显示 ...

  9. freemarker模板跟java代码放在一起

    在配置 freemarkerConfig时加上 <property name="templateLoaderPath" value="classpath:hello ...

  10. MyEclipse迁移过程中Tomcat版本不一致的解决办法

    MyEclipse迁移过程中Tomcat版本不一致的解决办法 下面就是在MyEclipse2013迁移被Tomcat6.0X绑定的项目迁移到MyEclipse2014 Tomcat8.0X,报如下pr ...