zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    [大话数据结构]线性表之单链表结构和顺序存储结构
    [大话数据结构]算法
    [C#编程参考]把图像转换为数组的两种实现
    [C#绘图]在半透明矩形上绘制字符串
    [C#绘图]Matrix类
    在C#调用C++的DLL方法(二)生成托管的DLL
    在C#调用C++的DLL方法(一)生成非托管dll
    彻底解决 LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
    修复./mysql/proc
    linux 网络连接数查看方法
  • 原文地址:https://www.cnblogs.com/softidea/p/5700711.html
Copyright © 2011-2022 走看看