1使用resultType、ResultMap处理返回结果

处理返回结果

resultType:指定返回值结果的完全限定名,处理多表查询的结果。

多表查询需要定义vo封装查询的结果。

需求:查询部门和部门下对应的岗位

部门名称     岗位名称

办公室        职员

办公室        主人

1.1 建立Post的实体类

  1. package org.guangsoft.entity;
  2. /**
  3. * 岗位的实体类
  4. * @author guanghe
  5. */
  6. public class Post
  7. {
  8. private Integer pid;
  9. private String pname;
  10. private String pdesc;
  11. public Integer getPid()
  12. {
  13. return pid;
  14. }
  15. public void setPid(Integer pid)
  16. {
  17. this.pid = pid;
  18. }
  19. public String getPname()
  20. {
  21. return pname;
  22. }
  23. public void setPname(String pname)
  24. {
  25. this.pname = pname;
  26. }
  27. public String getPdesc()
  28. {
  29. return pdesc;
  30. }
  31. public void setPdesc(String pdesc)
  32. {
  33. this.pdesc = pdesc;
  34. }
  35.  
  36. }

1.2DeptMapper接口添加方法

  1. package org.guangsoft.mapper;
  2.  
  3. import java.util.List;
  4.  
  5. import org.guangsoft.entity.Dept;
  6. import org.guangsoft.vo.DeptVo;
  7.  
  8. public interface DeptMapper
  9. {
  10. public List<DeptVo> getDeptPost();
  11.  
  12. public List<Dept> getDeptPostList();
  13. }

1.3DeptMapperImpl中重写方法

  1. package org.guangsoft.mapper.impl;
  2.  
  3. import java.util.List;
  4.  
  5. import org.apache.ibatis.session.SqlSession;
  6. import org.apache.ibatis.session.SqlSessionFactory;
  7. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  8. import org.guangsoft.entity.Dept;
  9. import org.guangsoft.mapper.DeptMapper;
  10. import org.guangsoft.vo.DeptVo;
  11.  
  12. public class DeptMapperImpl implements DeptMapper
  13. {
  14.  
  15. @Override
  16. public List<DeptVo> getDeptPost()
  17. {
  18. //创建sqlSessionFactory对象
  19. SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
  20. SqlSessionFactory ssf = ssfb.build(DeptMapperImpl.class.
  21. getClassLoader().getResourceAsStream("MyBatis.xml"));
  22. //产生SqlSesion兑现
  23. SqlSession sqlSession = ssf.openSession();
  24. //进行数据的crud操作
  25. List<DeptVo> dlist = sqlSession.selectList("dept.getDeptPost");
  26. //提交事务
  27. sqlSession.commit();
  28. //释放资源
  29. sqlSession.close();
  30. return dlist;
  31. }
  32.  
  33. @Override
  34. public List<Dept> getDeptPostList()
  35. {
  36. SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
  37. SqlSessionFactory ssf = ssfb.build(DeptMapperImpl.class.
  38. getClassLoader().getResourceAsStream("MyBatis.xml"));
  39. //产生SqlSesion兑现
  40. SqlSession sqlSession = ssf.openSession();
  41. //进行数据的crud操作
  42. List<Dept> dlist = sqlSession.selectList("dept.getDeptPostList");
  43. //提交事务
  44. sqlSession.commit();
  45. //释放资源
  46. sqlSession.close();
  47. return dlist;
  48. }
  49.  
  50. }

1.4建立Post岗位信息表

  1. /*
  2. Navicat MySQL Data Transfer
  3.  
  4. Source Server : MySQL
  5. Source Server Version : 50715
  6. Source Host : localhost:3306
  7. Source Database : test
  8.  
  9. Target Server Type : MYSQL
  10. Target Server Version : 50715
  11. File Encoding : 65001
  12.  
  13. Date: 2016-12-13 20:50:00
  14. */
  15.  
  16. SET FOREIGN_KEY_CHECKS=0;
  17.  
  18. -- ----------------------------
  19. -- Table structure for post
  20. -- ----------------------------
  21. DROP TABLE IF EXISTS `post`;
  22. CREATE TABLE `post` (
  23. `pid` int(11) NOT NULL AUTO_INCREMENT,
  24. `pname` varchar(255) DEFAULT NULL,
  25. `pdesc` varchar(255) DEFAULT NULL,
  26. `did` int(11) DEFAULT NULL,
  27. PRIMARY KEY (`pid`),
  28. KEY `fk_did` (`did`),
  29. CONSTRAINT `fk_did` FOREIGN KEY (`did`) REFERENCES `dept` (`did`)
  30. ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

1.5DeptMapper.xml定义操作

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="dept">
  4. <select id="getDeptPost" resultType="org.guangsoft.vo.DeptVo">
  5. select did,dname,pname from dept inner join post on dept.did = post.did
  6. </select>
  7. <resultMap type="org.guangsoft.entity.Dept" id="deptPost">
  8. <id property="did" column="did"></id>
  9. <result property="dname" column="dname" javaType="java.lang.String"></result>
  10. <collection property="posts" ofType="org.guangsoft.entity.Post">
  11. <id property="pid" column="pid"></id>
  12. <result property="pname" column="pname" javaType="java.lang.String"></result>
  13. <result property="pdesc" column="pdesc" javaType="java.lang.String"></result>
  14. </collection>
  15. </resultMap>
  16. <select id="getDeptPostList" resultMap="deptPost">
  17. select * from dept inner join post
  18. on dept.did = post.did
  19. </select>
  20. </mapper>

1.6添加测试方法

  1. package org.guangsoft.test;
  2.  
  3. import java.util.List;
  4.  
  5. import org.guangsoft.entity.Dept;
  6. import org.guangsoft.entity.Post;
  7. import org.guangsoft.mapper.DeptMapper;
  8. import org.guangsoft.mapper.impl.DeptMapperImpl;
  9. import org.guangsoft.vo.DeptVo;
  10. import org.junit.Test;
  11.  
  12. public class TestDeptMapper
  13. {
  14. DeptMapper deptMapper = new DeptMapperImpl();
  15.  
  16. @Test
  17. public void testGetDeptVo()
  18. {
  19. List<DeptVo> dlist = deptMapper.getDeptPost();
  20. for(DeptVo deptVo : dlist)
  21. {
  22. System.out.println(deptVo.getDid() +
  23. " " + deptVo.getDname() + deptVo.getPname());
  24. }
  25. }
  26.  
  27. @Test
  28. public void testGetDeptList()
  29. {
  30. List<Dept> dlist = deptMapper.getDeptPostList();
  31. for(Dept dept : dlist)
  32. {
  33. System.out.println(dept.getDname());
  34. List<Post> postList = dept.getPosts();
  35. for(Post post : postList)
  36. {
  37. System.out.println(post.getPname());
  38. }
  39. }
  40. }
  41.  
  42. } 

2返回值结果的处理总结

使用resultType:指定的是返回值类型的完全限定名,只能用在单表查询或者定义vo的情况,如果是定义vo不能将关联的数据封装为需要获得某个类的对象

使用resultMap:不需要定义vo类,将关联数据对应的类,作为另外一个类的属性。

第一步:定义resultMap

第二步:引用resultMap

使用resultMap:用来多表关联的复杂查询中,通过需要将关联查询的数据封装为某个实体类对象,如果有特殊业务需要或者说明需要将管理数据封装为实体类的对象,使用resultMap

MyBatis之多表关联查询的更多相关文章

  1. MyBatis 中两表关联查询MYSQL (14)

    MyBatis 中两表关联查询MYSQL 1.创建数据库表语句 2.插入测试数据 3.pom文件内容 <?xml version="1.0" encoding="U ...

  2. Mybatis【15】-- Mybatis一对一多表关联查询

    注:代码已托管在GitHub上,地址是:https://github.com/Damaer/Mybatis-Learning ,项目是mybatis-11-one2one,需要自取,需要配置maven ...

  3. MyBatis笔记----多表关联查询两种方式实现

    数据库 方式一:XML 按照下面类型建立article表 Article.java package com.ij34.model; public class Article { private int ...

  4. JAVA入门[9]-mybatis多表关联查询

    概要 本节要实现的是多表关联查询的简单demo.场景是根据id查询某商品分类信息,并展示该分类下的商品列表. 一.Mysql测试数据 新建表Category(商品分类)和Product(商品),并插入 ...

  5. MyBatis学习总结(三)——多表关联查询与动态SQL

    在上一章中我们学习了<MyBatis学习总结(二)——MyBatis核心配置文件与输入输出映射>,这一章主要是介绍一对一关联查询.一对多关联查询与动态SQL等内容. 一.多表关联查询 表与 ...

  6. mybatis多表关联查询之resultMap单个对象

    resultMap的n+1方式实现多表查询(多对一) 实体类 创建班级类(Clazz)和学生类(Student),并在Student中添加一个Clazz类型的属性,用于表示学生的班级信息. mappe ...

  7. Spring Boot入门系列(十七)整合Mybatis,创建自定义mapper 实现多表关联查询!

    之前讲了Springboot整合Mybatis,介绍了如何自动生成pojo实体类.mapper类和对应的mapper.xml 文件,并实现最基本的增删改查功能.mybatis 插件自动生成的mappe ...

  8. 三、mybatis多表关联查询和分布查询

    前言 mybatis多表关联查询和懒查询,这篇文章通过一对一和一对多的实例来展示多表查询.不过需要掌握数据输出的这方面的知识.之前整理过了mybatis入门案例和mybatis数据输出,多表查询是在前 ...

  9. MyBatis 多表关联查询

    多表关联查询 一对多 单条SQL实现. //根据部门编号查询出部门和部门成员姓名public dept selectAll() thorws Excatipon; //接口的抽象方法 下面是对应接口的 ...

随机推荐

  1. spark

    http://www.cnblogs.com/shishanyuan/p/4723604.html?utm_source=tuicool spark presto2.0计算引擎 http://blog ...

  2. git/gitLab

    gitlab安装:http://www.360doc.com/content/15/0603/14/21631240_475362133.shtml http://www.cnblogs.com/wi ...

  3. POJ 1947 Rebuilding Roads

    树形DP..... Rebuilding Roads Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 8188 Accepted: ...

  4. Ubuntu 14 安装Java(JRE、JDK)

    JRE vs OpenJDK vs Oracle JDK JRE(Java Runtime Environment),它是你运行一个基于Java语言应用程序的所正常需要的环境.如果你不是一个程序员的话 ...

  5. [Asp.net MVC]Asp.net MVC5系列——第一个项目

    目录 概述 创建第一个项目 添加控制器 总结 概述 本教程是个人一步一步学习的总结,希望能帮到正在进入ASP.Net MVC5方向的朋友,个人也是准备进入ASP.NET MVC5领域,虽然艰辛,但是乐 ...

  6. Android学习笔记(十八)——再谈升级数据库

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 之前我们为了保证数据库中的表是最新的,只是简单地在 onUpgrade()方法中删除掉了当前所有的表,然后强制 ...

  7. phpstorm的调试工具xdebug

    1.需求 知道xdebug的使用方法 2.安装xdebug http://www.awaimai.com/1290.html 3.配置phpstorm http://www.awaimai.com/1 ...

  8. [COJ0528]BJOI幸运数

    [COJ0528]BJOI幸运数 试题描述 输入 见"试题描述" 输出 见"试题描述" 输入示例 见"试题描述" 输出示例 见"试 ...

  9. JQGrid 参数、属性API

    JQGrid是一个在jquery基础上做的一个表格控件,以ajax的方式和服务器端通信. JQGrid Demo 是一个在线的演示项目.在这里,可以知道jqgrid可以做什么事情. 下面是转自其他人b ...

  10. C语言 homework(4)

    #include <stdio.h> int main(){ ; i=; ) { sum+=i; i++; } printf("sum=%d\n",sum); ; } ...