67,513
社区成员
发帖
与我相关
我的任务
分享
public class Staff {
private Integer id;
private String name;
private Depart depart;
//..省略getter/setter方法
}
public class Depart {
private Integer id;
private String name;
//..省略getter/setter方法
}
<resultMap class="staff" id="staff_base_map">
<result property="id" column="staff_id"/>
<result property="name" column="staff_name"/>
<result property="depart" column="???" />
</resultMap>
<select id="load" parameterClass="java.lang.Integer" resultMap="staff_base_map">
select s.id staff_id,s.name staff_name,d.id depart_id,d.name depart_name
from t_staff s inner join t_depart d on s.depart_id = d.id
where s.id = #id#
</select>
<--
这个depart不知道怎么映射
有试过
<result property="depart.id" column="depart_id" />
<result property="depart.id" column="depart_id" />
但是报错..
也有试过
<result property="depart.id" resultMap="depart_base_map" />
<resultMap class="depart" id="depart_base_map">
<result property="id" column="departId"/>
<result property="name" column="departname"/>
</resultMap>
这样也错,
-->
<?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">
<!--namespace非常重要:必须是Mapper类的全路径-->
<mapper namespace="com.tur.mapper.UserMapper">
<sql id="columns">id, age, name</sql>
<!-- [[1]] 简单的JavaBean,直接使用resultType: 数据库表的列与JavaBean的属性对应 -->
<select id="selectUser" parameterType="int" resultType="User">
SELECT <include refid="columns"/>
FROM user WHERE id = #{id}
</select>
<select id="selectUserByMap" parameterType="map" resultType="User">
SELECT <include refid="columns"/>
FROM user WHERE id = #{id} AND name=#{name}
</select>
<select id="selectUsersByName" parameterType="string" resultType="com.tur.domain.User">
SELECT <include refid="columns"/>
FROM user WHERE name = #{name}
</select>
<!-- [[2]] 可以使用resultMap映射自己的类: 例如多表查询时 -->
<select id="selectUserById" parameterType="int" resultMap="userResultMap">
SELECT <include refid="columns"/>
FROM user WHERE id = #{id}
</select>
<select id="selectUserByIdWithParam" resultMap="userResultMap">
SELECT <include refid="columns"/>
FROM user WHERE id = #{id} limit #{offset},#{size}
</select>
<resultMap id="userResultMap" type="com.tur.domain.User">
<id property="id" column="id"/>
<result property="age" column="age"/>
<result property="name" column="name"/>
</resultMap>
<!-- [[3]] 使用resultMap映射,属性是另一个类的对象 -->
<select id="selectFullUserById" parameterType="int" resultMap="userAssociationResultMap">
SELECT
user.id as user_id, <!-- 重命名列非常有用 -->
user.age as user_age,
user.name as user_name,
ui.id as user_info_id,
ui.user_id as user_info_user_id,
ui.telephone as user_info_telephone,
ui.address as user_info_address
<!--FROM user, user_info ui-->
FROM user
LEFT JOIN user_info ui ON user.id=ui.user_id
WHERE user.id=#{id}
<!--AND user.id=ui.user_id-->
</select>
<resultMap id="userAssociationResultMap" type="com.tur.domain.User">
<id property="id" column="user_id"/>
<result property="age" column="user_age"/>
<result property="name" column="user_name"/>
<!--嵌套映射中还可以使用resultMap: association, collection
还可以使用嵌套查询,但是会产生N+1问题,在大数量的数据库里会有很大的性能问题-->
<!--<association property="userInfo" column="user_info_id" javaType="domain.UserInfo">
<id property="id" column="user_info_id"/>
<result property="userId" column="user_info_user_id"/>
<result property="telephone" column="user_info_telephone"/>
<result property="address" column="user_info_address"/>
</association>-->
<!--association是一对一关系,collection是一对多关系-->
<!--使用columnPrefix可以使result map重用-->
<!--column用在嵌套查询的时候有用,下面的嵌套结果resultMap情形可以不用-->
<association property="userInfo" column="user_info_id" columnPrefix="user_info_" resultMap="userInfoResultMap"/>
</resultMap>
<resultMap id="userInfoResultMap" type="com.tur.domain.UserInfo">
<id property="id" column="id"/>
<result property="userId" column="user_id"/>
<result property="telephone" column="telephone"/>
<result property="address" column="address"/>
</resultMap>
<select id="selectUsersWithNames" parameterType="list" resultType="com.tur.domain.User">
SELECT <include refid="columns"/>
FROM user
WHERE name in
<foreach item="item" index="index" open="(" separator="," close=")" collection="list">
#{item}
</foreach>
</select>
</mapper>