mybatis学习遇到的问题

直接上代码

一对一查询:

<mapper namespace="com.inspur.idcrm.mapper.UserMapper">
	<resultMap type="User" id="userMap">
		<id property="id" column="id"/>
   	 	<result property="userID" column="USER_ID"/>
   	 	<result property="userName" column="USER_NAME"/>
   	 	<result property="userSex" column="USER_SEX"/>
   	 	<result property="userTel" column="USER_TEL"/>
   	 	<result property="userEmail" column="USER_EMAIL"/>
		<association property="customer" column="USER_CUSTOMERID" javaType="Customer">              
			<id property="id" column="id" />              
	   	 	<result property="customerCode" column="CUSTOMER_CODE"/>
	   	 	<result property="customerName" column="CUSTOMER_NAME"/>
	   	 	<result property="customeraddress" column="CUSTOMER_ADDRESS"/>
	   	 	<result property="customerContancts" column="CUSTOMER_CONTANCTS"/>
	   	 	<result property="customerTel" column="CUSTOMER_TEL"/>
	   	 	<result property="customerEmail" column="CUSTOMER_EMAIL"/>
	   	 	<result property="customerMemo" column="CUSTOMER_MEMO"/>
	   	 	<result property="customerTypeID" column="CUSTOMER_TYPEID"/>
	   	 	<result property="manageName" column="MANAGE_NAME"/>
	   	 	<result property="manager" column="MANAGER"/>
	   	 	<result property="managerTel" column="MANAGER_TEL"/>
	   	 	<result property="customerTeName" column="CUSTOMER_TE_NAME"/>
	   	 	<result property="customerTeTel" column="CUSTOMER_TE_TEL"/>        
		</association> 
		<collection property="roleList" javaType="ArrayList" column="id" ofType="Role" select="selectUserRoles" >  
			<id property="id" column="id"/>
   	 		<result property="roleName" column="role_name" javaType="string" jdbcType="VARCHAR"/>
   	 		<result property="roleDesc" column="role_desc" javaType="string" jdbcType="VARCHAR"/>
		</collection>
	</resultMap>

 customer对象与User是一对一关系,通过配置association 进行关联,查询用户信息,同时把用户所属单位也查询出来。

一对多关系

配置collection进行关联,查询用户信息把每个用户的所有角色信息也查询出来

<select id="getUserList2"  parameterType="User" resultType="java.util.List" resultMap="userMap">
		select *
		 from t_user as u, t_customer as c where 1=1 and u.USER_CUSTOMERID = c.id
		 <if test="id!=null and id!=''">
			and id=#{id}
		</if>
		<if test="userID!=null and userID!=''">
			and USER_ID=#{userID}
		</if>
		<if test="userName!=null and userName!=''">
			and USER_NAME LIKE CONCAT(CONCAT('%', #{userName}),'%')
		</if>
		<if test="userSex!=null and userSex!=''">
			and USER_SEX =#{userSex}
		</if>
		<if test="userTel!=null and userTel!=''">
			and USER_TEL LIKE CONCAT(CONCAT('%', #{userTel}),'%')
		</if>
		<if test="userEmail!=null and userEmail!=''">
			and USER_EMAIL LIKE CONCAT(CONCAT('%', #{userEmail}),'%')
		</if>
		<if test="customer!=null and customer!=''">
			and USER_CUSTOMERID=#{customer.id}
		</if>
	</select>
	
	<select id="selectUserRoles" resultType="Role" parameterType="int">  
		select r.id,r.role_name  as roleName,r.role_desc as roleDesc from t_role r left join t_user_role u on r.id=u.ROLE_ID where u.USER_ID=#{id}

	</select> 	

<select id="selectUserRoles" resultType="Role" parameterType="int"> 
select r.id,r.role_name  as roleName,r.role_desc as roleDesc from t_role r left join t_user_role u on r.id=u.ROLE_ID where u.USER_ID=#{id}
</select>

这个地方遇到一个问题,由于返回时resultType是javabean,如果sql语句中不加别名,无法与javabean的属性进行一一对应,如果不添加别名,需要配置一个role的resultMap。初学者出现情况

猜你喜欢

转载自zhb01.iteye.com/blog/1955703