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.1
List<Team> queryAll3();
}
TeamMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//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,其余列用result
column:表示数据库表中的列名,不区分大小写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能查询到,但是会乱码
@Test
public void test07(){
int count = teamMapper.getCount();
System.out.println("总共的行数:"+count);
}
// 会乱码
@Test
public void test08(){
Map<String, Object> map = teamMapper.queryTwoColumn(1065);
System.out.println(map);
}
// 会乱码
@Test
public void test09(){
List<Map<String, Object>> list = teamMapper.queryTwoColumnList();
for (Map<String, Object> map : list) {
System.out.println(map);
}
}
// 测试结果正常,能获取全部数据
@Test
public void test10(){
List<Team> teams = teamMapper.queryAll3();
teams.forEach(team-> System.out.println(team));
}
}