10 输出映射

张创琦 2022.03.13

1 resultType

resultType:执行 sql 得到 ResultSet 转换的类型,使用类型的完全限定名或别名。如果返回的是集合,设置的是集合元素的类型,而不是集合本身。resultType 和 resultMap, 不能同时使用。

1 输出简单类型

见下面。

2 输出 pojo 类型

见下面。

3 输出Map类型

  1. 当我们只需要查询表中几列数据的时候可以将sql的查询结果作为Mapkeyvalue。一般使用的是Map<Object,Object>. Map 作为接口返回值,sql 语句的查询结果最多只能有一条记录。大于一条记录会抛出TooManyResultsException异常。如果有多行,使用List<Map<Object,Object>>.

见下面。

2 resultMap

resultMap 可以自定义 sql 的结果和 java 对象属性的映射关系。更灵活的把列值赋值给指定属性。常用在列名和 java 对象属性名不一样的情况。

代码见下面。

TeamMapper.java

  1. package com.kkb.mapper;
  2. import com.kkb.pojo.QueryVO;
  3. import com.kkb.pojo.Team;
  4. import org.apache.ibatis.annotations.Param;
  5. import java.util.List;
  6. import java.util.Map;
  7. /**
  8. * ClassName: TeamMapper
  9. * Mapper接口
  10. * @author wanglina
  11. * @version 1.0
  12. */
  13. public interface TeamMapper {
  14. // 1.1 输出简单类型
  15. int getCount();
  16. // 1.2 输出pojo类型
  17. List<Team> queryAll2();
  18. // 1.3 输出map类型
  19. Map<String,Object> queryTwoColumn(int teamId);
  20. List<Map<String,Object>> queryTwoColumnList();
  21. // 2.1
  22. List<Team> queryAll3();
  23. }

TeamMapper.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.kkb.mapper.TeamMapper">
  6. <!--resultMap 和resultType不能同时出现
  7. resultMap:是引用的自己创建resultMap的id-->
  8. <select id="queryAll3" resultMap="baseResultMap">
  9. select * from team;
  10. </select>
  11. <!--创建resultMap:相当于自己编写表中的列与实体类中的属性的映射id:resultMap的名称,要求唯一
  12. type:期待要映射为java的类型
  13. -->
  14. <resultMap id="baseResultMap" type="com.kkb.pojo.Team">
  15. <!--一般主键列用id,其余列用result
  16. column:表示数据库表中的列名,不区分大小写property:表示实体类中的对应的属性名,区分大小写
  17. javaType:实体类中的对应的属性的类型,可以省略,mybatis会自己推断jdbcType="数据库中的类型column的类型" 一般省略
  18. -->
  19. <id column="teamId" property="teamId" javaType="java.lang.Integer" ></id>
  20. <result column="teamName" property="teamName" javaType="java.lang.String"></result>
  21. <result column="location" property="location" javaType="java.lang.String"></result>
  22. <result column="createTime" property="createTime" javaType="java.util.Date"></result>
  23. </resultMap>
  24. </mapper>

TestTeamMapperArgs.java

  1. package com.kkb.test;
  2. import com.kkb.mapper.TeamMapper;
  3. import com.kkb.pojo.QueryVO;
  4. import com.kkb.pojo.Team;
  5. import com.kkb.utils.MybatisUtil;
  6. import org.apache.ibatis.session.SqlSession;
  7. import org.junit.Test;
  8. import java.util.HashMap;
  9. import java.util.List;
  10. import java.util.Map;
  11. /**
  12. * ClassName: TestTeamMapperArg
  13. * 测试输入映射:多个参数
  14. * @author wanglina
  15. * @version 1.0
  16. */
  17. public class TestTeamMapperArg {
  18. private TeamMapper teamMapper = MybatisUtil.getSqlSession().getMapper(TeamMapper.class);
  19. private SqlSession sqlSession = MybatisUtil.getSqlSession();
  20. // 数量1能查询到,但是会乱码
  21. @Test
  22. public void test07(){
  23. int count = teamMapper.getCount();
  24. System.out.println("总共的行数:"+count);
  25. }
  26. // 会乱码
  27. @Test
  28. public void test08(){
  29. Map<String, Object> map = teamMapper.queryTwoColumn(1065);
  30. System.out.println(map);
  31. }
  32. // 会乱码
  33. @Test
  34. public void test09(){
  35. List<Map<String, Object>> list = teamMapper.queryTwoColumnList();
  36. for (Map<String, Object> map : list) {
  37. System.out.println(map);
  38. }
  39. }
  40. // 测试结果正常,能获取全部数据
  41. @Test
  42. public void test10(){
  43. List<Team> teams = teamMapper.queryAll3();
  44. teams.forEach(team-> System.out.println(team));
  45. }
  46. }