最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談Mybatis獲取參數(shù)值的方式

 更新時(shí)間:2022年04月01日 11:50:11   作者:Java的學(xué)習(xí)之路  
本文主要介紹了Mybatis獲取參數(shù)值的方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

Mybatis獲取參數(shù)值的兩種方式:${},#{}

  • ${}本質(zhì):字符串拼接,注意:?jiǎn)我?hào)要加上
  • #{}:本質(zhì):占位符賦值

一、 Mybatis獲取參數(shù)值的各種情況

1.mapper接口方法的參數(shù)為單個(gè)字面量的類型

 /**
     * 根據(jù)用戶名來查詢信息
     * @return
     */
    User getUsername(String username);

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

既然傳入的參數(shù)有多個(gè),那么肯定也是可以傳入多個(gè)參數(shù)的,接下來我們來看一下獲取參數(shù)的第二種情況

2.mapper接口方法的參數(shù)有多個(gè)

 /**
     * 通過用戶名和密碼進(jìn)行驗(yàn)證登錄
     */
    User checkLogin(String username,String password);

在這里插入圖片描述

 @Test
 public void testCheckLogin() throws IOException {
  InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
  SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
  SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(resourceAsStream);
  SqlSession sqlSession = sqlSessionFactory.openSession(true);
  ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
  User user = mapper.checkLogin("李四", "123859");
  System.out.println(user);

 }

下面這個(gè)是報(bào)錯(cuò)信息

org.apache.ibatis.exceptions.PersistenceException:

Error querying database. Cause: org.apache.ibatis.binding.BindingException: Parameter ‘username’ not found. Available parameters are [arg1, arg0, param1, param2]
Cause: org.apache.ibatis.binding.BindingException: Parameter ‘username’ not found. Available parameters are [arg1, arg0, param1, param2]

Mybatis檢測(cè)到我們的參數(shù)有多個(gè)的時(shí)候,它會(huì)自動(dòng)把參數(shù)放到Map集合中

如果想要獲得數(shù)據(jù),就應(yīng)該通過下面的方法

在這里插入圖片描述

在這里插入圖片描述

這里有一個(gè)注意點(diǎn):
剛剛的報(bào)錯(cuò)信息Available parameters are [arg1, arg0, param1, param2]
這就說明了,arg1,param1它們是存儲(chǔ)在一起的,所以我們其實(shí)是可以混合使用者兩個(gè)的

在這里插入圖片描述

使用${}來獲取參數(shù)值的使用方式是一樣的,這里就不演示了,大家可以自己試試,不過再次強(qiáng)調(diào):${}本質(zhì)是字符串拼接,我們使用的時(shí)候記得加上單引號(hào)

總結(jié):第二中方式就是通過mybatis自定義的key來訪問數(shù)據(jù),下面的第三種方式我們可以自定義key來訪問

3.手動(dòng)把參數(shù)放在map集合中

如果mapper接口中的方法的參數(shù)有多個(gè)的時(shí)候,我們可以手動(dòng)把參數(shù)放在map集合中存儲(chǔ)

mapper接口中定義的方法
 User checkLoginByMap(Map<String,Object> map);

測(cè)試程序

InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
  SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
  SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(resourceAsStream);
  SqlSession sqlSession = sqlSessionFactory.openSession(true);
  ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);

   Map<String, Object> map = new HashMap<>();
   map.put("username","張三");
   map.put("password","123456");
   User user=mapper.checkLoginByMap(map);
  System.out.println(user);

在這里插入圖片描述

總結(jié):第三種方式:我們可以自定義key來訪問,技巧:mapper接口的方法參數(shù)是map集合,我們?cè)跍y(cè)試程序的時(shí)候,存儲(chǔ)數(shù)據(jù)的時(shí)候,可以指定存儲(chǔ)的key的值

在這里插入圖片描述

還有一種獲取參數(shù)值的形式就是,前端通過表單把完整數(shù)據(jù)傳給后端,我們可以獲取數(shù)據(jù),并且把數(shù)據(jù)存到對(duì)應(yīng)的實(shí)體類中, 這個(gè)時(shí)候,當(dāng)我們調(diào)用service方法,那么傳輸過來的數(shù)據(jù)應(yīng)該就是實(shí)體類對(duì)象。實(shí)體類對(duì)象是屬性名=值這樣來存儲(chǔ)數(shù)據(jù),map集合是key=value的形式來存儲(chǔ)數(shù)據(jù),這兩種方式存儲(chǔ)數(shù)據(jù)其實(shí)是很像的

4.mapper接口方法的參數(shù)是實(shí)體類型的參數(shù)

  /**
     * 添加用戶信息
     */
    int insertUser(User user);
 @Test
 public void testInsertUser() throws IOException {
  InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
  SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
  SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(resourceAsStream);
  SqlSession sqlSession = sqlSessionFactory.openSession(true);
  ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
  User user=new User();
  user.setId(15);
  user.setUsername("錢七");
  user.setPassword("5613");
  int i = mapper.insertUser(user);
  System.out.println(i);
 }

在這里插入圖片描述

在這里插入圖片描述

總結(jié):通過#{}或${}以屬性的方式來訪問屬性值,再次強(qiáng)調(diào)${}的單引號(hào)問題,需要注意。如果我們#{}括號(hào)里面的值不是屬性名那么就會(huì)報(bào)錯(cuò)

5.通過@Param注解命名參數(shù)(比較常用)

使用@Param注解來命名參數(shù),此時(shí)Mybatis會(huì)把這些參數(shù)放在一個(gè)map集合中,以兩種方式來進(jìn)行存儲(chǔ)
①@Param注解的值為鍵,參數(shù)為值
②以param1,param2…作為鍵,以參數(shù)為值
我們只需要通過#{}和${} 以鍵的形式來訪問值就可以了

這里是引用

測(cè)試

username,@Param("password") String password);-->
    <select id="checkLoginByParam" resultType="com.atguigu.mybatis.pojo.User">
        select * from t_user where username=#{param1}  and password= #{password};
    </select> 

注意點(diǎn):這個(gè)時(shí)候,存儲(chǔ)的key,value形式有兩種,一種形式的key是我們職工時(shí)候通過注解來命名的參數(shù)的名字,還有一種就是以param1,param2……作為key,所以這兩種形式都可以用來取數(shù)據(jù),不可以用arg0,arg1的形式來獲取數(shù)據(jù),要和情況2區(qū)分開

在這里插入圖片描述

這里是引用

二、總結(jié)

上面講的五種情況,可以歸結(jié)為兩種情況,一種是參數(shù)類型為實(shí)體類型,第二種類型是通過@Param注解來命名參數(shù)

三、Param源碼分析

這里是引用

由于我也是剛學(xué)習(xí)Mybatis的相關(guān)內(nèi)容,所以理解可能不夠到位,這里我推薦大家可以看這篇文章MyBatis源碼解讀 - @Param注解。
以后,我還會(huì)回頭來更新Mybatis源碼相關(guān)的內(nèi)容,初學(xué)者的話,大家先以熟練使用為主,然后再慢慢的理解其中底層的原理,不要一下子就鉆進(jìn)源碼中,這樣可能導(dǎo)致畏難心理,這是我的一點(diǎn)體會(huì)。

到此這篇關(guān)于淺談Mybatis獲取參數(shù)值的方式的文章就介紹到這了,更多相關(guān)Mybatis獲取參數(shù)值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java線程中的interrupt方法解讀

    Java線程中的interrupt方法解讀

    這篇文章主要介紹了Java線程中的interrupt方法解讀,Java中的interrupt是一種線程間通信的機(jī)制,用于請(qǐng)求中斷線程的執(zhí)行。當(dāng)一個(gè)線程調(diào)用另一個(gè)線程的interrupt()方法時(shí),被調(diào)用線程會(huì)收到一個(gè)中斷信號(hào),可以根據(jù)需要做出相應(yīng)的處理,需要的朋友可以參考下
    2023-10-10
  • Java實(shí)現(xiàn)多行文字水印的方法詳解

    Java實(shí)現(xiàn)多行文字水印的方法詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用Java實(shí)現(xiàn)多行文字水印的方法,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下
    2023-02-02
  • Spring MVC 文件上傳的示例代碼

    Spring MVC 文件上傳的示例代碼

    本篇文章主要介紹了Spring MVC 文件上傳的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • JUC循環(huán)屏障CyclicBarrier與CountDownLatch區(qū)別詳解

    JUC循環(huán)屏障CyclicBarrier與CountDownLatch區(qū)別詳解

    這篇文章主要為大家介紹了JUC循環(huán)屏障CyclicBarrier與CountDownLatch區(qū)別詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Java中spring讀取配置文件的幾種方法示例

    Java中spring讀取配置文件的幾種方法示例

    本篇文章中主要介紹了Java中spring讀取配置文件的幾種方法示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • Java小項(xiàng)目之迷宮游戲的實(shí)現(xiàn)方法

    Java小項(xiàng)目之迷宮游戲的實(shí)現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于Java小項(xiàng)目之迷宮的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 詳談Java中的Object、T(泛型)、?區(qū)別

    詳談Java中的Object、T(泛型)、?區(qū)別

    下面小編就為大家?guī)硪黄斦凧ava中的Object、T(泛型)、?區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • java計(jì)算π的多種方法

    java計(jì)算π的多種方法

    這篇文章主要介紹了使用java計(jì)算π的多種方法,代碼詳細(xì),邏輯清晰,對(duì)于算法思路可能有所幫助,需要的朋友可以參考下
    2021-04-04
  • 詳解Spring Boot最新版優(yōu)雅停機(jī)的方法

    詳解Spring Boot最新版優(yōu)雅停機(jī)的方法

    這篇文章主要介紹了Spring Boot最新版優(yōu)雅停機(jī)的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • eclipse怎么引入spring boot項(xiàng)目插件的方法

    eclipse怎么引入spring boot項(xiàng)目插件的方法

    這篇文章主要介紹了eclipse怎么引入spring boot項(xiàng)目插件的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06

最新評(píng)論

天镇县| 青海省| 昭通市| 新建县| 西青区| 全南县| 西城区| 宝坻区| 正镶白旗| 烟台市| 中宁县| 开远市| 汽车| 道孚县| 通江县| 桐梓县| 浠水县| 天台县| 视频| 泰州市| 肥乡县| 沅陵县| 阿鲁科尔沁旗| 尉氏县| 木里| 绥宁县| 石河子市| 赤壁市| 白玉县| 曲周县| 通河县| 禄丰县| 思茅市| 长海县| 勃利县| 南郑县| 林芝县| 宝清县| 亳州市| 闽清县| 怀远县|