List<User> getUsers();
<select id="getUsers" resultType="User">
    select * from user;
</select>
Map<String, Object> getUsers();
<select id="getUsers" resultType="map">
    select * from user;
</select>
    @MapKey("id")
    Map<Integer, User> getUsers();
    <select id="getUsers" resultType="User">
        select * from user;
    </select>
mapUnderscoreToCamelCase=true 时可以自动将下划线转为驼峰规则,如果还不能满足要求就需要自定义返回类型。如下:
List<User> getUsers();
<select id="getUsers" resultMap="myMap">
    select u.id, u.name, u.did, d.name dname from user u, dept d where u.did=d.id;
</select>
<resultMap id="myMap" type="User">
    <id property="id" column="id"/>
    <result property="name" column="name"/>
    <result property="dept.id" column="did"/>
    <result property="dept.name" column="dname"/>
</resultMap>
association 可以将一个 java bean 对象 dept 封装到起来,如:
public class User {
    private int id;
    private String name;
    private DePartment dept;
}
<resultMap id="myMap" type="User">
    <id property="id" column="id"/>
    <result property="name" column="name"/>
    <association property="dept" javaType="DePartment">
        <result property="id" column="did"/>
        <result property="name" column="dname"/>
    </association>
</resultMap>
<!-- association 可以分步查找 -->
<resultMap id="myMap" type="User">
    <id property="id" column="id"/>
    <result property="name" column="name"/>
    <!-- 指定 select 语句的 id 和要传入的参数 id -->
    <association property="dept" javaType="DePartment" select="getDept" column="id"/>
</resultMap>
<select id="getUsers" resultMap="myMap">
    select id, name from user;
</select>
<select id="getDept" resultType="DePartment">
    select id, name from dept where id=#{id};
</select>
collection 可以将 java bean 对象的 list 集合 users 封装到起来,如:
public class DePartment {
    private int id;
    private String name;
    private List<User> users;
}
<resultMap id="myMap" type="DePartment">
    <id property="id" column="did"/>
    <result property="name" column="dname"/>
    <collection property="users" ofType="User">
        <result property="id" column="id"/>
        <result property="name" column="name"/>
    </collection>
</resultMap>
<select id="getDept" resultMap="myMap">
    select u.id, u.name, u.did, d.name dname from user u, dept d where u.did=d.id;
</select>
也可以分步查找,注意 N + 1 问题
<resultMap id="myMap" type="DePartment">
    <id property="id" column="id"/>
    <result property="name" column="name"/>
    <collection property="users" ofType="User" select="getUsers" column="id"/>
</resultMap>
<select id="getUsers" resultType="User">
    select id, name from user where did=#{did};
</select>
<select id="getDept" resultMap="myMap">
    select id, name from dept;
</select>
注意:
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
使用时如果用到了就会去查找,否则不会查找:
List<DePartment> depts = userMapper.getDept();
System.out.println(depts.get(0).getName());
System.out.println(depts.get(0).getUsers());
mybatis 查找时的 sql 如下,可以看到用到 dept 的 users 属性时才进行查找:
2018-09-06 06:50:30 DEBUG getDept9:159 - ==>  Preparing: select id, name from dept; 
2018-09-06 06:50:30 DEBUG getDept9:159 - ==> Parameters: 
2018-09-06 06:50:31 DEBUG getDept9:159 - <==      Total: 2
dev
2018-09-06 06:50:31 DEBUG getUsers9:159 - ==>  Preparing: select id, name from user where did=?; 
2018-09-06 06:50:31 DEBUG getUsers9:159 - ==> Parameters: 1(Integer)
2018-09-06 06:50:31 DEBUG getUsers9:159 - <==      Total: 2
[User{id=1, name=‘binarylei‘, age=0, sex=‘null‘}, User{id=3, name=‘binarylei3‘, age=0, sex=‘null‘}]
每天用心记录一点点。内容也许不重要,但习惯很重要!
原文:https://www.cnblogs.com/binarylei/p/9746984.html