MyBitis(iBitis)系列随笔之一:MyBitis入门实例

MyBitis(iBitis)系列随笔之二:类型别名(typeAliases)与表-对象映射(ORM)

MyBitis(iBitis)系列随笔之三:简单实现CRUD

MyBitis(iBitis)系列随笔之四:多表(多对一查询操作)

MyBitis(iBitis)系列随笔之五:多表(一对多关联查询)

MyBitis(iBitis)系列随笔之六:mybitis与spring集成

这篇博文介绍的是多表中的一对多表关联查询
还是按照上一篇的步骤,先做一些准备工作;创建两张表:一张是用户,一张是用户所对应的移动手机,一户用户可以有部移动手机。
      这是用户t_user表


        这是移动电话t_mobile表
              
           在Java实体对象对中,一对多可以根据List和Set来实现,两者在mybitis中都是通过collection标签来配合使用,稍后会做详细配置介绍

创建表对应的JavaBean对象

Mobile  Bean

[java] view plaincopy
  1. public class Mobile {
  2. private int id;
  3. private String telnumber;
  4. public int getId() {
  5. return id;
  6. }
  7. public void setId(int id) {
  8. this.id = id;
  9. }
  10. public String getTelnumber() {
  11. return telnumber;
  12. }
  13. public void setTelnumber(String telnumber) {
  14. this.telnumber = telnumber;
  15. }
  16. }

User Bean

[java] view plaincopy
  1. package com.jefry;
  2. import java.util.List;
  3. public class User {
  4. private int id;
  5. private String userName;
  6. private String password;
  7. private List<Mobile> mobiles; //这里也可以是Set集合
  8. public List<Mobile> getMobiles() {
  9. return mobiles;
  10. }
  11. public void setMobiles(List<Mobile> mobiles) {
  12. this.mobiles = mobiles;
  13. }
  14. public String getUserName() {
  15. return userName;
  16. }
  17. public void setUserName(String userName) {
  18. this.userName = userName;
  19. }
  20. public String getPassword() {
  21. return password;
  22. }
  23. public void setPassword(String password) {
  24. this.password = password;
  25. }
  26. public int getId() {
  27. return id;
  28. }
  29. public void setId(int id) {
  30. this.id = id;
  31. }
  32. }

在上一篇的基础上改写映射文件:

[html] view plaincopy
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="user">
  6. <resultMap id="userResultMap" type="User">
  7. <id property="id" column="id" javaType="int" jdbcType="INTEGER" />
  8. <result property="userName" column="name" javaType="string" jdbcType="VARCHAR"/>
  9. <result property="password" column="pass" javaType="string" jdbcType="VARCHAR"/>
  10. <collection property="mobiles" column="userid" ofType="Mobile">
  11. <id property="id" column="id" javaType="int" jdbcType="INTEGER"/>
  12. <result property="telnumber" column="telnumber" javaType="string" jdbcType="VARCHAR"/>
  13. </collection>
  14. </resultMap>
  15. <!--多表查询操作-->
  16. <select id="selectUser" parameterType="int"  resultMap="userResultMap" >
  17. <!--分别为mobile的主键id与user的主键id赋值别名,避免因为两个表字段名称相同而注入到对应对象名称冲突-->
  18. select m.id m_id,m.telnumber,u.id u_id,u.name,u.pass from t_mobile m,t_user u where m.userid = u.id and u.id = #{id}
  19. </select>
  20. </mapper>

最后,通过测试OK

[java] view plaincopy
  1. public class Test {
  2. static String resource = "mybatis-config.xml";
  3. public static void main(String[] args) throws IOException {
  4. InputStream inputStream = Resources.getResourceAsStream(resource);
  5. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  6. SqlSession session = sqlSessionFactory.openSession();
  7. try {
  8. User user = session.selectOne("user.selectUser", 1);
  9. List<Mobile> mobiles = user.getMobiles();
  10. for(Mobile mobile : mobiles) {
  11. System.out.println("user:" + user.getUserName() + ",tel:" + mobile.getTelnumber());
  12. }
  13. } finally {
  14. session.close();
  15. }
  16. }
  17. }

源码下载:http://download.csdn.net/detail/jefry_xdz/5229451

http://blog.csdn.net/jefry_xdz/article/details/8767358

http://www.cnblogs.com/yinkh/p/5564033.html

MyBitis(iBitis)系列随笔之五:多表(一对多关联查询)相关推荐

  1. MyBitis(iBitis)系列随笔之二:类型别名(typeAliases)与表-对象映射(ORM)

    类型别名(typeAliases):      作用:通过一个简单的别名来表示一个冗长的类型,这样可以降低复杂度.     类型别名标签typeAliases中可以包含多个typeAlias,如下 [ ...

  2. MyBitis(iBitis)系列随笔之六:mybitis与spring集成

    目前Spring官方还没有出整合Mybatis的特性,但是mybitis比较给力,开发了一个mybatis-spring插件,达到与Spring的完美整合目的. 在与Spring集成前,一方面我们需要 ...

  3. Mybatis多表关联查询(一对多关联查询)

    1.Mybatis一级缓存与二级缓存 目的:提高查询效率,降低数据库查询压力,提升系统整体性能. 一级缓存:默认开启,Session级别,同一个会话内生效. 命中缓存的情况:statementid.S ...

  4. NHibernate之旅(10):探索父子(一对多)关联查询

    本节内容 关联查询引入 一对多关联查询 1.原生SQL关联查询 2.HQL关联查询 3.Criteria API关联查询 结语 关联查询引入 在NHibernate中提供了三种查询方式给我们选择:NH ...

  5. mybatis一对多关联查询_Mybatis 一对一、一对多的关联查询 ?

    <mapper namespace="com.lcb.mapping.userMapper"> <!--association 一对一关联查询 --> &l ...

  6. 使用 Mybatis-Plus 进行一对多关联查询

    如果公司允许使用 Mybatis-Plus 进行一对多关联查询,可以在 Service 层中使用 Mybatis-Plus 提供的 Wrapper 来实现.以下是一个使用 Mybatis-Plus W ...

  7. mybatis一对多关联查询两种方式

    mybatis一对多关联查询两种方式 前提: 方式一: 方式二: 前提: 现在有两张表,学生表跟教师表,一个教师对应多个学生 教师表: CREATE TABLE `teacher` (`id` int ...

  8. Mybatis一对多关联查询,返回值Map,字段自动映射

    功能描述 由于查询字段和表名都要支持动态配置,故查询返回值需要为List<Map<String,Object>>,不定义值对象. 查询结果列需要支持自动映射,不配置类属性和数据 ...

  9. mysql的分页怎么不对_mysql一对多关联查询分页错误问题的解决方法

    xml问价中查询数据中包含list,需要使用collection .... .... 这样的查询系统封装的通用分页查询是不对的,所以需要自己sql中加入分页解决 SELECT you.nick_nam ...

最新文章

  1. CCIE PASSED
  2. OC的项目网址(自己编写的项目)
  3. Java字符串分割(split)
  4. [转]Java游戏引擎
  5. C++杂记之this指针
  6. Julia: Array 很不同!
  7. WinForm控件之【MonthCalendar】
  8. 用计算机唱歌 丑八怪乐谱,得力计算器乐谱丑八怪 | 手游网游页游攻略大全
  9. 项目管理小小知识点总结
  10. 少儿编程Scratch学习教程2--官方初学指南
  11. HDU 1024 Max Sum Plus Plus 动态规划
  12. 填数字游戏ABCD*E=DCBA
  13. PMP笔记:质量管理的七个工具
  14. jlu C删除重复元素
  15. 二、Python3 基本数据类型
  16. arm-none-eabi-gcc编译、链接选项详解
  17. SIKI学院:MySQL数据库从零到精通:十九:课时 23 : 22-查询语句和排序
  18. 作业盒子生端AndrOid,作业盒子小学下载安装学生版
  19. SSM框架工作原理、作用及使用方法
  20. python对象、类

热门文章

  1. java 进制转换算法_算法笔记_033:十六进制转八进制(Java)
  2. vite配置 vite.config.js
  3. Bootstrap 字体图标 Bootstrap Glyphicon Components
  4. 移动Web开发的十条军规
  5. 并查集——最小连接路径和Kruskal(hdu1301)
  6. 博弈——Nim博弈(hdu2176,1850,1851,1907,1849)
  7. Python数据可视化实战——iris数据集可视化
  8. 【今日CV 计算机视觉论文速览】Mon, 4 Mar 2019
  9. MXNet.gluon——图像I/O
  10. Kubernetes-基本介绍/核心功能/相关术语(一)