1. 程式人生 > >mybatis一對一,一對多,多對多的關聯查詢

mybatis一對一,一對多,多對多的關聯查詢

mybatis中一對一,一對多,多對多的處理:
http://www.cnblogs.com/yaobolove/p/5444046.html

http://www.360doc.com/content/14/0205/21/834950_350059484.shtml

http://www.cnblogs.com/junge/p/5145881.html


一對一: 使用association
<association property="teacher" javaType="Teacher">   


一對多和多對多:collection 
 <collection property="orders" ofType="com.yc.m.Orders">
 
 注意:相同欄位要設定別名
如果兩表聯查,主表和明細表的主鍵都是id的話,明細表的多條只能查詢出來第一條。
級聯查詢的時候,主表和從表有一樣的欄位名的時候,在mysql上命令查詢是沒問題的。

但在mybatis中主從表需要為相同欄位名設定別名。設定了別名就OK了。

一對多關聯查詢示例:一個角色對應多個許可權

<resultMap id="rolePowerMap" type="com.lakala.creditloan.manager.model.Role">
	    <id column="roleId" property="roleId" jdbcType="INTEGER" />
		<result column="ROLE_NAME" property="roleName" jdbcType="VARCHAR" />
		<result column="rdescri" property="describe" jdbcType="VARCHAR" />
		<collection property="powerlist"  ofType="com.lakala.creditloan.manager.model.Power">
		    <id column="powerid" property="id" jdbcType="INTEGER" />
		    <result column="POWER_NAME" property="powerName" jdbcType="VARCHAR" />
		    <result column="ACTION_URL" property="actionUrl" jdbcType="VARCHAR" />
		    <result column="PID" property="pid" jdbcType="INTEGER" />
		    <result column="LV" property="lv" jdbcType="INTEGER" />
		    <result column="ACTION_TYPE" property="actionType" jdbcType="INTEGER" />
		    <result column="pdescri" property="descri" jdbcType="VARCHAR" />
        </collection>
	</resultMap>
<select id="selectByRoleId" parameterType="java.lang.Integer" resultMap="rolePowerMap">
		  select r.ID roleId,r.ROLE_NAME,r.DESCRI rdescri,
			     p.ID powerid,p.POWER_NAME,p.ACTION_URL,p.ACTION_URL,p.PID,p.LV,p.ACTION_TYPE,p.DESCRI pdescri
			from rcs_role  r 
			     left  join rcs_role_power rp on r.id=rp.ROLE_ID 
			     left  join rcs_power p on p.ID=rp.POWER_ID  
			where r.ID=#{roleId,jdbcType=INTEGER}
	</select>