SQL 语句得出的列名与 BOResultMap 一致。
<select parameterType="java.lang.Integer" resultMap="BOResultMap"> SELECT b.id, b.title, b.author_id AS authorId, a.id AS "user_id", a.username, a.email FROM blog b LEFT JOIN author a ON b.author_id=a.id where b.id = #{id,jdbcType=INTEGER} </select> 2.3.4 测试 /** * resultMap 方式一测试 */ @Test public void testSelectCustomByIdMap() { SqlSession sqlSession = sqlSessionFactory.openSession(); BlogMapper blogMapper = sqlSession.getMapper(BlogMapper.class); BlogCustom blogCustom = blogMapper.selectCutomByIdMap(1); System.out.println(ToStringBuilder.reflectionToString(blogCustom, ToStringStyle.MULTI_LINE_STYLE)); }得出的结果
其实该类型也可以配置对应 BlogBO 类对应的方式, 在此不做过多的讲解。
2.4 resultMap + association 方式 2.4.1 创建对象创建一个类BlogCustom, 该类继承于 Blog 类, 在该类上添加 Author 对象作为成员变量
2.4.2 创建 resultMap <resultMap type="com.homejim.mybatis.entity.BlogCustom" extends="BaseResultMap"> <association property="author" javaType="com.homejim.mybatis.entity.Author"> <id column="user_id" jdbcType="INTEGER" property="id" /> <result column="username" jdbcType="VARCHAR" property="username" /> <result column="email" jdbcType="VARCHAR" property="email" /> </association> </resultMap>或者, 可以引用别的 Mapper 中的结果集。
<resultMap type="com.homejim.mybatis.entity.BlogCustom" extends="BaseResultMap"> <association property="author" javaType="com.homejim.mybatis.entity.Author" resultMap="com.homejim.mybatis.mapper.AuthorMapper.BaseResultMap"> </association> </resultMap> 2.4.3 创建接口方法和XML 语句 /** * 根据博客的 id 获取博客及作者的信息, resultMap + association方式 * @param id * @return */ BlogCustom selectCutomByIdAMap(int id);SQL 语句
<select parameterType="java.lang.Integer" resultMap="CustomResultMap"> SELECT b.id, b.title, b.author_id AS authorId, a.id AS "user_id", a.username, a.email FROM blog b LEFT JOIN author a ON b.author_id=a.id where b.id = #{id,jdbcType=INTEGER} </select> 2.4.4 测试 /** * resultMap + association 方式测试 */ @Test public void testSelectCustomByIdAMap() { SqlSession sqlSession = sqlSessionFactory.openSession(); BlogMapper blogMapper = sqlSession.getMapper(BlogMapper.class); BlogCustom blogCustom = blogMapper.selectCutomByIdAMap(1); System.out.println(ToStringBuilder.reflectionToString(blogCustom, ToStringStyle.MULTI_LINE_STYLE)); }结果
2.5 resultMap + association 嵌套查询以上几种方法都是通过 left join 的 SQL 语句获取多个对象的结果。 还可以经过简单的 SQL 语句, 多次查询而转化为我们需要的结果。
2.5.1 2.5.1 创建对象创建一个类BlogCustom, 该类继承于 Blog 类, 在该类上添加 Author 对象作为成员变量
2.5.2 创建 resultMap <resultMap type="com.homejim.mybatis.entity.BlogCustom" extends="BaseResultMap"> <association property="author" column="author_id" select="com.homejim.mybatis.mapper.AuthorMapper.selectById" fetchType="eager" /> </resultMap>该结果集与之前的不同了, association 标签中使用了 select 属性。
select: 另一个查询的 id, mybatis 会额外执行这个查询来获取嵌套的结果
column: 列名(别名), 将主查询中的列作为嵌套查询的参数, 多个参数使用逗号(英文)分隔开。