一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 淺談mybatis返回單一對象或對象列表的問題

淺談mybatis返回單一對象或對象列表的問題

2021-12-03 13:39MichaelChansn Java教程

這篇文章主要介紹了淺談mybatis返回單一對象或對象列表的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

mybatis返回單一對象或對象列表

一、說明

  • 返回數據類型由dao中的接口和map.xml文件共同決定。另外,不論是返回單一對象還是對象列表,***map.xml中的配置都是一樣的,都是resultMap=”***Map”或resultType=“* .* .*”類型.
  • 每一次mybatis從數據庫中select數據之后,都會檢查數據條數和dao中定義的返回值是否匹配。
  • 若返回一條數據,dao中定義的返回值是一個對象或對象的List列表,則可以正常匹配,將查詢的數據按照dao中定義的返回值存放。
  • 若返回多條數據,dao中定義的返回值是一個對象,則無法將多條數據映射為一個對象,此時mybatis報錯。

二、代碼測試

UserMap.xml映射文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<resultMap id="BaseResultMap" type="com.ks.ssm.domain.User" >
    <id column="id" property="id" jdbcType="BIGINT" />
    <result column="username" property="username" jdbcType="VARCHAR" />
    <result column="password" property="password" jdbcType="VARCHAR" />
    <result column="email" property="email" jdbcType="VARCHAR" />
    <result column="qq" property="qq" jdbcType="VARCHAR" />
    <result column="phone" property="phone" jdbcType="VARCHAR" />
    <result column="gender" property="gender" jdbcType="BIT" />
    <result column="birthday" property="birthday" jdbcType="DATE" />
    <result column="city" property="city" jdbcType="VARCHAR" />
    <result column="mood" property="mood" jdbcType="VARCHAR" />
    <result column="single" property="single" jdbcType="BIT" />
    <result column="enrolltime" property="enrolltime" jdbcType="TIMESTAMP" />
    <result column="level" property="level" jdbcType="TINYINT" />
    <result column="status" property="status" jdbcType="BIT" />
    <result column="titlepic" property="titlepic" jdbcType="VARCHAR" />
    <result column="job" property="job" jdbcType="VARCHAR" />
    <result column="logintime" property="logintime" jdbcType="TIMESTAMP" />
    <result column="loginip" property="loginip" jdbcType="VARCHAR" />
    <result column="token" property="token" jdbcType="VARCHAR" />
    <result column="modifytime" property="modifytime" jdbcType="TIMESTAMP" />
  </resultMap>
  <sql id="Base_Column_List" >
    id, username, password, email, qq, phone, gender, birthday, city, mood, single, enrolltime,
    level, status, titlepic, job, logintime, loginip, token, modifytime
  </sql>
  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
    select
    <include refid="Base_Column_List" />
    from user_info
    where id = #{id,jdbcType=BIGINT}
  </select>
  <!-- add by ks -->
    <select id="selectByUserName" resultMap="BaseResultMap" parameterType="java.lang.String" >
    select
    <include refid="Base_Column_List" />
    from user_info
    where username = #{username,jdbcType=VARCHAR}
   </select>
   <!-- mybatis 非常的智能,返回值統一使用 resultMap="BaseResultMap",mybatis會根據查詢到的條目數量自動進行判斷,如果是一條就返回對象,如果是多條就返回List對象列表-->
  <select id="selectByEmail" resultMap="BaseResultMap" parameterType="java.lang.String" >
    select
    <include refid="Base_Column_List" />
    from user_info
    where email = #{email,jdbcType=VARCHAR}
   </select>
   <!-- end by ks -->

dao文件UserMap.java

?
1
2
3
4
5
6
7
8
9
10
11
public interface UserMapper {
    User selectByPrimaryKey(Long id);
    User selectByUserName(String username );
    /**關于mybatis返回單一對象或對象列表的問題:
     * 1.返回數據類型由dao中的接口和*map.xml文件共同決定。另外,不論是返回單一對象還是對象列表,*map.xml中的配置都是一樣的,都是resultMap="*Map"*或resultType=“* .* .*”類型.
     * 2.每一次mybatis從數據庫中select數據之后,都會檢查數據條數和dao中定義的返回值是否匹配。
     * 3.若返回一條數據,dao中定義的返回值是一個對象或對象的List列表,則可以正常匹配,將查詢的數據按照dao中定義的返回值存放。
     * 4.若返回多條數據,dao中定義的返回值是一個對象,則無法將多條數據映射為一個對象,此時mybatis報錯。
     * */
    List<User> selectByEmail(String email );
}

測試代碼和結果文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@RunWith(SpringJUnit4ClassRunner.class)     //表示繼承了SpringJUnit4ClassRunner類
@ContextConfiguration(locations = {"classpath:spring-mybatis.xml"})
public class TestMyBatis {
  private static Logger logger = Logger.getLogger(TestMyBatis.class);
  @Resource
  private UserMapper userDao;
  @Test
  public void testMybatis() {
    User user = userDao.selectByUserName("ks");
    logger.info("user.........................");
    logger.info(JSON.toJSONString(user));
    List<User> users=userDao.selectByEmail("ks");
    logger.info("list.........................");
    for(User userTemp : users)
    {
        logger.info(JSON.toJSONString(userTemp));
    }
  }
}

淺談mybatis返回單一對象或對象列表的問題

mybatis 返回的對象包含集合

DeviceQuestionInstruction.java

?
1
2
3
4
5
6
7
8
9
import com.hikari.cloud.data.entity.TbInstruction;
import lombok.Data;
import java.util.Date;
import java.util.List;
@Data
public class DeviceQuestionInstruction {//tb_instruction  使用說明表
    private String dvqsTitle;
    private List<TbInstruction> instructionList;
}

TbInstruction.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import lombok.Data;
import java.util.Date;
@Data
public class TbInstruction {//tb_instruction  使用說明表
    private Long id;
    private Long userId;
    private String title;
    private String detail;
    private String url;
    private Integer type;
    private Integer suffix;
    private String deviceCategory;
    private String deviceTypeName;
    private String deviceTypeNum;
    private Integer views;
    private Long dvqsId;
    private Integer dvqsLevel;
    private Date gmtCreate;
}

TbDeviceQuestionMapper.java

?
1
2
3
4
5
6
import com.hikari.cloud.data.bean.DeviceQuestionInstruction;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface TbDeviceQuestionMapper {
    List<DeviceQuestionInstruction> findByNo(@Param("deviceTypeNo") String deviceTypeNo);
}

TbDeviceQuestionMapper.xml

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?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.hikari.cloud.data.mapper.TbDeviceQuestionMapper">
    <resultMap id="dataMap" type="com.hikari.cloud.data.bean.DeviceQuestionInstruction">
        <result column="dvqs_title" property="dvqsTitle"/>
        <collection property="instructionList" resultMap="insResultMap"/>
    </resultMap>
    <resultMap id="insResultMap" type="com.hikari.cloud.data.entity.TbInstruction">
        <result column="id" property="id"/>
        <result column="user_id" property="userId"/>
        <result column="title" property="title"/>
        <result column="detail" property="detail"/>
        <result column="url" property="url"/>
        <result column="type" property="type"/>
        <result column="suffix" property="suffix"/>
        <result column="device_category" property="deviceCategory"/>
        <result column="device_type_name" property="deviceTypeName"/>
        <result column="device_type_num" property="deviceTypeNum"/>
        <result column="views" property="views"/>
        <result column="dvqs_id" property="dvqsId"/>
        <result column="dvqs_level" property="dvqsLevel"/>
        <result column="gmt_create" property="gmtCreate"/>
    </resultMap>
    <select id="findByNo" resultType="com.hikari.cloud.data.bean.DeviceQuestionInstruction" resultMap="dataMap">
        SELECT tb_device_question.title AS dvqs_title,tb_instruction.* FROM tb_device_question
        LEFT JOIN tb_instruction
        ON tb_device_question.id=tb_instruction.dvqs_id
        WHERE tb_device_question.device_type_no='HSAT-K5'
        ORDER BY tb_instruction.dvqs_level ASC
    </select>
</mapper>

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/kangsenkangsen/article/details/51236279

延伸 · 閱讀

精彩推薦
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
主站蜘蛛池模板: 好爽好舒服视频 | 蜜臀91 | 免费亚洲视频在线观看 | 久久精品国产免费播放 | 日b在线 | 亚洲久草在线 | 国产在线观看一区 | 国产精品成人网红女主播 | 2022国产麻豆剧传媒古装 | 日韩毛片免费 | 国产精品视频一区二区三区w | 午夜福利理论片高清在线 | 十八女下面流水不遮免费 | 亚洲天堂日韩在线 | 99视频网址 | 亚洲 欧美 清纯 校园 另类 | 久久国产乱子伦精品免费不卡 | 午夜伦伦电影理论片费看 | 狠狠做五月深爱婷婷天天综合 | 99超级碰碰成人香蕉网 | 厨房里摸着乳丰满在线观看 | 亚洲天堂男人 | 1024人成网站色 | 国产区香蕉精品系列在线观看不卡 | 青青草99| 亚洲10p| 大伊人青草狠狠久久 | 国产香蕉97碰碰在线视频 | 色臀网站| 免费观看一区二区 | 国产成人精品福利色多多 | 五月天精品视频在线观看 | 午夜免费无码福利视频麻豆 | 我被黄总征服的全过程 | 美女被草出水 | 久久毛片免费看一区二区三区 | 4444亚洲国产成人精品 | 欧美破处摘花 | 青青网在线视频 | 国产亚洲精品日韩香蕉网 | 精品国产免费久久久久久 |