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

    xiaoxiao2026-03-17  11

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

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

              创建表对应的JavaBean对象

    Mobile  Bean

    [java] view plain copy public class Mobile {      private int id;      private String telnumber;        public int getId() {          return id;      }        public void setId(int id) {          this.id = id;      }        public String getTelnumber() {          return telnumber;      }        public void setTelnumber(String telnumber) {          this.telnumber = telnumber;      }    }  

    User Bean

    [java] view plain copy package com.jefry;    import java.util.List;    public class User {      private int id;      private String userName;      private String password;            private List<Mobile> mobiles; //这里也可以是Set集合        public List<Mobile> getMobiles() {          return mobiles;      }        public void setMobiles(List<Mobile> mobiles) {          this.mobiles = mobiles;      }        public String getUserName() {          return userName;      }        public void setUserName(String userName) {          this.userName = userName;      }        public String getPassword() {          return password;      }        public void setPassword(String password) {          this.password = password;      }        public int getId() {          return id;      }        public void setId(int id) {          this.id = id;      }    }  

     

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

    [html] view plain copy <?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="user">       <resultMap id="userResultMap" type="User">           <id property="id" column="id" javaType="int" jdbcType="INTEGER" />          <result property="userName" column="name" javaType="string" jdbcType="VARCHAR"/>          <result property="password" column="pass" javaType="string" jdbcType="VARCHAR"/>          <collection property="mobiles" column="userid" ofType="Mobile">                <id property="id" column="id" javaType="int" jdbcType="INTEGER"/>                <result property="telnumber" column="telnumber" javaType="string" jdbcType="VARCHAR"/>            </collection>         </resultMap>            <!--多表查询操作-->      <select id="selectUser" parameterType="int"  resultMap="userResultMap" >          <!--分别为mobile的主键id与user的主键id赋值别名,避免因为两个表字段名称相同而注入到对应对象名称冲突-->          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}       </select>  </mapper>  

     

    最后,通过测试OK

     

    [java] view plain copy public class Test {      static String resource = "mybatis-config.xml";        public static void main(String[] args) throws IOException {          InputStream inputStream = Resources.getResourceAsStream(resource);          SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);          SqlSession session = sqlSessionFactory.openSession();          try {              User user = session.selectOne("user.selectUser"1);              List<Mobile> mobiles = user.getMobiles();              for(Mobile mobile : mobiles) {                  System.out.println("user:" + user.getUserName() + ",tel:" + mobile.getTelnumber());              }                                      } finally {              session.close();          }      }    } 
    转载请注明原文地址: https://ju.6miu.com/read-1308055.html
    最新回复(0)