【简述】

数据库模型和数据等信息与上一篇博文相同。

需求也同上一篇博文。

【工程截图】

【User.java】POJO

  1. package cn.higgin.mybatis.po;
  2.  
  3. import java.util.Date;
  4.  
  5. public class User {
  6. //属性名和数据库表的字段对应
  7. private int id;
  8. private String username;
  9. private String sex;
  10. private Date birthday;
  11. private String address;
  12. //省略get/set方法
  13. }

【Orders.java】

  1. package cn.higgin.mybatis.po;
  2.  
  3. import java.util.Date;
  4.  
  5. public class Orders {
  6.  
  7. private Integer id;
  8. private Integer userId;
  9. private String number;
  10. private Date createtime;
  11. private String note;
  12. //注意!!!这里引入了User
  13. private User user;
  14. //省略get/set方法......
  15. }

【OrdersMapperCustomer.java】

  1. package cn.higgin.mybatis.mapper;
  2.  
  3. import java.util.List;
  4.  
  5. import cn.higgin.mybatis.po.Orders;
  6.  
  7. public interface OrdersMapperCustom {
  8.  
  9. //查询订单关联查询用户信息,使用resultMap方式
  10. public List<Orders> findOrdersUserResultMap() throws Exception;
  11. }

【OrdersMapperCustom.xml】

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4.  
  5. <mapper namespace="cn.higgin.mybatis.mapper.OrdersMapperCustom">
  6.  
  7. <!--
  8. 订单查询关联用户的resultMap
  9. 将整个查询的结果映射到cn.higgin.mybatis.po.Orders中
  10. -->
  11. <resultMap type="cn.higgin.mybatis.po.Orders" id="OrdersUserResultMap">
  12. <!-- 配置订单的映射信息 -->
  13. <!--
  14. id:指定查询列中的唯一标识,订单信息中的唯一标识,若有多个列组成唯一标识,需配置多个id
  15. column: 订单信息的唯一标识列
  16. property: 订单信息的唯一标识列所映射到的 Orders的对应的属性
  17. -->
  18. <id column="id" property="id"/>
  19. <result column="user_id" property="userId"/>
  20. <result column="number" property="number" />
  21. <result column="createtime" property="createtime"/>
  22. <result column="note" property="note" />
  23.  
  24. <!-- 配置映射的关联的用户信息 -->
  25. <!-- association:用于映射关联查询单个对象的信息
  26. property:要将关联查询的用户信息映射到Orders中的对应属性
  27. -->
  28. <association property="user" javaType="cn.higgin.mybatis.po.User">
  29. <!--
  30. id:关联查询用户的唯一标识
  31. column:指定唯一标识用户信息的列
  32. javaType:映射到user的对应属性
  33. -->
  34. <id column="user_id" property="id"/>
  35. <result column="username" property="username"/>
  36. <result column="sex" property="sex"/>
  37. <result column="address" property="address"/>
  38. </association>
  39. </resultMap>
  40.  
  41. <!-- 查询订单关联查询用户信息,使用resultMap -->
  42. <select id="findOrdersUserResultMap" resultMap="OrdersUserResultMap">
  43. SELECT
  44. orders.*,
  45. USER.username,
  46. USER.sex,
  47. USER.address
  48. FROM
  49. orders,USER
  50. WHERE orders.user_id=user.id
  51. </select>
  52.  
  53. </mapper>

【SqpMapperConfig.java和db.properties同上一篇博文】

【OrderMapperCustomTest.java】

  1. package cn.higgin.mybatis.mapper;
  2.  
  3. import java.io.InputStream;
  4. import java.util.List;
  5.  
  6. import org.apache.ibatis.io.Resources;
  7. import org.apache.ibatis.session.SqlSession;
  8. import org.apache.ibatis.session.SqlSessionFactory;
  9. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  10. import org.junit.Before;
  11. import org.junit.Test;
  12.  
  13. import cn.higgin.mybatis.po.Orders;
  14.  
  15. public class OrdersMapperCustomTest {
  16. private SqlSessionFactory sqlSessionFactory;
  17.  
  18. // 此方法是在执行testFindUserById之前执行
  19. @Before
  20. public void setUp() throws Exception {
  21. // 创建sqlSessionFactory
  22.  
  23. // mybatis配置文件
  24. String resource = "SqlMapConfig.xml";
  25. // 得到配置文件流
  26. InputStream inputStream = Resources.getResourceAsStream(resource);
  27.  
  28. // 创建会话工厂,传入mybatis的配置文件信息
  29. sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  30. }
  31. @Test
  32. public void testFindOrdersUser() throws Exception {
  33. SqlSession sqlSession=sqlSessionFactory.openSession();
  34. //创建代理对象
  35. OrdersMapperCustom ordersMapperCustom=sqlSession.getMapper(OrdersMapperCustom.class);
  36.  
  37. //调用mapper的方法
  38. List<Orders> list=ordersMapperCustom.findOrdersUserResultMap();
  39.  
  40. System.out.println(list.size());
  41.  
  42. sqlSession.close();
  43.  
  44. }
  45.  
  46. }

【运行结果】

【小结】

实现一对一查询的情况下:

[ resultType ]

使用resultType较为方便,如果pojo中没有包含查询出来的列名,需要增加列名对应的属性,即可完成映射。

如果没有查询结果的特殊要求建议使用resultType。

[ resultMap ]

需要单独定义resultMap,实现有点麻烦。如果对查询结果有特殊的要求,使用resultMap可以完成将关联查询映射到pojo的属性中。

[ 注意 ]

resultMap可以实现延迟加载,resultType无法实现延迟加载。

18_高级映射:一对一查询(使用resultMap)的更多相关文章

  1. 高级映射,查询缓存和与spring整合

    一.高级映射 -------一对一 这里以订单查询为例,其中有一个外键为user_id,通过这个关联用户表.这里要实现的功能是这个两个表关联查询,得到订单的信息和部分user的信息.order表结构如 ...

  2. Mybatis实现高级映射一对一、一对多查询

    终于把论文写得差不多了,系统也不急着完成,可以抽出点时间来完成这个系列的博客了.在写本博客之前我是惶恐不安的,高级映射一贯是持久层框架里的重中之重,小到自己开发小系统,大到企业级开发,表的存在从来就不 ...

  3. mybatis入门基础(六)----高级映射(一对一,一对多,多对多)

    一:订单商品数据模型 1.数据库执行脚本 创建数据库表代码: CREATE TABLE items ( id INT NOT NULL AUTO_INCREMENT, itemsname ) NOT ...

  4. 【mybatis深度历险系列】mybatis中的高级映射一对一、一对多、多对多

    学习hibernate的时候,小编已经接触多各种映射,mybatis中映射有到底是如何运转的,今天这篇博文,小编主要来简单的介绍一下mybatis中的高级映射,包括一对一.一对多.多对多,希望多有需要 ...

  5. Mybatis学习总结(六)——高级映射(一对一,一对多,多对多)

    一.订单商品数据模型 1.数据库执行脚本 创建数据库表代码: /*Table structure for table `t_user` */ CREATE TABLE t_user ( id INT ...

  6. mybatis入门基础----高级映射(一对一,一对多,多对多)

    阅读目录 一:订单商品数据模型 二.一对一查询 三.一对多查询 四.多对多查询 回到顶部 一:订单商品数据模型 1.数据库执行脚本 创建数据库表代码: CREATE TABLE items ( id ...

  7. mybatis3.2.7应用_高级映射(一对一、一对多、多对多)

    1. 一对一查询 需求:查询订单信息,关联查询创建订单的用户信息 1.1 使用resultType实现 1.1.1 sql语句 确定查询的主表:订单表       确定查询的关联表:用户表      ...

  8. mybatis高级映射(一对一,一对多)

    mybatis高级映射 一对一关联映射 需求:查询订单信息,关联查询用户信息(一个订单对应一个用户) (1)通过resultType实现 sql语句: select orders.* , USER.u ...

  9. MyBatis高级映射查询(3)

    一.数据库数据和项目搭建过程 1.主要要四张表,分别为user用户信息表.items商品表.orderdetail订单明细表.orders订单表.表的结构和数据如下: 表结构 CREATE DATAB ...

随机推荐

  1. MSSQLSERVER数据库- 作业调度定时备份数据库

    作业调度和备份数据库是常见的行为,掌握这两项技术我觉的非常有必要. 在网上找到这个示例,记录在这里 备份数据库的SQL语句 --自动备份并保存最近5天的SQL数据库作业脚本 ) DECLARE @da ...

  2. DotNET 开发常用工具汇集

    开发用专业软件已经很多了,来说说开发用的辅助软件把--分享我常使用的辅助软件 个人工具清单 .NET 程序员十种必备工具 新.net开发十大必备工具 .NET开发不可错过的25款必备工具 我的生活必备 ...

  3. 磐石加密狗NT88管理层API

    磐石加密狗NT88管理层API   直接贴代码了 1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 ...

  4. dataGridView控件--未将对象引用设置添加到对象的实例

    上篇博客中我完成了如何将控件中的数据导出到excel中dataGridView控件--导出Excel,当我成功导出后,又再次遇到了新问题---未将对象引用设置添加到对象的实例 解决办法:  1 .将代 ...

  5. Android 如何添加一种锁屏方式

    前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处:          CSDN:http://www.csdn.net        ...

  6. Android下pm命令详解

    在看相关PackageManager代码时,无意中发现Android 下提供一个pm命令,通常放在/system/bin/下.这个命令与Package有关,且非常实用.所以研究之. 0. Usage: ...

  7. 迷你template

    JavaScript Micro-Templatinghttp://ejohn.org/blog/javascript-micro-templating/   //Simple JavaScript ...

  8. Java基础知识强化之网络编程笔记10:TCP之客户端读取文本文件服务器控制台输出

    1. TCP之客户端读取文本文件服务器控制台输出 (1)客户端:(发送数据到服务端) package cn.itcast_10; import java.io.BufferedReader; impo ...

  9. Mysql-5.6乱码问题

    1 参考:http://www.testwo.com/blog/6930 mysql数据库默认的编码是:Latin1,要想支持中文需要修改为gbk/utf8的编码格式.   1.以root管理员身份查 ...

  10. Android_gridView_LIstener_examle

    layout.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" x ...