mybatis学习(七)——resultType解析

resultType 是 sql 映射文件中定义返回值类型,返回值有基本类型,对象类型,List 类型,Map 类型等。现总结一下再解释

总结:

resultType:

1、基本类型  :resultType= 基本类型

2、List 类型:   resultType=List 中元素的类型

3、Map 类型    单条记录:resultType =map

                          多条记录:resultType =Map 中 value 的类型

1、对象类型

对于对象类型 resultType 直接写对象的全类名就可以了

实例:

hotelMapper 接口

package com.pjf.mybatis.dao;

import com.pjf.mybatis.po.Hotel;

public interface HotelMapper {
//返回值类型为 Hotel
public Hotel getHotel(Integer i);

}

HotelMapper.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.pjf.mybatis.dao.HotelMapper">
    <!--resultType 直接写对象的全类名 -->
    <select id="getHotel" resultType="com.pjf.mybatis.po.Hotel">
        select * from hotel
        where
        id=#{id}
    </select>
</mapper>

测试类:

package com.pjf.mybatis;

import java.io.IOException;
import java.io.InputStream;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.Test;

import com.pjf.mybatis.dao.HotelMapper;
import com.pjf.mybatis.po.Hotel;

public class TestHotel {

</span><span style="color: rgba(0, 0, 255, 1)">public</span> SqlSessionFactory sqlSessionFactory() <span style="color: rgba(0, 0, 255, 1)">throws</span><span style="color: rgba(0, 0, 0, 1)"> IOException {
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> mybatis的配置文件</span>
    String resource = "mybatis_config.xml"<span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)TestHotel.class.getClassLoader()</span>
    InputStream is =<span style="color: rgba(0, 0, 0, 1)"> Resources.getResourceAsStream(resource);
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 构建sqlSession的工厂</span>
    SqlSessionFactory sessionFactory = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> SqlSessionFactoryBuilder().build(is);
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> sessionFactory;
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 查</span>

@Test
public void getHotel() throws IOException {

    SqlSessionFactory sessionFactory </span>=<span style="color: rgba(0, 0, 0, 1)"> sqlSessionFactory();
    SqlSession session </span>=<span style="color: rgba(0, 0, 0, 1)"> sessionFactory.openSession();
    HotelMapper hotelMapper </span>= session.getMapper(HotelMapper.<span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)">);
    System.out.println(hotelMapper.getClass());

//直接返回 Hotel 对象,打印出来
Hotel hotel = hotelMapper.getHotel(1001);
System.out.println(hotel);
session.close();
}

}

2、List 类型

返回值为 List 类型,resultType 为 List 中对象的类型,如 List<Hotel>,resultType 为 Hotel

实例:

hotelMapper 接口

package com.pjf.mybatis.dao;

import java.util.List;

import com.pjf.mybatis.po.Hotel;

public interface HotelMapper {
// 返回值为 List
public List<Hotel> getHotel(Integer i);
}

hotelMapper.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.pjf.mybatis.dao.HotelMapper">
    <!-- 返回值为 List,resultType 为 List 中元素的全类名 -->
    <select id="getHotel" resultType="com.pjf.mybatis.po.Hotel">
        select * from hotel
        where
        price>#{price}
    </select>
</mapper>

测试类

package com.pjf.mybatis;

import java.io.IOException;
import java.io.InputStream;

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.Test;

import com.pjf.mybatis.dao.HotelMapper;
import com.pjf.mybatis.po.Hotel;

public class TestHotel {

</span><span style="color: rgba(0, 0, 255, 1)">public</span> SqlSessionFactory sqlSessionFactory() <span style="color: rgba(0, 0, 255, 1)">throws</span><span style="color: rgba(0, 0, 0, 1)"> IOException {
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> mybatis的配置文件</span>
    String resource = "mybatis_config.xml"<span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)TestHotel.class.getClassLoader()</span>
    InputStream is =<span style="color: rgba(0, 0, 0, 1)"> Resources.getResourceAsStream(resource);
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 构建sqlSession的工厂</span>
    SqlSessionFactory sessionFactory = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> SqlSessionFactoryBuilder().build(is);
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> sessionFactory;
}

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 查</span>

@Test
public void getHotel() throws IOException {

    SqlSessionFactory sessionFactory </span>=<span style="color: rgba(0, 0, 0, 1)"> sqlSessionFactory();
    SqlSession session </span>=<span style="color: rgba(0, 0, 0, 1)"> sessionFactory.openSession();
    HotelMapper hotelMapper </span>= session.getMapper(HotelMapper.<span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)">);
    System.out.println(hotelMapper.getClass());
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 返回值为List</span>
    List&lt;Hotel&gt; list = hotelMapper.getHotel(1000<span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)"> (Hotel hotel : list) {
        System.out.println(hotel);
    }
    session.close();
}

}

3、Map 类型

a、返回单条记录的 map,key 为属性,值为属性值。resultType 为 map

hotelMapper 接口

package com.pjf.mybatis.dao;

import java.util.Map;
import com.pjf.mybatis.po.Hotel;

public interface HotelMapper {
// 返回值为 Map,key 为属性名,value 为属性值
public Map<String, Object> getHotel(Integer i);
}

hotelMapper.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.pjf.mybatis.dao.HotelMapper">
    <!-- 返回值为 map,resultType 为 map -->
    <select id="getHotel" resultType="map">
        select * from hotel
        where
        id=#{id}
    </select>
</mapper>

测试类,返回 id=1001 的酒店

package com.pjf.mybatis;

import java.io.IOException;
import java.io.InputStream;
import java.util.Map;

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.Test;

import com.pjf.mybatis.dao.HotelMapper;
import com.pjf.mybatis.po.Hotel;

public class TestHotel {

</span><span style="color: rgba(0, 0, 255, 1)">public</span> SqlSessionFactory sqlSessionFactory() <span style="color: rgba(0, 0, 255, 1)">throws</span><span style="color: rgba(0, 0, 0, 1)"> IOException {
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> mybatis的配置文件</span>
    String resource = "mybatis_config.xml"<span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)TestHotel.class.getClassLoader()</span>
    InputStream is =<span style="color: rgba(0, 0, 0, 1)"> Resources.getResourceAsStream(resource);
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 构建sqlSession的工厂</span>
    SqlSessionFactory sessionFactory = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> SqlSessionFactoryBuilder().build(is);
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> sessionFactory;
}

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 查</span>

@Test
public void getHotel() throws IOException {

    SqlSessionFactory sessionFactory </span>=<span style="color: rgba(0, 0, 0, 1)"> sqlSessionFactory();
    SqlSession session </span>=<span style="color: rgba(0, 0, 0, 1)"> sessionFactory.openSession();
    HotelMapper hotelMapper </span>= session.getMapper(HotelMapper.<span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)">);
    System.out.println(hotelMapper.getClass());
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 返回值为map</span>
    Map&lt;String, Object&gt; map = hotelMapper.getHotel(1001<span style="color: rgba(0, 0, 0, 1)">);
    System.out.println(map);
    session.close();
}

}

b、返回多条记录的 map,key 为任意一属性,值为对象类型。如 Map<String,Hotel>,resultType 为 Hotel

返回多条记录的 map 时,key 为任意一属性,值为对象类型,不过 key 需要通过 @MapKey("hotelName") 指定对象中一个属性名为 key

实例:

hotelMapper 接口

package com.pjf.mybatis.dao;

import java.util.Map;
import org.apache.ibatis.annotations.MapKey;

import com.pjf.mybatis.po.Hotel;

public interface HotelMapper {
// 返回值为 Map,key 需要通过 @MapKey("属性名") 来指定 javaBean 中的一个属性名为 key,value 为对象
@MapKey("hotelName")
public Map<String, Hotel> getHotel(Integer i);
}

hotelMapper.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.pjf.mybatis.dao.HotelMapper">
    <!-- 返回值为 map,resultType 为对象的全类名 -->
    <select id="getHotel" resultType="com.pjf.mybatis.po.Hotel">
        select * from hotel
        where
        price>#{price}
    </select>
</mapper>

测试类:返回价格 >1000 以上的酒店

package com.pjf.mybatis;

import java.io.IOException;
import java.io.InputStream;
import java.util.Map;

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.Test;

import com.pjf.mybatis.dao.HotelMapper;
import com.pjf.mybatis.po.Hotel;

public class TestHotel {

</span><span style="color: rgba(0, 0, 255, 1)">public</span> SqlSessionFactory sqlSessionFactory() <span style="color: rgba(0, 0, 255, 1)">throws</span><span style="color: rgba(0, 0, 0, 1)"> IOException {
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> mybatis的配置文件</span>
    String resource = "mybatis_config.xml"<span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)TestHotel.class.getClassLoader()</span>
    InputStream is =<span style="color: rgba(0, 0, 0, 1)"> Resources.getResourceAsStream(resource);
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 构建sqlSession的工厂</span>
    SqlSessionFactory sessionFactory = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> SqlSessionFactoryBuilder().build(is);
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> sessionFactory;
}

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 查</span>

@Test
public void getHotel() throws IOException {

    SqlSessionFactory sessionFactory </span>=<span style="color: rgba(0, 0, 0, 1)"> sqlSessionFactory();
    SqlSession session </span>=<span style="color: rgba(0, 0, 0, 1)"> sessionFactory.openSession();
    HotelMapper hotelMapper </span>= session.getMapper(HotelMapper.<span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)">);
    System.out.println(hotelMapper.getClass());
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 返回值为map</span>
    Map&lt;String, Hotel&gt; map = hotelMapper.getHotel(1000<span style="color: rgba(0, 0, 0, 1)">);
    System.out.println(map);
    session.close();
}

}