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实现一对一查询和一对多查询。