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<Hotel> 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<String, Object> 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<String, Hotel> map = hotelMapper.getHotel(1000<span style="color: rgba(0, 0, 0, 1)">); System.out.println(map); session.close(); }
}