解决方案 »

  1.   

    主要就是result map, association, collection, columnPrefix等
    下面的这个例子里几乎都有了,可以参考一下。
    <?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>
      

  2.   


    非常谢谢你回复这么多,不过我用的是ibatis里面没有collections 、association 这里元素resultMap里面只有一个result和discriminator