<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      MyBatis踩坑之單字符條件比較

      背景

      Mybatis中可以使用 <choose><when>...</when></choose> 語句來實現條件選擇,<when> 標簽含有 test 屬性用于設置比較條件,但是在某些特定情況下,字符串的比較會存在一個坑,那就是單字符字符串會被降級為字符類型(char),從而導致比較條件不會生效。

      示例

      假設有如下需求:用戶分為個人賬戶和機構賬戶兩類,其中個人賬戶使用身份證注冊,機構用戶使用機構統一社會信用代碼注冊,某個功能需要提供根據用戶類型(個人/機構)以及對應的證件號碼查詢用戶信息。

      1. 數據庫

      CREATE TABLE `t_user` (
        `id` int NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',
        `username` varchar(50) NOT NULL COMMENT '用戶名',
        `user_type` varchar(1) NOT NULL COMMENT '用戶類型(0-個人用戶,1-機構用戶)',
        `user_id` varchar(18) DEFAULT NULL COMMENT '個人用戶身份證',
        `org_id` varchar(18) DEFAULT NULL COMMENT '企業用戶機構代碼',
        `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',
        `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
        PRIMARY KEY (`id`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
      

      2. 對應的MyBatis Mapper文件

       <select id="getUser" resultMap="UserMap">
          SELECT
          <include refid="base_columns" />
          FROM t_user
          WHERE 1=1
          AND user_type = #{userType,jdbcType=VARCHAR}
          <choose>
              <when test="userType == '0'">
                  AND user_id = #{userId,jdbcType=VARCHAR}
              </when>
              <when test="userType == '1'">
                  AND org_id = #{orgId,jdbcType=VARCHAR}
              </when>
          </choose>
      </select>
      

      接口調用:

      User user = userMapper.getUser("0", "310109196509080012", null);
      

      跑單元測試發現報錯:

      org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 3
      

      檢查SQL語句調用,發現 <when> 中定義的 AND 連接條件根本沒有生效:

      SELECT id, username, user_type, user_id, org_id, create_time, update_time FROM t_user WHERE 1=1 AND user_type = ?
      

      3. 解決方案

      解決方案有兩種,一是把 <when> 中條件語句等號右邊的字符串改為整數,二是把條件語句等號右邊的字符串加上 .toString() 方法調用。

      修改后再次運行單元測試,測試通過,輸出的SQL語句如下:

      SELECT id, username, user_type, user_id, org_id, create_time, update_time FROM t_user WHERE 1=1 AND user_type = ? AND user_id = ?
      
      posted @ 2023-11-17 17:26  飛鳥_Asuka  閱讀(416)  評論(0)    收藏  舉報
      主站蜘蛛池模板: av老司机亚洲精品天堂| av无码精品一区二区三区四区| 久久精品国产久精国产| 国产激情一区二区三区在线| 亚洲av无码专区在线亚| 日韩国产欧美精品在线| 国产亚洲精品VA片在线播放| 精品国产丝袜自在线拍国语| 国内精品久久久久影院蜜芽| 宝山区| 无码人妻日韩一区日韩二区| 中文字幕少妇人妻精品| 男人的天堂av社区在线| 99国产精品自在自在久久| 啊轻点灬大JI巴太粗太长了在线| 69天堂人成无码免费视频| 中文字幕日韩人妻一区| 国产一区二区三区色噜噜| 人妻少妇邻居少妇好多水在线| 亚洲国产精品久久一线不卡| 国产精品久久无中文字幕| 国产啪视频免费观看视频| 亚洲欧洲精品一区二区| 99热这里只有精品免费播放| 国产精品麻豆va在线播放| 日本视频一区二区三区1| 在线观看视频一区二区三区| 亚洲午夜香蕉久久精品| 亚洲女人的天堂在线观看| 中文字幕乱码熟女人妻水蜜桃| 丝袜美腿亚洲综合第一区| 国产精品入口中文字幕| 亚洲色成人一区二区三区人人澡人人妻人人爽人人蜜桃麻豆 | 欧美性猛交xxxx乱大交丰满| 高清无打码一区二区三区| 亚洲男人天堂2018| 日本激情久久精品人妻热| 男女扒开双腿猛进入爽爽免费看| 久久99精品国产自在现线小黄鸭| 视频一区二区不中文字幕| AV毛片无码中文字幕不卡|