mybatis之多參數(shù)查詢方式
mybatis多參數(shù)查詢
利用map封裝多個參數(shù)
xxxmapper.xml的查詢語句(直接用占位符#{key},key就是map的key)
<select id="selectByMap" parameterType="hashmap" resultType="com.mybatis_demo.domain.User"> ?? ?select * from t_user where uname like concat('%',#{uname},'%') and age>#{age} </select>
測試代碼
//用map封裝多個參數(shù)實現(xiàn)多參數(shù)查詢 ?? ?@Test ?? ?public void test6() { ?? ??? ?try { ?? ??? ??? ?//讀取配置文件 ?? ??? ??? ?InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml"); ?? ??? ??? ?//創(chuàng)建sqlSessionFactoryBuilder ?? ??? ??? ?SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); ?? ??? ??? ?//利用sqlSessionFactoryBuilder獲取sqlSessionFactory ?? ??? ??? ?SqlSessionFactory sqlSessionFactory = builder.build(in); ?? ??? ??? ?//利用sqlSessionFactory獲取sqlSeesion ?? ??? ??? ?SqlSession session = sqlSessionFactory.openSession(); ?? ??? ??? ?//利用sqlSeesion操作數(shù)據(jù)庫 ?? ??? ??? ?Map<String,Object> map = new HashMap<String,Object>(); ?? ??? ??? ?map.put("uname", "明"); ?? ??? ??? ?map.put("age", 95); ?? ??? ??? ?List<User> list = session.selectList("UserMapper.selectByMap", map); ?? ??? ??? ?for (User user : list) { ?? ??? ??? ??? ?System.out.println(user); ?? ??? ??? ?} ?? ??? ?} catch (IOException e) { ?? ??? ??? ?e.printStackTrace(); ?? ??? ?} ?? ?}
利用list封裝多個參數(shù)
xxxmapper.xml的查詢語句(通過foreach遍歷list集合,其中item代表變量,open表示以"(“開頭,separator表示變量之間以”,“隔開,close表示以”)"結(jié)尾,即遍歷結(jié)果是(1,3,4,9)
<select id="selectByList" parameterType="java.util.List" resultType="com.mybatis_demo.domain.User"> ?? ?select * from t_user where uid in ?? ?<foreach collection="list" item="item" open="(" separator="," close=")"> ?? ??? ?#{item} ?? ?</foreach> </select>
測試代碼:
//多參數(shù)查詢,用list傳遞參數(shù),在對應(yīng)的mapper.xml文件中使用foreach進行遍歷 ?? ?@Test ?? ?public void test7() { ?? ??? ?try { ?? ??? ??? ?//讀取配置文件 ?? ??? ??? ?InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml"); ?? ??? ??? ?//創(chuàng)建sqlSessionFactoryBuilder ?? ??? ??? ?SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); ?? ??? ??? ?//利用sqlSessionFactoryBuilder獲取sqlSessionFactory ?? ??? ??? ?SqlSessionFactory sqlSessionFactory = builder.build(in); ?? ??? ??? ?//利用sqlSessionFactory獲取sqlSeesion ?? ??? ??? ?SqlSession session = sqlSessionFactory.openSession(); ?? ??? ??? ?//利用sqlSeesion操作數(shù)據(jù)庫 ?? ??? ??? ?List<Integer> test = new ArrayList<Integer>(); ?? ??? ??? ?test.add(1); ?? ??? ??? ?test.add(3); ?? ??? ??? ?test.add(4); ?? ??? ??? ?test.add(9); ?? ??? ??? ?List<User> users = session.selectList("UserMapper.selectByList", test); ?? ??? ??? ?for (User user : users) { ?? ??? ??? ??? ?System.out.println(user); ?? ??? ??? ?} ?? ??? ?} catch (IOException e) { ?? ??? ??? ?e.printStackTrace(); ?? ??? ?} ?? ?}
如果使用動態(tài)代理mapper開發(fā),還有另外一種方法
mapper映射文件
<?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.mybatis_demo.mapper.UserMapper"> <select id="selectByMoreParamter" resultType="com.mybatis_demo.domain.User"> ?? ?<!-- select * from t_user where uname like concat('%',#{param1},'%') and age = #{param2} and address = #{param3} --> ?? ?select * from t_user where uname like concat('%',#{arg0},'%') and age = #{arg1} and address = #{arg2} </select> </mapper>
mapper接口
public interface UserMapper { ?? ?//mybatis使用mapper動態(tài)代理 ?? ?//4大原則,一個注意 ?? ?//1.接口中的方法名需要與對應(yīng)mapper.xml的id一致 ?? ?//2.接口中的返回值需要與對應(yīng)mapper.xml的返回值類型保持一致 ?? ?//3.接口中的參數(shù)需要與對應(yīng)mapper.xml的參數(shù)類型、個數(shù)、參數(shù)名保持一致 ?? ?//4.對應(yīng)mapper.xml的名字空間需要修改成對應(yīng)接口的全包名 ?? ?//注意:mapper動態(tài)代理根據(jù)返回值類型,mybatis會自動選擇調(diào)用selectone還是selectlist.... ?? ?//直接傳多個參數(shù) ?? ?public User selectByMoreParamter(String uname,Integer age,String address); }
測試代碼
//當傳入多個參數(shù)時,使用#{arg0}、#{arg1},arg+下標獲取參數(shù),下標從0開始 ?? ?//或者使用#{param1},param+下標獲取參數(shù)下標從1開始 ?? ?@Test ?? ?public void test_selectByMoreParamter() { ?? ??? ?try { ?? ??? ??? ? //讀取配置文件 ?? ??? ??? ?InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml"); ?? ??? ??? ?//創(chuàng)建SqlSessionFactoryBuilder對象,用來獲取SqlSessionFactory對象 ?? ??? ??? ?SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); ?? ??? ??? ?//利用SqlSessionFactoryBuilder對象build一個SqlSessionFactory對象 ?? ??? ??? ?SqlSessionFactory build = builder.build(in); ?? ??? ??? ?//利用sqlSessionFactory獲取session對象 ?? ??? ??? ?SqlSession session = build.openSession(); ?? ??? ??? ?//通過session對象獲取對應(yīng)mapper接口 ?? ??? ??? ?UserMapper mapper = session.getMapper(UserMapper.class); ?? ??? ??? ?User user = mapper.selectByMoreParamter("白", 4, "北京朝陽區(qū)"); ?? ??? ??? ?System.out.println(user); ?? ??? ?} catch (IOException e) { ?? ??? ??? ?e.printStackTrace(); ?? ??? ?} ?? ?}
注意:
用map可以封裝多種不同類型的參數(shù),list只能封裝同種類型的參數(shù);
使用動態(tài)代理可以使用arg+下標獲取參數(shù),下標從0開始;
或者使用param+下標獲取參數(shù),下標從1開始
mybatis一對多嵌套查詢多參數(shù)
在使用mybatis注解開發(fā)的時候經(jīng)常遇到一對多以及多對多的需求,而在使用mybatis嵌套查詢的時候,我遇到子查詢條件不止一個情況,這個時候需要我們父查詢傳遞多個參數(shù)過去給子查詢作為查詢條件。
那該怎么傳遞多個參數(shù)呢?我們只需要這樣設(shè)置,
column寫法 :
Result({property 名稱 = column 字段名 , property 名稱 = column 字段名 ...})
例子:
@Result(column = "{id?= id,aid?= article_id}")
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
springboot整合阿里云百煉DeepSeek實現(xiàn)sse流式打印的操作方法
這篇文章主要介紹了springboot整合阿里云百煉DeepSeek實現(xiàn)sse流式打印,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2025-04-04Mybatis執(zhí)行Update返回行數(shù)為負數(shù)的問題
這篇文章主要介紹了Mybatis執(zhí)行Update返回行數(shù)為負數(shù)的問題,具有很好的參考價值,希望大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12關(guān)于maven install報錯原因揭秘:parent.relativePath指向錯誤的本地POM文件
在使用Maven進行項目構(gòu)建時,如果遇到'parent.relativePath'指向錯誤的本地POM文件的問題,可能會導(dǎo)致構(gòu)建失敗,這通常是由于父項目POM文件的相對路徑設(shè)置錯誤、本地POM文件與父項目POM文件版本或內(nèi)容不一致所致,解決方法包括檢查并修正父項目POM文件中的相對路徑設(shè)置2024-09-09Spring Cloud Feign請求添加headers的實現(xiàn)方式
這篇文章主要介紹了Spring Cloud Feign請求添加headers的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04springboot執(zhí)行延時任務(wù)之DelayQueue實例
這篇文章主要介紹了springboot執(zhí)行延時任務(wù)之DelayQueue實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02kafka 啟動報錯 missingTopicsFatal is true的解決
這篇文章主要介紹了kafka 啟動報錯 missingTopicsFatal is true的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07Java調(diào)取創(chuàng)藍253短信驗證碼的實現(xiàn)代碼
這篇文章主要介紹了Java調(diào)取創(chuàng)藍253短信驗證碼的實現(xiàn)代碼,需要的朋友可以參考下2018-04-04