1 簡介
創(chuàng)新互聯(lián)致力于互聯(lián)網(wǎng)網(wǎng)站建設(shè)與網(wǎng)站營銷,提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)站開發(fā)、seo優(yōu)化、網(wǎng)站排名、互聯(lián)網(wǎng)營銷、小程序制作、公眾號商城、等建站開發(fā),創(chuàng)新互聯(lián)網(wǎng)站建設(shè)策劃專家,為不同類型的客戶提供良好的互聯(lián)網(wǎng)應(yīng)用定制解決方案,幫助客戶在新的全球化互聯(lián)網(wǎng)環(huán)境中保持優(yōu)勢。
1.1 單參數(shù)
在 Mybatis 中, 很多時候, 我們傳入接口的參數(shù)只有一個。 對應(yīng)接口參數(shù)的類型有兩種, 一種是基本的參數(shù)類型, 一種是 JavaBean 。
例如在根據(jù)主鍵獲取對象時, 我們只需要傳入一個主鍵的參數(shù)即可。 而在插入, 更新等操作時, 一般會涉及到很多參數(shù), 我們就使用 JavaBean 。
1.2 多參數(shù)
但是, 在實(shí)際的情況中, 我們遇到類似這樣的情況可能:
比如 獲取一段時間產(chǎn)生的日志信息, 日志對應(yīng)的 JavaBean 只有一個日期, 那我們使用該 JavaBean 就無法滿足我們的要求。
又比如我們進(jìn)行模糊搜索, 搜索條件只有兩個, 但對應(yīng)的 JavaBean 有 50+ 個成員變量, 那創(chuàng)建對應(yīng)的 JavaBean 就過于浪費(fèi)了。
對此, 我知道的有如下幾種方法
2 多個接口參數(shù)的兩種使用方式
2.1 Map 方法(不推薦)
Map 方法的使用很簡單, 就是將對應(yīng)的參數(shù)以 key-value 的方式存儲, key 對應(yīng) SQL 中的參數(shù)名字, value 對應(yīng)需要傳入的參數(shù)值。
以獲取一段時間內(nèi)存儲的用戶為例
2.1.1 創(chuàng)建接口方法
/** * 獲取一段時間內(nèi)的用戶 * @param params * @return */ List<Student> selectBetweenCreatedTime(Map<String, Object> params);
該方法返回的是多個記錄, 因此使用 List 作為返回值。
2.1.2 配置對應(yīng)的SQL
<select id="selectBetweenCreatedTime" parameterType="java.util.Map" resultMap="BaseResultMap"> select <include refid="Base_Column_List" /> from student where gmt_created > #{bTime, jdbcType=TIMESTAMP} and gmt_created < #{eTime, jdbcType=TIMESTAMP} </select>
id 與 之前創(chuàng)建的方法名一樣。
2.1.3 調(diào)用
@Test public void testSelectBtweenCreatedTimeMap() { Map<String, Object> params = new HashMap<>(); Calendar bTime = Calendar.getInstance(); // month 是從0~11, 所以9月是8 bTime.set(2018, Calendar.AUGUST, 29); params.put("bTime", bTime.getTime()); Calendar eTime = Calendar.getInstance(); eTime.set(2018,Calendar.SEPTEMBER,2); params.put("eTime", eTime.getTime()); SqlSession sqlSession = null; try { sqlSession = sqlSessionFactory.openSession(); StudentMapper studentMapper = (StudentMapper) sqlSession.getMapper(StudentMapper.class); List<Student> students = studentMapper.selectBetweenCreatedTime(params); for (int i = 0; i < students.size(); i++) { System.out.println(students.get(i)); } } catch (Exception e) { e.printStackTrace(); } finally { if (sqlSession != null) { sqlSession.close(); } } }
調(diào)用方法很簡單, 傳入相應(yīng)的 Map 參數(shù)即可。 此時, Map 中的 key 對應(yīng)。 因此, 在此例子中傳入的參數(shù)
2.2 @Param 方法(推薦)
@Param方法就是使用注解的方式,
2.2.1 創(chuàng)建接口方法
/** * 獲取指定時間內(nèi)的對象 * @param pbTime 開始時間 * @param peTime 結(jié)束時間 * @return */ List<Student> selectBetweenCreatedTimeAnno(@Param("bTime")Date pbTime, @Param("eTime")Date peTime);
@Param(“bTime”)就是告訴 mybatis , 參數(shù) pbTime 在 SQL 語句中用 bTime 作為 key 。
也就是說, mybatis 幫我們完成了調(diào)用時, 類似 params.put(“bTime”, pbTime) 這個過程。
2.2.2 配置 SQL 語句
<select id="selectBetweenCreatedTimeAnno" resultMap="BaseResultMap"> select <include refid="Base_Column_List" /> from student where gmt_created > #{bTime, jdbcType=TIMESTAMP} and gmt_created < #{eTime, jdbcType=TIMESTAMP} </select>
此處的 bTime 對應(yīng)** @Param(“bTime”)** 中的 bTime , 需要完全一致。
eTime也是一樣。
2.2.3 調(diào)用
在調(diào)用時, 不需要創(chuàng)建 Map 了, 只需要按參數(shù)提示傳入對應(yīng)的實(shí)際參數(shù)即可。
@Test public void testSelectBtweenCreatedTimeAnno() { Map<String, Object> params = new HashMap<>(); Calendar bTime = Calendar.getInstance(); // month 是從0~11, 所以9月是8 bTime.set(2018, Calendar.AUGUST, 29); Calendar eTime = Calendar.getInstance(); eTime.set(2018,Calendar.SEPTEMBER,2); SqlSession sqlSession = null; try { sqlSession = sqlSessionFactory.openSession(); StudentMapper studentMapper = (StudentMapper) sqlSession.getMapper(StudentMapper.class); List<Student> students = studentMapper.selectBetweenCreatedTimeAnno(bTime.getTime(), eTime.getTime()); for (int i = 0; i < students.size(); i++) { System.out.println(students.get(i)); } } catch (Exception e) { e.printStackTrace(); } finally { if (sqlSession != null) { sqlSession.close(); } } }
3 @Param 的優(yōu)勢
Map 方式的缺點(diǎn)就是需要手動創(chuàng)建 Map , 并對 SQL 中的參數(shù)進(jìn)行賦值。其缺點(diǎn):
相比于 Map 方式, 使用 @Param 時, 我們在使用上就像調(diào)用方法一樣, 傳入對應(yīng)的實(shí)際參數(shù)即可。 調(diào)用時基本不會出錯。
4 Github
相應(yīng)代碼, 可以訪問 我的Github-helloMybatis
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。
本文名稱:mybatis多個接口參數(shù)的注解使用方式(@Param)
本文鏈接:http://bm7419.com/article18/gihgdp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、移動網(wǎng)站建設(shè)、App開發(fā)、建站公司、面包屑導(dǎo)航、虛擬主機(jī)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)