10 输出映射
张创琦 2022.03.13
1 resultType
resultType:执行 sql 得到 ResultSet 转换的类型,使用类型的完全限定名或别名。如果返回的是集合,设置的是集合元素的类型,而不是集合本身。resultType 和 resultMap, 不能同时使用。
1 输出简单类型
见下面。
2 输出 pojo 类型
见下面。
3 输出Map类型
当我们只需要查询表中几列数据的时候可以将sql的查询结果作为Map的key和value。一般使用的是Map<Object,Object>. Map 作为接口返回值,sql 语句的查询结果最多只能有一条记录。大于一条记录会抛出TooManyResultsException异常。如果有多行,使用List<Map<Object,Object>>.
见下面。
2 resultMap
resultMap 可以自定义 sql 的结果和 java 对象属性的映射关系。更灵活的把列值赋值给指定属性。常用在列名和 java 对象属性名不一样的情况。
代码见下面。
TeamMapper.java
package com.kkb.mapper;import com.kkb.pojo.QueryVO;import com.kkb.pojo.Team;import org.apache.ibatis.annotations.Param;import java.util.List;import java.util.Map;/*** ClassName: TeamMapper* Mapper接口* @author wanglina* @version 1.0*/public interface TeamMapper {// 1.1 输出简单类型int getCount();// 1.2 输出pojo类型List<Team> queryAll2();// 1.3 输出map类型Map<String,Object> queryTwoColumn(int teamId);List<Map<String,Object>> queryTwoColumnList();// 2.1List<Team> queryAll3();}
TeamMapper.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.kkb.mapper.TeamMapper"><!--resultMap 和resultType不能同时出现resultMap:是引用的自己创建resultMap的id--><select id="queryAll3" resultMap="baseResultMap">select * from team;</select><!--创建resultMap:相当于自己编写表中的列与实体类中的属性的映射id:resultMap的名称,要求唯一type:期待要映射为java的类型--><resultMap id="baseResultMap" type="com.kkb.pojo.Team"><!--一般主键列用id,其余列用resultcolumn:表示数据库表中的列名,不区分大小写property:表示实体类中的对应的属性名,区分大小写javaType:实体类中的对应的属性的类型,可以省略,mybatis会自己推断jdbcType="数据库中的类型column的类型" 一般省略--><id column="teamId" property="teamId" javaType="java.lang.Integer" ></id><result column="teamName" property="teamName" javaType="java.lang.String"></result><result column="location" property="location" javaType="java.lang.String"></result><result column="createTime" property="createTime" javaType="java.util.Date"></result></resultMap></mapper>
TestTeamMapperArgs.java
package com.kkb.test;import com.kkb.mapper.TeamMapper;import com.kkb.pojo.QueryVO;import com.kkb.pojo.Team;import com.kkb.utils.MybatisUtil;import org.apache.ibatis.session.SqlSession;import org.junit.Test;import java.util.HashMap;import java.util.List;import java.util.Map;/*** ClassName: TestTeamMapperArg* 测试输入映射:多个参数* @author wanglina* @version 1.0*/public class TestTeamMapperArg {private TeamMapper teamMapper = MybatisUtil.getSqlSession().getMapper(TeamMapper.class);private SqlSession sqlSession = MybatisUtil.getSqlSession();// 数量1能查询到,但是会乱码@Testpublic void test07(){int count = teamMapper.getCount();System.out.println("总共的行数:"+count);}// 会乱码@Testpublic void test08(){Map<String, Object> map = teamMapper.queryTwoColumn(1065);System.out.println(map);}// 会乱码@Testpublic void test09(){List<Map<String, Object>> list = teamMapper.queryTwoColumnList();for (Map<String, Object> map : list) {System.out.println(map);}}// 测试结果正常,能获取全部数据@Testpublic void test10(){List<Team> teams = teamMapper.queryAll3();teams.forEach(team-> System.out.println(team));}}
