直接上代码
一对一查询:
<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。初学者出现情况