mybatis-高级结果映射之一对一(多种方式, 有没提到的你找我) (2)

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)); }

得出的结果

resultMap结果

其实该类型也可以配置对应 BlogBO 类对应的方式, 在此不做过多的讲解。

2.4 resultMap + association 方式 2.4.1 创建对象

创建一个类BlogCustom, 该类继承于 Blog 类, 在该类上添加 Author 对象作为成员变量

BlogCustom

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)); }

结果

resultMap Association 结果

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: 列名(别名), 将主查询中的列作为嵌套查询的参数, 多个参数使用逗号(英文)分隔开。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyzyjg.html