18_高级映射:一对一查询(使用resultMap)
【简述】
数据库模型和数据等信息与上一篇博文相同。
需求也同上一篇博文。
【工程截图】
【User.java】POJO
- package cn.higgin.mybatis.po;
- import java.util.Date;
- public class User {
- //属性名和数据库表的字段对应
- private int id;
- private String username;
- private String sex;
- private Date birthday;
- private String address;
- //省略get/set方法
- }
【Orders.java】
- package cn.higgin.mybatis.po;
- import java.util.Date;
- public class Orders {
- private Integer id;
- private Integer userId;
- private String number;
- private Date createtime;
- private String note;
- //注意!!!这里引入了User
- private User user;
- //省略get/set方法......
- }
【OrdersMapperCustomer.java】
- package cn.higgin.mybatis.mapper;
- import java.util.List;
- import cn.higgin.mybatis.po.Orders;
- public interface OrdersMapperCustom {
- //查询订单关联查询用户信息,使用resultMap方式
- public List<Orders> findOrdersUserResultMap() throws Exception;
- }
【OrdersMapperCustom.xml】
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- <mapper namespace="cn.higgin.mybatis.mapper.OrdersMapperCustom">
- <!--
- 订单查询关联用户的resultMap
- 将整个查询的结果映射到cn.higgin.mybatis.po.Orders中
- -->
- <resultMap type="cn.higgin.mybatis.po.Orders" id="OrdersUserResultMap">
- <!-- 配置订单的映射信息 -->
- <!--
- id:指定查询列中的唯一标识,订单信息中的唯一标识,若有多个列组成唯一标识,需配置多个id
- column: 订单信息的唯一标识列
- property: 订单信息的唯一标识列所映射到的 Orders的对应的属性
- -->
- <id column="id" property="id"/>
- <result column="user_id" property="userId"/>
- <result column="number" property="number" />
- <result column="createtime" property="createtime"/>
- <result column="note" property="note" />
- <!-- 配置映射的关联的用户信息 -->
- <!-- association:用于映射关联查询单个对象的信息
- property:要将关联查询的用户信息映射到Orders中的对应属性
- -->
- <association property="user" javaType="cn.higgin.mybatis.po.User">
- <!--
- id:关联查询用户的唯一标识
- column:指定唯一标识用户信息的列
- javaType:映射到user的对应属性
- -->
- <id column="user_id" property="id"/>
- <result column="username" property="username"/>
- <result column="sex" property="sex"/>
- <result column="address" property="address"/>
- </association>
- </resultMap>
- <!-- 查询订单关联查询用户信息,使用resultMap -->
- <select id="findOrdersUserResultMap" resultMap="OrdersUserResultMap">
- SELECT
- orders.*,
- USER.username,
- USER.sex,
- USER.address
- FROM
- orders,USER
- WHERE orders.user_id=user.id
- </select>
- </mapper>
【SqpMapperConfig.java和db.properties同上一篇博文】
【OrderMapperCustomTest.java】
- package cn.higgin.mybatis.mapper;
- import java.io.InputStream;
- import java.util.List;
- import org.apache.ibatis.io.Resources;
- import org.apache.ibatis.session.SqlSession;
- import org.apache.ibatis.session.SqlSessionFactory;
- import org.apache.ibatis.session.SqlSessionFactoryBuilder;
- import org.junit.Before;
- import org.junit.Test;
- import cn.higgin.mybatis.po.Orders;
- public class OrdersMapperCustomTest {
- private SqlSessionFactory sqlSessionFactory;
- // 此方法是在执行testFindUserById之前执行
- @Before
- public void setUp() throws Exception {
- // 创建sqlSessionFactory
- // mybatis配置文件
- String resource = "SqlMapConfig.xml";
- // 得到配置文件流
- InputStream inputStream = Resources.getResourceAsStream(resource);
- // 创建会话工厂,传入mybatis的配置文件信息
- sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
- }
- @Test
- public void testFindOrdersUser() throws Exception {
- SqlSession sqlSession=sqlSessionFactory.openSession();
- //创建代理对象
- OrdersMapperCustom ordersMapperCustom=sqlSession.getMapper(OrdersMapperCustom.class);
- //调用mapper的方法
- List<Orders> list=ordersMapperCustom.findOrdersUserResultMap();
- System.out.println(list.size());
- sqlSession.close();
- }
- }
【运行结果】
【小结】
实现一对一查询的情况下:
[ resultType ]
使用resultType较为方便,如果pojo中没有包含查询出来的列名,需要增加列名对应的属性,即可完成映射。
如果没有查询结果的特殊要求建议使用resultType。
[ resultMap ]
需要单独定义resultMap,实现有点麻烦。如果对查询结果有特殊的要求,使用resultMap可以完成将关联查询映射到pojo的属性中。
[ 注意 ]
resultMap可以实现延迟加载,resultType无法实现延迟加载。
18_高级映射:一对一查询(使用resultMap)的更多相关文章
- 高级映射,查询缓存和与spring整合
一.高级映射 -------一对一 这里以订单查询为例,其中有一个外键为user_id,通过这个关联用户表.这里要实现的功能是这个两个表关联查询,得到订单的信息和部分user的信息.order表结构如 ...
- Mybatis实现高级映射一对一、一对多查询
终于把论文写得差不多了,系统也不急着完成,可以抽出点时间来完成这个系列的博客了.在写本博客之前我是惶恐不安的,高级映射一贯是持久层框架里的重中之重,小到自己开发小系统,大到企业级开发,表的存在从来就不 ...
- mybatis入门基础(六)----高级映射(一对一,一对多,多对多)
一:订单商品数据模型 1.数据库执行脚本 创建数据库表代码: CREATE TABLE items ( id INT NOT NULL AUTO_INCREMENT, itemsname ) NOT ...
- 【mybatis深度历险系列】mybatis中的高级映射一对一、一对多、多对多
学习hibernate的时候,小编已经接触多各种映射,mybatis中映射有到底是如何运转的,今天这篇博文,小编主要来简单的介绍一下mybatis中的高级映射,包括一对一.一对多.多对多,希望多有需要 ...
- Mybatis学习总结(六)——高级映射(一对一,一对多,多对多)
一.订单商品数据模型 1.数据库执行脚本 创建数据库表代码: /*Table structure for table `t_user` */ CREATE TABLE t_user ( id INT ...
- mybatis入门基础----高级映射(一对一,一对多,多对多)
阅读目录 一:订单商品数据模型 二.一对一查询 三.一对多查询 四.多对多查询 回到顶部 一:订单商品数据模型 1.数据库执行脚本 创建数据库表代码: CREATE TABLE items ( id ...
- mybatis3.2.7应用_高级映射(一对一、一对多、多对多)
1. 一对一查询 需求:查询订单信息,关联查询创建订单的用户信息 1.1 使用resultType实现 1.1.1 sql语句 确定查询的主表:订单表 确定查询的关联表:用户表 ...
- mybatis高级映射(一对一,一对多)
mybatis高级映射 一对一关联映射 需求:查询订单信息,关联查询用户信息(一个订单对应一个用户) (1)通过resultType实现 sql语句: select orders.* , USER.u ...
- MyBatis高级映射查询(3)
一.数据库数据和项目搭建过程 1.主要要四张表,分别为user用户信息表.items商品表.orderdetail订单明细表.orders订单表.表的结构和数据如下: 表结构 CREATE DATAB ...
随机推荐
- MSSQLSERVER数据库- 作业调度定时备份数据库
作业调度和备份数据库是常见的行为,掌握这两项技术我觉的非常有必要. 在网上找到这个示例,记录在这里 备份数据库的SQL语句 --自动备份并保存最近5天的SQL数据库作业脚本 ) DECLARE @da ...
- DotNET 开发常用工具汇集
开发用专业软件已经很多了,来说说开发用的辅助软件把--分享我常使用的辅助软件 个人工具清单 .NET 程序员十种必备工具 新.net开发十大必备工具 .NET开发不可错过的25款必备工具 我的生活必备 ...
- 磐石加密狗NT88管理层API
磐石加密狗NT88管理层API 直接贴代码了 1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 ...
- dataGridView控件--未将对象引用设置添加到对象的实例
上篇博客中我完成了如何将控件中的数据导出到excel中dataGridView控件--导出Excel,当我成功导出后,又再次遇到了新问题---未将对象引用设置添加到对象的实例 解决办法: 1 .将代 ...
- Android 如何添加一种锁屏方式
前言 欢迎大家我分享和推荐好用的代码段~~ 声明 欢迎转载,但请保留文章原始出处: CSDN:http://www.csdn.net ...
- Android下pm命令详解
在看相关PackageManager代码时,无意中发现Android 下提供一个pm命令,通常放在/system/bin/下.这个命令与Package有关,且非常实用.所以研究之. 0. Usage: ...
- 迷你template
JavaScript Micro-Templatinghttp://ejohn.org/blog/javascript-micro-templating/ //Simple JavaScript ...
- Java基础知识强化之网络编程笔记10:TCP之客户端读取文本文件服务器控制台输出
1. TCP之客户端读取文本文件服务器控制台输出 (1)客户端:(发送数据到服务端) package cn.itcast_10; import java.io.BufferedReader; impo ...
- Mysql-5.6乱码问题
1 参考:http://www.testwo.com/blog/6930 mysql数据库默认的编码是:Latin1,要想支持中文需要修改为gbk/utf8的编码格式. 1.以root管理员身份查 ...
- Android_gridView_LIstener_examle
layout.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" x ...