<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Mybatis獲取引數值的兩種方式:${},#{}
/** * 根據使用者名稱來查詢資訊 * @return */ User getUsername(String username);
既然傳入的引數有多個,那麼肯定也是可以傳入多個引數的,接下來我們來看一下獲取引數的第二種情況
/** * 通過使用者名稱和密碼進行驗證登入 */ 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); }
下面這個是報錯資訊
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檢測到我們的引數有多個的時候,它會自動把引數放到Map集合中
如果想要獲得資料,就應該通過下面的方法
這裡有一個注意點:
剛剛的報錯資訊Available parameters are [arg1, arg0, param1, param2]
這就說明了,arg1,param1它們是儲存在一起的,所以我們其實是可以混合使用者兩個的
使用${}來獲取引數值的使用方式是一樣的,這裡就不演示了,大家可以自己試試,不過再次強調:${}本質是字串拼接,我們使用的時候記得加上單引號
總結:第二中方式就是通過mybatis自定義的key來存取資料,下面的第三種方式我們可以自定義key來存取
如果mapper介面中的方法的引數有多個的時候,我們可以手動把引數放在map集合中儲存
mapper介面中定義的方法 User checkLoginByMap(Map<String,Object> map);
測試程式
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);
總結:第三種方式:我們可以自定義key來存取,技巧:mapper介面的方法引數是map集合,我們在測試程式的時候,儲存資料的時候,可以指定儲存的key的值
還有一種獲取引數值的形式就是,前端通過表單把完整資料傳給後端,我們可以獲取資料,並且把資料存到對應的實體類中, 這個時候,當我們呼叫service方法,那麼傳輸過來的資料應該就是實體類物件。實體類物件是屬性名=值這樣來儲存資料,map集合是key=value的形式來儲存資料,這兩種方式儲存資料其實是很像的
/** * 新增使用者資訊 */ 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); }
總結:通過#{}或${}以屬性的方式來存取屬性值,再次強調${}的單引號問題,需要注意。如果我們#{}括號裡面的值不是屬性名那麼就會報錯
使用@Param註解來命名引數,此時Mybatis會把這些引數放在一個map集合中,以兩種方式來進行儲存
①@Param註解的值為鍵,引數為值
②以param1,param2…作為鍵,以引數為值
我們只需要通過#{}和${} 以鍵的形式來存取值就可以了
測試
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>
注意點:這個時候,儲存的key,value形式有兩種,一種形式的key是我們職工時候通過註解來命名的引數的名字,還有一種就是以param1,param2……作為key,所以這兩種形式都可以用來取資料,不可以用arg0,arg1的形式來獲取資料,要和情況2區分開
上面講的五種情況,可以歸結為兩種情況,一種是引數型別為實體型別,第二種型別是通過@Param註解來命名引數
由於我也是剛學習Mybatis的相關內容,所以理解可能不夠到位,這裡我推薦大家可以看這篇文章MyBatis原始碼解讀 - @Param註解。
以後,我還會回頭來更新Mybatis原始碼相關的內容,初學者的話,大家先以熟練使用為主,然後再慢慢的理解其中底層的原理,不要一下子就鑽進原始碼中,這樣可能導致畏難心理,這是我的一點體會。
到此這篇關於淺談Mybatis獲取引數值的方式的文章就介紹到這了,更多相關Mybatis獲取引數值內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45