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

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

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

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

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

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

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

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

      这是用户t_user表

             
        这是移动电话t_mobile表
              MyBitis(iBitis)系列随笔之五:多表(一对多关联查询)_第1张图片
           在Java实体对象对中,一对多可以根据List和Set来实现,两者在mybitis中都是通过collection标签来配合使用,稍后会做详细配置介绍

          创建表对应的JavaBean对象

Mobile  Bean

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

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;
	}

}

 

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

<?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

 

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();
		}
	}

}

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

你可能感兴趣的:(MyBitis(iBitis)系列随笔之五:多表(一对多关联查询))