1. 程式人生 > >MyBitis(iBitis)系列隨筆之四:多表(多對一查詢操作)

MyBitis(iBitis)系列隨筆之四:多表(多對一查詢操作)

          前面幾篇部落格介紹的都是單表對映的一些操作,然而在我們的實際專案中往往是用到多表對映。至於多表對映的關鍵要用到mybitis的association來加以實現。
          這篇介紹的是多表中的多對一表關聯查詢
          先做一些準備工作
  建立兩張表:一張是使用者,一張是使用者所對應的移動手機,一戶使用者可以有部移動手機。
  
    這是使用者t_user表
                             

     這是行動電話t_mobile表
       

建立表對應的JavaBean物件

User物件

package com.jefry;

public class User {
	private int id;
	private String userName;
	private String password;

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


Mobile物件:

package com.jefry;

public class Mobile {
	private int id;
	private String telnumber;
	private User user;

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

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

}


修改configure檔案物件別名:

<typeAliases>
		<typeAlias alias="User" type="com.jefry.User"/>
		<typeAlias alias="Mobile" type="com.jefry.Mobile"/>
</typeAliases>



修改表對映檔案

<?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="mobile">
	 <resultMap id="userResultMap" type="Mobile"> 
	    <id property="id" column="id"/>
	    <result property="telnumber" column="telnumber"/>
	    <association property="user" javaType="User">
	    	   <id property="id" column="id"/> 
	           <result property="userName" column="name"/> 
	           <result property="password" column="pass"/> 
	    </association>
     </resultMap>
	
	<!--多表查詢操作-->
	<select id="selectMobile" 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 m.id = #{id} 
	</select>
</mapper>

ok完成了,執行結果如下: