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

简介: MyBitis(iBitis)系列随笔之一:MyBitis入门实例 MyBitis(iBitis)系列随笔之二:类型别名(typeAliases)与表-对象映射(ORM) MyBitis(iBitis)系列随笔之三:简单实现CRUD MyBitis(iBitis)系列随笔之四:多表(...

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 plain  copy
 
  1. public class Mobile {  
  2.     private int id;  
  3.     private String telnumber;  
  4.   
  5.     public int getId() {  
  6.         return id;  
  7.     }  
  8.   
  9.     public void setId(int id) {  
  10.         this.id = id;  
  11.     }  
  12.   
  13.     public String getTelnumber() {  
  14.         return telnumber;  
  15.     }  
  16.   
  17.     public void setTelnumber(String telnumber) {  
  18.         this.telnumber = telnumber;  
  19.     }  
  20.   
  21. }  


User Bean

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

 

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

[html]  view plain  copy
 
  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.     <!--多表查询操作-->  
  17.     <select id="selectUser" parameterType="int"  resultMap="userResultMap" >  
  18.         <!--分别为mobile的主键id与user的主键id赋值别名,避免因为两个表字段名称相同而注入到对应对象名称冲突-->  
  19.         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}   
  20.     </select>  
  21. </mapper>  

 

最后,通过测试OK

 

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


源码下载: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

相关文章
|
8月前
|
SQL 关系型数据库 MySQL
MySQL数据库练习题(单表查询,多表关联查询)(一)
MySQL数据库练习题(单表查询,多表关联查询)
400 0
|
8月前
|
关系型数据库 MySQL 数据库
MySQL数据库练习题(单表查询,多表关联查询)(二)
MySQL数据库练习题(单表查询,多表关联查询)(二)
150 0
|
4月前
|
SQL Oracle 关系型数据库
MySQL基础-多表查询
MySQL基础-多表查询
|
SQL 数据库
基础DQL(数据查询)——多表关系及多表查询概述
我们要想在数据库的层面上体现这种关系,就要建立第三张中间表,中间表至少包含两个外键,分别关联两方主键
82 0
基础DQL(数据查询)——多表关系及多表查询概述
|
关系型数据库 MySQL 数据库
MySQL数据库:第八章:连接查询
MySQL数据库:第八章:连接查询
|
关系型数据库 MySQL 数据库
MySQL数据库:第七章:分组查询
MySQL数据库:第七章:分组查询
|
SQL JavaScript 关系型数据库
MySQL基础教程15——多表查询
笛卡尔积显示出来的数据会有我们不需要的,因此我们可以用条件筛选掉不需要的条件。
|
SQL 关系型数据库 MySQL
MySQL基础-多表查询概述
多表查询就是指从多张表中查询数据。
68 0
|
关系型数据库 MySQL
|
Java 数据库连接 mybatis
【MyBatis】学习笔记15:通过分步查询解决一对多或多对多问题
【MyBatis】学习笔记15:通过分步查询解决一对多或多对多问题
207 0
【MyBatis】学习笔记15:通过分步查询解决一对多或多对多问题