Mybatis框架的输出映射类型

时间:2023-03-09 00:51:36
Mybatis框架的输出映射类型

  Mapper.xml映射文件中定义了操作数据库的sql,每个sql是一个statement,映射文件是mybatis的核心。

resultType(输出类型)

1.输出简单类型

(1)我们在UserMapper接口中定义查找数据库中用户总人数的方法:

  public Integer findUserCount();

(2)在UserMapper.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接口代理实现编写规则:
1.映射文件中namespace要等于接口的全路径
2.通过sql语句实现数据库的操作
3.映射文件中sql语句id要等与于接口的方法名称
4.映射文件中传入参数类型要等于接口方法的传入参数类型
5.映射文件中返回结果集类型要等于接口方法的返回值类型
-->
<mapper namespace="com.huida.mapper.UserMapper">
<select id="findUserCount" resultType="int">
<!-- 当我们的返回记录只有一行一列的时候后,返回结果类型为基本数据类型,除了这种情况,返回类型均为po类型 -->
select count(*) from user;
</select> </mapper>

(3)测试代码为:

package com.huida.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List; import javax.management.Query; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import org.omg.PortableInterceptor.USER_EXCEPTION; import com.huida.mapper.UserMapper;
import com.huida.po.User;
import com.huida.vo.QueryVo; public class UserMapperTest { private SqlSessionFactory factory=null;
@Before
public void init() throws Exception{
//通过流将核心配置文件读取进来
InputStream inputStream=Resources.getResourceAsStream("config/SqlMapConfig.xml");
//通过核心配置文件输入流来创建工厂
factory=new SqlSessionFactoryBuilder().build(inputStream);
} @Test
public void testfindUserCount(){
//创建SqlSession
SqlSession openSession=factory.openSession();
//通过会话的getMapper方法来实例化接口(实现类的对象)
UserMapper userMapper=openSession.getMapper(UserMapper.class);//参数放接口的字节码文件
Integer count=userMapper.findUserCount();
System.out.println(count); } }
  当我们的返回记录只有一行一列的时候后,返回结果类型为基本数据类型,除了这种情况,返回类型均为po类型。

  输出简单类型必须查询出来的结果集有一条记录,最终将第一个字段的值转换为输出类型。使用session的selectOne可查询单条记录。

2.输出po对象

  可以参考我之前查询单条记录的博文。

3.输出po对象列表

  可以参考我之前模糊查询的博文(可以查询到多条记录)。

4.resultMap

  resultType可以指定pojo将查询结果映射为pojo,但需要pojo的属性名和sql查询的列名一致方可映射成功。

  如果sql查询字段名和pojo的属性名不一致,可以通过resultMap将字段名和属性名作一个对应关系 ,resultMap实质上还需要将查询结果映射到pojo对象中。

  resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询。