GVKun编程网logo

MyBatis查询结果resultType返回值类型详细介绍(mybatis的resulttype返回list)

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)

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>&lt;!-- 指定 resultType 返回值类型时 String 类型的, string 在这里是一个别名,代表的是 java.lang.String 对于引用数据类型,都是将大写字母转小写,比如 HashMap 对应的别名是 ''hashmap'' 基本数据类型考虑到重复的问题,会在其前面加上 ''_'',比如 byte 对应的别名是 ''_byte'' --&gt;</span> <span>&lt;<span>select</span> <span>id</span>=<span>"getEmpNameById"</span> <span>resultType</span>=<span>"string"</span>&gt;</span> select username from t_employee where id = #{id} <span>&lt;/<span>select</span>&gt;</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>&lt;!-- 通过 resultType 指定查询的结果是 Employee 类型的数据 只需要指定 resultType 的类型,MyBatis 会自动将查询的结果映射成 JavaBean 中的属性 --&gt;</span> <span>&lt;<span>select</span> <span>id</span>=<span>"getEmpById"</span> <span>resultType</span>=<span>"employee"</span>&gt;</span> select * from t_employee where id = #{id} <span>&lt;/<span>select</span>&gt;</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&lt;Employee&gt; getAllEmps();</code></pre>

<p>SQL 映射文件:</p>

<prename="code"><code> <span>&lt;!-- 注意这里的 resultType 返回值类型是集合内存储数据的类型,不是 ''list'' --&gt;</span> <span>&lt;<span>select</span> <span>id</span>=<span>"getAllEmps"</span> <span>resultType</span>=<span>"employee"</span>&gt;</span> select * from t_employee <span>&lt;/<span>select</span>&gt;</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&lt;String, Object&gt; getEmpAsMapById(Integer id);</code></pre>

<p>SQL 映射文件:</p>

<prename="code"><code> <span>&lt;!-- 注意这里的 resultType 返回值类型是 ''map'' --&gt;</span> <span>&lt;<span>select</span> <span>id</span>=<span>"getEmpAsMapById"</span> <span>resultType</span>=<span>"map"</span>&gt;</span> select * from t_employee where id = #{id} <span>&lt;/<span>select</span>&gt;</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&lt;Integer, Employee&gt; getAllEmpsAsMap();</code></pre>

<p>SQL 映射文件:</p>

<prename="code"><code> <span>&lt;!-- 注意 resultType 返回值类型,不再是 ''map'',而是 Map 的 value 对应的 JavaBean 类型 --&gt;</span> <span>&lt;<span>select</span> <span>id</span>=<span>"getAllEmpsAsMap"</span> <span>resultType</span>=<span>"employee"</span>&gt;</span> select * from t_employee <span>&lt;/<span>select</span>&gt;</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)

JavaEE_Mybatis_SpringMVC_Mybatis_lesson11_一对一关联映射(ResultMap/ResultType)

项目代码

http://pan.baidu.com/s/1c01BLvi


下面演示Mybatis的一对一关联映射,     ResultType 与ResultMap 两种形式


整体的配置文件

<?xml version="1.0" encoding="UTF-8" ?>
  • <!DOCTYPE configuration
  • PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  • "http://mybatis.org/dtd/mybatis-3-config.dtd">
  • <configuration>
  • <!-- 加载属性文件 -->
  • <properties resource="db.properties"></properties>
  • <!--
  • <settings></settings>
  • -->
  • <typeAliases>
  • <!--
  • <typeAlias type="cn.itcast.mybatis.po.User" alias="user"/>
  • -->
  • <!-- 批量定义别名 -->
  • <package name="cn.itcast.mybatis.po"/>
  • </typeAliases>
  • <!-- 和spring整合后 environments配置将废除-->
  • <environments default="development">
  • <environment id="development">
  • <!-- 使用jdbc事务管理-->
  • <transactionManager type="JDBC" />
  • <!-- 数据库连接池-->
  • <dataSource type="POOLED">
  • <property name="driver" value="${jdbc.driver}" />
  • <property name="url" value="${jdbc.url}" />
  • <property name="username" value="${jdbc.username}" />
  • <property name="password" value="${jdbc.password}" />
  • </dataSource>
  • </environment>
  • </environments>
  • <mappers>
  • <mapper resource="sqlmap/User.xml"/>
  • <!--
  • <mapper resource="mapper/UserMapper.xml"/>
  • -->
  • <!--
  • <mapper/>
  • -->
  • <package name="cn.itcast.mybatis.mapper"/>
  • </mappers>
  • </configuration>



  • Mybatis的一对一关联映射ResultType形式

    Mapper.xml

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <!DOCTYPE mapper
    3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    5. <mapper namespace="cn.itcast.mybatis.mapper.UserCustomMapper">
    1. <select id="findOrderUser" resultType="OrdersCustom">
    2. SELECT o.*, u.username, u.sex, u.address
    3. FROM user AS u, orders AS o
    4. WHERE o.user_id = u.id
    5. </select>
    6. </mapper>



    Mapper.java

    1. package cn.itcast.mybatis.mapper;
    2. import java.util.List;
    3. import cn.itcast.mybatis.po.Orders;
    4. import cn.itcast.mybatis.po.OrdersCustom;
    5. public interface UserCustomMapper {
    6. // 根据订单查询用户信息
    7. // 主表:Orders
    8. // 从表:User
    9. List<OrdersCustom> findOrderUser() throws Exception;
    10. // 利用ResultMap进行关联映射
    11. List<Orders> findOrderUserResultMap() throws Exception;
    12. }

    UserCustom.java(利用扩展类)

    1. package cn.itcast.mybatis.po;
    2. public class OrdersCustom extends Orders {
    3. /*
    4. * SELECT o.*, u.username, u.sex, u.address FROM user AS u, orders AS o
    5. * WHERE o.user_id = u.id
    6. */
    7. private String username;
    8. private String sex;
    9. private String address;
    10. public String getUsername() {
    11. return username;
    12. }
    13. public void setUsername(String username) {
    14. this.username = username;
    15. }
    16. public String getSex() {
    17. return sex;
    18. }
    19. public void setSex(String sex) {
    20. this.sex = sex;
    21. }
    22. public String getAddress() {
    23. return address;
    24. }
    25. public void setAddress(String address) {
    26. this.address = address;
    27. }
    28. @Override
    29. public String toString() {
    30. return "OrdersCustom [username=" + username + ", sex=" + sex
    31. + ", address=" + address + ", toString()=" + super.toString()
    32. + "]";
    33. }
    34. }
    Orders.java

    1. package cn.itcast.mybatis.po;
    2. import java.util.Date;
    3. import java.util.List;
    4. public class Orders {
    5. private Integer id;
    6. private Integer userId;
    7. private String number;
    8. private Date createtime;
    9. private String note;
    10. //用户信息
    11. private User user;
    12. //订单明细
    13. private List<Orderdetail> orderdetails;
    14. public Integer getId() {
    15. return id;
    16. }
    17. public void setId(Integer id) {
    18. this.id = id;
    19. }
    20. public Integer getUserId() {
    21. return userId;
    22. }
    23. public void setUserId(Integer userId) {
    24. this.userId = userId;
    25. }
    26. public String getNumber() {
    27. return number;
    28. }
    29. public void setNumber(String number) {
    30. this.number = number == null ? null : number.trim();
    31. }
    32. public Date getCreatetime() {
    33. return createtime;
    34. }
    35. public void setCreatetime(Date createtime) {
    36. this.createtime = createtime;
    37. }
    38. public String getNote() {
    39. return note;
    40. }
    41. public void setNote(String note) {
    42. this.note = note == null ? null : note.trim();
    43. }
    44. public User getUser() {
    45. return user;
    46. }
    47. public void setUser(User user) {
    48. this.user = user;
    49. }
    50. public List<Orderdetail> getOrderdetails() {
    51. return orderdetails;
    52. }
    53. public void setOrderdetails(List<Orderdetail> orderdetails) {
    54. this.orderdetails = orderdetails;
    55. }
    56. @Override
    57. public String toString() {
    58. return "Orders [id=" + id + ", userId=" + userId + ", number=" + number
    59. + ", createtime=" + createtime + ", note=" + note + ", user="
    60. + user + ", orderdetails=" + orderdetails + "]";
    61. }
    62. }





    Mybatis的一对一关联映射ResultMap形式

    Mapper.xml

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <!DOCTYPE mapper
    3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    5. <mapper namespace="cn.itcast.mybatis.mapper.UserCustomMapper">
    6. <resultMap type="Orders" id="OrdersUserResultMap">
    7. <id column="id" property="id"/>
    8. <result column="user_id" property="userId"/>
    9. <result column="number" property="number"/>
    10. <result column="createtime" property="createtime"/>
    11. <result column="note" property="note"/>
    12. <!-- 配置映射的关联的用户信息 -->
    13. <!-- association: 用于映射关联查询单个对象的信息 -->
    14. <!-- property: 要将关联查询用户信息映射到Orders中的那个属性 -->
    15. <association property="user" javaType="User">
    16. <id column="user_id" property="id"/>
    17. <result column="username" property="username"/>
    18. <result column="sex" property="sex"/>
    19. <result column="address" property="address"/>
    20. </association>
    21. </resultMap>
    1. <select id="findOrderUserResultMap" resultMap="OrdersUserResultMap">
    2. SELECT o.*, u.username, u.sex, u.address
    3. FROM user AS u, orders AS o
    4. WHERE o.user_id = u.id
    5. </select>
    6. </mapper>


    Mapper.java

    1. package cn.itcast.mybatis.mapper;
    2. import java.util.List;
    3. import cn.itcast.mybatis.po.Orders;
    4. import cn.itcast.mybatis.po.OrdersCustom;
    5. public interface UserCustomMapper {
    6. // 根据订单查询用户信息
    7. // 主表:Orders
    8. // 从表:User
    9. List<OrdersCustom> findOrderUser() throws Exception;
    10. // 利用ResultMap进行关联映射
    11. List<Orders> findOrderUserResultMap() throws Exception;
    12. }

    Orders.java

    1. package cn.itcast.mybatis.po;
    2. import java.util.Date;
    3. import java.util.List;
    4. public class Orders {
    5. private Integer id;
    6. private Integer userId;
    7. private String number;
    8. private Date createtime;
    9. private String note;
    10. //用户信息
    11. private User user;
    12. //订单明细
    13. private List<Orderdetail> orderdetails;
    14. public Integer getId() {
    15. return id;
    16. }
    17. public void setId(Integer id) {
    18. this.id = id;
    19. }
    20. public Integer getUserId() {
    21. return userId;
    22. }
    23. public void setUserId(Integer userId) {
    24. this.userId = userId;
    25. }
    26. public String getNumber() {
    27. return number;
    28. }
    29. public void setNumber(String number) {
    30. this.number = number == null ? null : number.trim();
    31. }
    32. public Date getCreatetime() {
    33. return createtime;
    34. }
    35. public void setCreatetime(Date createtime) {
    36. this.createtime = createtime;
    37. }
    38. public String getNote() {
    39. return note;
    40. }
    41. public void setNote(String note) {
    42. this.note = note == null ? null : note.trim();
    43. }
    44. public User getUser() {
    45. return user;
    46. }
    47. public void setUser(User user) {
    48. this.user = user;
    49. }
    50. public List<Orderdetail> getOrderdetails() {
    51. return orderdetails;
    52. }
    53. public void setOrderdetails(List<Orderdetail> orderdetails) {
    54. this.orderdetails = orderdetails;
    55. }
    56. @Override
    57. public String toString() {
    58. return "Orders [id=" + id + ", userId=" + userId + ", number=" + number
    59. + ", createtime=" + createtime + ", note=" + note + ", user="
    60. + user + ", orderdetails=" + orderdetails + "]";
    61. }
    62. }

    测试类

    1. package cn.itcast.mybatis.mapper;
    2. import java.io.InputStream;
    3. import java.util.List;
    4. import org.apache.ibatis.io.Resources;
    5. import org.apache.ibatis.session.SqlSession;
    6. import org.apache.ibatis.session.SqlSessionFactory;
    7. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    8. import org.junit.Before;
    9. import org.junit.Test;
    10. import cn.itcast.mybatis.po.Orders;
    11. import cn.itcast.mybatis.po.OrdersCustom;
    12. public class UserCustomMapperTest {
    13. private SqlSessionFactory sqlSessionFactory;
    14. @Before
    15. public void setUp() throws Exception {
    16. String resource = null;
    17. InputStream inputStream = null;
    18. try {
    19. // 读取Mybatis配置信息
    20. resource = "SqlMapConfig.xml";
    21. inputStream = Resources.getResourceAsStream(resource);
    22. // 根据Mybatis配置信息,创建会话工厂
    23. this.sqlSessionFactory = new SqlSessionFactoryBuilder()
    24. .build(inputStream);
    25. } catch (Exception e) {
    26. e.printStackTrace();
    27. }
    28. }
    29. @Test
    30. public void testFindOrderUser() {
    31. SqlSession sqlSession = null;
    32. try {
    33. sqlSession = sqlSessionFactory.openSession();
    34. UserCustomMapper userCustomMapper = sqlSession
    35. .getMapper(UserCustomMapper.class);
    36. List<OrdersCustom> ordersCustomsList = userCustomMapper
    37. .findOrderUser();
    38. for (OrdersCustom tmp : ordersCustomsList) {
    39. System.out.println(tmp);
    40. }
    41. } catch (Exception e) {
    42. sqlSession.close();
    43. }
    44. }
    45. @Test
    46. public void testFindOrderUserResultMap() {
    47. SqlSession sqlSession = null;
    48. try {
    49. sqlSession = sqlSessionFactory.openSession();
    50. UserCustomMapper userCustomMapper = sqlSession
    51. .getMapper(UserCustomMapper.class);
    52. List<Orders> list = userCustomMapper.findOrderUserResultMap();
    53. for (Orders tmp : list) {
    54. System.out.println(tmp);
    55. }
    56. } catch (Exception e) {
    57. sqlSession.close();
    58. }
    59. }
    60. }


    JavaEE_Mybatis_SpringMVC_Mybatis_ResultMap 与 ResultType应用场合选择

    JavaEE_Mybatis_SpringMVC_Mybatis_ResultMap 与 ResultType应用场合选择

    Mybatis中  ResultType与ResultMap有一定的不同,不同的场景选择不同


    ResultType

    示例:

    1. <sql id="query_user_where">
    2. <if test="userCustom!=null">
    3. <if test="userCustom.sex!=null and userCustom.sex!=''">
    4. AND user.sex = #{userCustom.sex}
    5. </if>
    6. <if test="userCustom.username!=null and userCustom.username!=''">
    7. AND user.username like'%${userCustom.username}%'
    8. </if>
    9. </if>
    10. </sql>

    1. <select id="findUserCount" parameterType="cn.itcast.mybatis.po.UserQueryVo"
    2. resultType="int">
    3. SELECT COUNT(*) FROM user WHERE user.sex = #{userCustom.sex} AND
    4. user.username like'%${userCustom.username}%'
    5. <!-- where 可以自动去掉第一个and -->
    6. <where>
    7. <include refid="query_user_where"></include>
    8. </where>
    9. </select>


    使用注意

    1.在数据库SQL查询出来的字段必须与java对象的属性名完全一致,否则取不到数据

    作用:

     将查询结果按照 sql列名和 pojo属性名一致性映射到Pojo中。

    场合:

     常见一些明细记录的展示

     


    ResultMap

    示例:

    1. <collection property="orderlist" ofType="cn.itcast.mybatis.po.Orders">
    2. <!--
    3. private Integer id;
    4. private Integer userId;
    5. private String number;
    6. private Date createtime;
    7. private String note;
    8. -->
    9. <id column="id" property="id"/>
    10. <result column="user_id" property="userId"/>
    11. <result column="number" property="number"/>
    12. <result column="createtime" property="createtime"/>
    13. <result column="note" property="note"/>
    14. <collection property="orderdetails" ofType="cn.itcast.mybatis.po.Orderdetail">
    15. <!--
    16. private Integer id;
    17. private Integer ordersId;
    18. private Integer itemsId;
    19. private Integer itemsNum;
    20. // 商品的Items信息
    21. private Items items;
    22. -->
    23. <id column="orderdetail_id" property="id"/>
    24. <result column="items_id" property="itemsId"/>
    25. <result column="items_num" property="itemsNum"/>
    26. <association property="items" javaType="cn.itcast.mybatis.po.Items">
    27. <!--
    28. private Integer id;
    29. private String name;
    30. private Float price;
    31. private String pic;
    32. private Date createtime;
    33. private String detail;
    34. -->
    35. <id column="items_id" property="id"/>
    36. <result column="items_name" property="name"/>
    37. <result column="items_detail" property="detail"/>
    38. <result column="items_price" property="price"/>
    39. </association>
    40. </collection>
    41. </collection>
    42. </resultMap>

    1. <select id="findUsersAndItemsResultMap" resultMap="UsersAndItemsResultMap">
    2. SELECT
    3. orders.*,
    4. user.username,
    5. user.sex,
    6. user.address,
    7. orderdetail.id orderdetail_id,
    8. orderdetail.items_id,
    9. orderdetail.items_num,
    10. orderdetail.orders_id,
    11. items.name items_name,
    12. items.detail items_detail,
    13. items.price items_price
    14. FROM
    15. user,
    16. orders,
    17. orderdetail,
    18. items
    19. WHERE
    20. orders.user_id = user.id
    21. AND orderdetail.orders_id = orders.id
    22. AND orderdetail.items_id = items.id
    23. </select>



    使用注意

    1.可以利用 column(数据库查询出来的字段) 与 property (Java对象中的字段)进行映射。

     2.association , collection 

     association 将关联查询信息映射到一个pojo 对象中。

     collection 将关联查询的信息映射到一个list 集合中。


    场合:

    1. 与订单关联的用户 一起的信息

    2. 用户购买的商品

    mybatis Mapper 中 resultType 使用方法及返回值为 Map 的写法

    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 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

    1. public class Blog {  
    2.        private int id;  
    3.        private String title;  
    4.        private String content;  
    5.        private String owner;  
    6.        private List<Comment> comments;  
    7. }  

     

    其所对应的数据库表中存储有id、title、Content、Owner属性。

     

    1. <typeAlias alias="Blog" type="com.tiantian.mybatis.model.Blog"/>  
    2. <select id="selectBlog" parameterType="int" resultType="Blog">  
    3.       select * from t_blog where id = #{id}  
    4. </select>  


    MyBatis会自动创建一个ResultMap对象,然后基于查找出来的属性名进行键值对封装,然后再看到返回类型是Blog对象,再从ResultMap中取出与Blog对象对应的键值对进行赋值。

    三、ResultMap
    当返回类型直接是一个ResultMap的时候也是非常有用的,这主要用在进行复杂联合查询上,因为进行简单查询是没有什么必要的。先看看一个返回类型为ResultMap的简单查询,再看看复杂查询的用法。

    ①简单查询的写法

    1. <resultMap type="Blog" id="BlogResult">  
    2.         <id column="id" property="id" />  
    3.         <result column="title" property="title" />  
    4.         <result column="content" property="content" />  
    5.         <result column="owner" property="owner" />  
    6.     </resultMap>  
    7.     <select id="selectBlog" parameterType="int" resultMap="BlogResult">  
    8.         select *  
    9.         from t_blog where id = #{id}  
    10.     </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 区别等相关内容,可以在本站寻找。

    本文标签:

    上一篇AspNetCore容器化(Docker)部署(四) —— Jenkins自动化部署(asp.net core docker部署)

    下一篇springboot-springmvc 文件上传、下载、压缩打包(springboot上传zip并解压)