MyBatis查询结果resultType返回值类型详细介绍(mybatis的resulttype返回list)
25-02-07
16
此处将为大家介绍关于MyBatis查询结果resultType返回值类型详细介绍的详细内容,并且为您解答有关mybatis的resulttype返回list的相关问题,此外,我们还将为您介绍关于Jav
此处将为大家介绍关于MyBatis查询结果resultType返回值类型详细介绍 的详细内容,并且为您解答有关mybatis的resulttype返回list 的相关问题,此外,我们还将为您介绍关于JavaEE_Mybatis_SpringMVC_Mybatis_lesson11_一对一关联映射(ResultMap/ResultType)、JavaEE_Mybatis_SpringMVC_Mybatis_ResultMap 与 ResultType应用场合选择、mybatis Mapper 中 resultType 使用方法及返回值为 Map 的写法、Mybatis ResultMap 和 resultType 区别 的有用信息。
本文目录一览:
MyBatis查询结果resultType返回值类型详细介绍(mybatis的resulttype返回list) <div id="content_views"> <!-- flowchart 箭头图标 勿删 --> <svg xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block"></path></svg> <p></p><h3 id="一返回一般数据类型"><a name="t0"></a> 一、返回一般数据类型</h3><p></p>
<p>比如要根据 id 属性获得数据库中的某个字段值。</p>
<p>mapper 接口:</p>
<prename="code"><code> <span>// 根据 id 获得数据库中的 username 字段的值</span> <span>String</span> getEmpNameById(<span>Integer</span> id);</code></pre>
<p>SQL 映射文件:</p>
<prename="code"><code> <span><!-- 指定 resultType 返回值类型时 String 类型的, string 在这里是一个别名,代表的是 java.lang.String 对于引用数据类型,都是将大写字母转小写,比如 HashMap 对应的别名是 ''hashmap'' 基本数据类型考虑到重复的问题,会在其前面加上 ''_'',比如 byte 对应的别名是 ''_byte'' --></span> <span><<span>select</span> <span>id</span>=<span>"getEmpNameById"</span> <span>resultType</span>=<span>"string"</span>></span> select username from t_employee where id = #{id} <span></<span>select</span>></span></code></pre>
<p></p><h3 id="二返回-javabean-类型"><a name="t1"></a> 二、返回 JavaBean 类型</h3><p></p>
<p>比如根据某个字段获得数据库中的信息,把查询的结果信息封装成某个 JavaBean 类型的数据。</p>
<p>mapper 接口:</p>
<prename="code"><code> <span>// 根据 id 查询信息,并把信息封装成 Employee 对象</span> Employee getEmpById(Integer id);</code></pre>
<p>SQL 映射文件:</p>
<prename="code"><code> <span><!-- 通过 resultType 指定查询的结果是 Employee 类型的数据 只需要指定 resultType 的类型,MyBatis 会自动将查询的结果映射成 JavaBean 中的属性 --></span> <span><<span>select</span> <span>id</span>=<span>"getEmpById"</span> <span>resultType</span>=<span>"employee"</span>></span> select * from t_employee where id = #{id} <span></<span>select</span>></span></code></pre>
<p></p><h3 id="三返回list类型"><a name="t2"></a> 三、返回<code>List</code>类型</h3><p></p>
<p>有时候我们要查询的数据不止一条,比如:模糊查询,全表查询等,这时候返回的数据可能不止是一条数据,对于多数据的处理可以存放在<code>List</code>集合中。</p>
<p>mapper 接口:</p>
<prename="code"><code> <span>// 假如是全表查询数据,将查询的数据封装成 Employee 类型的集合</span> List<Employee> getAllEmps();</code></pre>
<p>SQL 映射文件:</p>
<prename="code"><code> <span><!-- 注意这里的 resultType 返回值类型是集合内存储数据的类型,不是 ''list'' --></span> <span><<span>select</span> <span>id</span>=<span>"getAllEmps"</span> <span>resultType</span>=<span>"employee"</span>></span> select * from t_employee <span></<span>select</span>></span></code></pre>
<p></p><h3 id="四返回map类型"><a name="t3"></a> 四、返回<code>Map</code>类型</h3><p></p>
<p>MyBatis 还支持将查询的数据封装成<code>Map</code>。</p>
<p><font size="5">1.<font size="3"> 如果查询的结果是一条,我们可以把查询的数据以<code>{表字段名, 对应的值}</code>方式存入到<code>Map</code>中。</font></font></p>
<p>mapper 接口:</p>
<prename="code"><code> <span>// 根据 id 查询信息,并把结果信息封装成 Map </span> Map<String, Object> getEmpAsMapById(Integer id);</code></pre>
<p>SQL 映射文件:</p>
<prename="code"><code> <span><!-- 注意这里的 resultType 返回值类型是 ''map'' --></span> <span><<span>select</span> <span>id</span>=<span>"getEmpAsMapById"</span> <span>resultType</span>=<span>"map"</span>></span> select * from t_employee where id = #{id} <span></<span>select</span>></span></code></pre>
<p>下面把查询的结果数据贴出来供大家参考: <br> <img src="https://img-blog.csdn.net/20180312091558498?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY29kZWphcw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70" alt="这里写图片描述 " title=""> <br> <font size="5">2.<font size="3"> 如果查询的结果是多条数据,我们也可以把查询的数据以<code>{表中某一字段名, JavaBean}</code>方式来封装成<code>Map</code>。</font></font></p>
<p>mapper 接口:</p>
<prename="code"><code> <span>// 查询所有员工的信息,把数据库中的 ''id'' 字段作为 key,对应的 value 封装成 Employee 对象</span> <span>// @MapKey 中的值表示用数据库中的哪个字段名作 key</span> <span>@MapKey</span>(<span>"id"</span>) Map<Integer, Employee> getAllEmpsAsMap();</code></pre>
<p>SQL 映射文件:</p>
<prename="code"><code> <span><!-- 注意 resultType 返回值类型,不再是 ''map'',而是 Map 的 value 对应的 JavaBean 类型 --></span> <span><<span>select</span> <span>id</span>=<span>"getAllEmpsAsMap"</span> <span>resultType</span>=<span>"employee"</span>></span> select * from t_employee <span></<span>select</span>></span></code></pre>
<p>下面是查询的结果 (只截取了一部分): <br> <img src="https://img-blog.csdn.net/20180312092619728?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY29kZWphcw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70" alt="这里写图片描述 " title=""></p>
<p>MyBatis 允许查询的结果封装成<code>Map</code>,这种机制是极好的。</p>
<p></p><h3 id="五扩展"><a name="t4"></a> 五、扩展</h3><p></p>
<p><font size="4"><strong>扩展.</strong><font size="3" color="black"> 上面返回结果的形式都是基于查询 (<code>select</code>) 的,其实对于增删改的操作也可以返回一定类型的数据,比如<code>Boolean</code>,<code>Integer</code>等。</font></font></p>
<p><font size="4"><strong>总结.</strong><font size="3" color="black"> 这篇博文主要介绍了在开发中常用的几种数据返回值类型,希望能够为你提供帮助。</font></font></p> </div>
JavaEE_Mybatis_SpringMVC_Mybatis_lesson11_一对一关联映射(ResultMap/ResultType)
项目代码
http://pan.baidu.com/s/1c01BLvi
下面演示Mybatis的一对一关联映射, ResultType 与ResultMap 两种形式
整体的配置文件
<?xml version="1.0" encoding="UTF-8" ?>
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
Mybatis的一对一关联映射ResultType形式
Mapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace ="cn.itcast.mybatis.mapper.UserCustomMapper" >
<select id ="findOrderUser" resultType ="OrdersCustom" >
SELECT o.*, u.username, u.sex, u.address
FROM user AS u, orders AS o
Mapper.java
package cn.itcast.mybatis.mapper;
import cn.itcast.mybatis.po.Orders;
import cn.itcast.mybatis.po.OrdersCustom;
public interface UserCustomMapper {
List<OrdersCustom> findOrderUser () throws Exception;
List<Orders> findOrderUserResultMap () throws Exception;
UserCustom.java(利用扩展类)
package cn.itcast.mybatis.po;
public class OrdersCustom extends Orders {
* SELECT o.*, u.username, u.sex, u.address FROM user AS u, orders AS o
public String getUsername () {
public void setUsername (String username) {
this .username = username;
public void setSex (String sex) {
public String getAddress () {
public void setAddress (String address) {
public String toString () {
return "OrdersCustom [username=" + username + ", sex=" + sex
+ ", address=" + address + ", toString()=" + super .toString()
Orders.java
package cn.itcast.mybatis.po;
private List<Orderdetail> orderdetails;
public void setId (Integer id) {
public Integer getUserId () {
public void setUserId (Integer userId) {
public String getNumber () {
public void setNumber (String number) {
this .number = number == null ? null : number.trim();
public Date getCreatetime () {
public void setCreatetime (Date createtime) {
this .createtime = createtime;
public String getNote () {
public void setNote (String note) {
this .note = note == null ? null : note.trim();
public void setUser (User user) {
public List<Orderdetail> getOrderdetails () {
public void setOrderdetails (List<Orderdetail> orderdetails) {
this .orderdetails = orderdetails;
public String toString () {
return "Orders [id=" + id + ", userId=" + userId + ", number=" + number
+ ", createtime=" + createtime + ", note=" + note + ", user="
+ user + ", orderdetails=" + orderdetails + "]" ;
Mybatis的一对一关联映射ResultMap形式
Mapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace ="cn.itcast.mybatis.mapper.UserCustomMapper" >
<resultMap type ="Orders" id ="OrdersUserResultMap" >
<id column ="id" property ="id" />
<result column ="user_id" property ="userId" />
<result column ="number" property ="number" />
<result column ="createtime" property ="createtime" />
<result column ="note" property ="note" />
<!-- association: 用于映射关联查询单个对象的信息 -->
<!-- property: 要将关联查询用户信息映射到Orders中的那个属性 -->
<association property ="user" javaType ="User" >
<id column ="user_id" property ="id" />
<result column ="username" property ="username" />
<result column ="sex" property ="sex" />
<result column ="address" property ="address" />
<select id ="findOrderUserResultMap" resultMap ="OrdersUserResultMap" >
SELECT o.*, u.username, u.sex, u.address
FROM user AS u, orders AS o
Mapper.java
package cn.itcast.mybatis.mapper;
import cn.itcast.mybatis.po.Orders;
import cn.itcast.mybatis.po.OrdersCustom;
public interface UserCustomMapper {
List<OrdersCustom> findOrderUser () throws Exception;
List<Orders> findOrderUserResultMap () throws Exception;
Orders.java
package cn.itcast.mybatis.po;
private List<Orderdetail> orderdetails;
public void setId (Integer id) {
public Integer getUserId () {
public void setUserId (Integer userId) {
public String getNumber () {
public void setNumber (String number) {
this .number = number == null ? null : number.trim();
public Date getCreatetime () {
public void setCreatetime (Date createtime) {
this .createtime = createtime;
public String getNote () {
public void setNote (String note) {
this .note = note == null ? null : note.trim();
public void setUser (User user) {
public List<Orderdetail> getOrderdetails () {
public void setOrderdetails (List<Orderdetail> orderdetails) {
this .orderdetails = orderdetails;
public String toString () {
return "Orders [id=" + id + ", userId=" + userId + ", number=" + number
+ ", createtime=" + createtime + ", note=" + note + ", user="
+ user + ", orderdetails=" + orderdetails + "]" ;
测试类
package cn.itcast.mybatis.mapper;
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 cn.itcast.mybatis.po.Orders;
import cn.itcast.mybatis.po.OrdersCustom;
public class UserCustomMapperTest {
private SqlSessionFactory sqlSessionFactory;
public void setUp () throws Exception {
InputStream inputStream = null ;
resource = "SqlMapConfig.xml" ;
inputStream = Resources.getResourceAsStream(resource);
this .sqlSessionFactory = new SqlSessionFactoryBuilder ()
public void testFindOrderUser () {
SqlSession sqlSession = null ;
sqlSession = sqlSessionFactory.openSession();
UserCustomMapper userCustomMapper = sqlSession
.getMapper(UserCustomMapper.class);
List<OrdersCustom> ordersCustomsList = userCustomMapper
for (OrdersCustom tmp : ordersCustomsList) {
public void testFindOrderUserResultMap () {
SqlSession sqlSession = null ;
sqlSession = sqlSessionFactory.openSession();
UserCustomMapper userCustomMapper = sqlSession
.getMapper(UserCustomMapper.class);
List<Orders> list = userCustomMapper.findOrderUserResultMap();
for (Orders tmp : list) {
JavaEE_Mybatis_SpringMVC_Mybatis_ResultMap 与 ResultType应用场合选择 Mybatis中 ResultType与ResultMap有一定的不同,不同的场景选择不同
ResultType
示例:
<sql id ="query_user_where" >
<if test ="userCustom!=null" >
<if test ="userCustom.sex!=null and userCustom.sex!=''" >
AND user.sex = #{userCustom.sex}
<if test ="userCustom.username!=null and userCustom.username!=''" >
AND user.username like'%${userCustom.username}%'
<select id ="findUserCount" parameterType ="cn.itcast.mybatis.po.UserQueryVo"
SELECT COUNT(*) FROM user WHERE user.sex = #{userCustom.sex} AND
user.username like'%${userCustom.username}%'
<!-- where 可以自动去掉第一个and -->
<include refid ="query_user_where" > </include >
使用注意
1.在数据库SQL查询出来的字段必须与java对象的属性名完全一致,否则取不到数据
作用:
将查询结果按照 sql列名和 pojo属性名一致性映射到Pojo中。
场合:
常见一些明细记录的展示
ResultMap
示例:
<collection property ="orderlist" ofType ="cn.itcast.mybatis.po.Orders" >
<id column ="id" property ="id" />
<result column ="user_id" property ="userId" />
<result column ="number" property ="number" />
<result column ="createtime" property ="createtime" />
<result column ="note" property ="note" />
<collection property ="orderdetails" ofType ="cn.itcast.mybatis.po.Orderdetail" >
private Integer ordersId;
private Integer itemsNum;
<id column ="orderdetail_id" property ="id" />
<result column ="items_id" property ="itemsId" />
<result column ="items_num" property ="itemsNum" />
<association property ="items" javaType ="cn.itcast.mybatis.po.Items" >
<id column ="items_id" property ="id" />
<result column ="items_name" property ="name" />
<result column ="items_detail" property ="detail" />
<result column ="items_price" property ="price" />
<select id ="findUsersAndItemsResultMap" resultMap ="UsersAndItemsResultMap" >
orderdetail.id orderdetail_id,
items.detail items_detail,
AND orderdetail.orders_id = orders.id
AND orderdetail.items_id = items.id
使用注意
1.可以利用 column(数据库查询出来的字段) 与 property (Java对象中的字段)进行映射。
2.association , collection
association 将关联查询信息映射到一个pojo 对象中。
collection 将关联查询的信息映射到一个list 集合中。
场合:
1. 与订单关联的用户 一起的信息
2. 用户购买的商品
mybatis Mapper 中 resultType 使用方法及返回值为 Map 的写法
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 { public SqlSessionFactory sqlSessionFactory () throws IOException { // mybatis的配置文件 String resource = "mybatis_config.xml" ; // 使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)TestHotel.class.getClassLoader() InputStream is = Resources.getResourceAsStream(resource); // 构建sqlSession的工厂 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is); return sessionFactory; } // 查 @Test public void getHotel() throws IOException { SqlSessionFactory sessionFactory = sqlSessionFactory(); SqlSession session = sessionFactory.openSession(); HotelMapper hotelMapper = session.getMapper(HotelMapper. class ); 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 { public SqlSessionFactory sqlSessionFactory () throws IOException { // mybatis的配置文件 String resource = "mybatis_config.xml" ; // 使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)TestHotel.class.getClassLoader() InputStream is = Resources.getResourceAsStream(resource); // 构建sqlSession的工厂 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is); return sessionFactory; } // 查 @Test public void getHotel() throws IOException { SqlSessionFactory sessionFactory = sqlSessionFactory(); SqlSession session = sessionFactory.openSession(); HotelMapper hotelMapper = session.getMapper(HotelMapper. class ); System.out.println(hotelMapper.getClass()); // 返回值为List List<Hotel> list = hotelMapper.getHotel(1000 ); for (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 { public SqlSessionFactory sqlSessionFactory () throws IOException { // mybatis的配置文件 String resource = "mybatis_config.xml" ; // 使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)TestHotel.class.getClassLoader() InputStream is = Resources.getResourceAsStream(resource); // 构建sqlSession的工厂 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is); return sessionFactory; } // 查 @Test public void getHotel() throws IOException { SqlSessionFactory sessionFactory = sqlSessionFactory(); SqlSession session = sessionFactory.openSession(); HotelMapper hotelMapper = session.getMapper(HotelMapper. class ); System.out.println(hotelMapper.getClass()); // 返回值为map Map<String, Object> map = hotelMapper.getHotel(1001 ); 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 { public SqlSessionFactory sqlSessionFactory () throws IOException { // mybatis的配置文件 String resource = "mybatis_config.xml" ; // 使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)TestHotel.class.getClassLoader() InputStream is = Resources.getResourceAsStream(resource); // 构建sqlSession的工厂 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is); return sessionFactory; } // 查 @Test public void getHotel() throws IOException { SqlSessionFactory sessionFactory = sqlSessionFactory(); SqlSession session = sessionFactory.openSession(); HotelMapper hotelMapper = session.getMapper(HotelMapper. class ); System.out.println(hotelMapper.getClass()); // 返回值为map Map<String, Hotel> map = hotelMapper.getHotel(1000 ); System.out.println(map); session.close(); } }
Mybatis ResultMap 和 resultType 区别 一、概述 MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在。 在MyBatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。 ①当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当提供的返回类型属性是resultType的时候,MyBatis对自动的给把对应的值赋给resultType所指定对象的属性。 ②当提供的返回类型是resultMap时,因为Map不能很好表示领域模型,就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用。
二、ResultType
Blog.java
public class Blog {
private int id;
private String title;
private String content;
private String owner;
private List<Comment> comments;
}
其所对应的数据库表中存储有id、title、Content、Owner属性。
<typeAlias alias="Blog" type="com.tiantian.mybatis.model.Blog"/>
<select id="selectBlog" parameterType="int" resultType="Blog">
select * from t_blog where id = #{id}
</select>
MyBatis会自动创建一个ResultMap对象,然后基于查找出来的属性名进行键值对封装,然后再看到返回类型是Blog对象,再从ResultMap中取出与Blog对象对应的键值对进行赋值。
三、ResultMap 当返回类型直接是一个ResultMap的时候也是非常有用的,这主要用在进行复杂联合查询上,因为进行简单查询是没有什么必要的。先看看一个返回类型为ResultMap的简单查询,再看看复杂查询的用法。
①简单查询的写法
<resultMap type="Blog" id="BlogResult">
<id column="id" property="id" />
<result column="title" property="title" />
<result column="content" property="content" />
<result column="owner" property="owner" />
</resultMap>
<select id="selectBlog" parameterType="int" resultMap="BlogResult">
select *
from t_blog where id = #{id}
</select>
select映射中resultMap的值是一个外部resultMap的id,表示返回结果映射到哪一个resultMap上,外部resultMap的type属性表示该resultMap的结果是一个什么样的类型,这里是Blog类型,那么MyBatis就会把它当作一个Blog对象取出。resultMap节点的子节点id是用于标识该对象的id的,而result子节点则是用于标识一些简单属性的,其中的Column属性表示从数据库中查询的属性,Property则表示查询出来的属性对应的值赋给实体对象的哪个属性。简单查询的resultMap的写法就是这样的。
关于MyBatis查询结果resultType返回值类型详细介绍 和mybatis的resulttype返回list 的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于JavaEE_Mybatis_SpringMVC_Mybatis_lesson11_一对一关联映射(ResultMap/ResultType)、JavaEE_Mybatis_SpringMVC_Mybatis_ResultMap 与 ResultType应用场合选择、mybatis Mapper 中 resultType 使用方法及返回值为 Map 的写法、Mybatis ResultMap 和 resultType 区别 等相关内容,可以在本站寻找。