很多時(shí)候,我們需要傳入多個(gè)參數(shù)給sql語(yǔ)句接收运悲,但是如果這些參數(shù)整體不是一個(gè)對(duì)象龄减,那么我們應(yīng)該怎么做呢?這里有兩種解決方案班眯,僅供參考希停。
1.將多個(gè)參數(shù)封裝成為Map
測(cè)試接口,我們傳入一個(gè)Map署隘,里面的value是一個(gè)對(duì)象宠能,那么我們可以放字符串,數(shù)字磁餐,以及一個(gè)student對(duì)象违崇。
@Test
public void testselectStudentByNameAndAge(){
Student stu=new Student("lallal", 1212, 40);
Map<String,Object> map=new HashMap<String, Object>();
map.put("nameCon", "hello");
map.put("ageCon", 14);
map.put("stu", stu);
List<Student>students=dao.selectStudentByNameAndAge(map);
if(students.size()>0){
for(Student student:students)
System.out.println(student);
}
}
我們的sql接口,傳入的是一個(gè)Map诊霹,key為String,value為對(duì)象羞延。
public List<Student>selectStudentByNameAndAge(Map<String,Object> map);
下面是sql語(yǔ)句,如果value是基本類(lèi)型的話(huà),我們需要使用#{},里面一定寫(xiě)對(duì)應(yīng)的key脾还,如果value是一個(gè)對(duì)象的話(huà)伴箩,里面我們需要寫(xiě)對(duì)應(yīng)的key.屬性
,比如#{stu.score}
:
<select id="selectStudentByNameAndAge" resultType="Student">
select id,name,age,score from student where name like '%' #{nameCon} '%' and age> #{ageCon} and score>#{stu.score}
</select>
2.使用索引接收多個(gè)參數(shù)
我們的測(cè)試類(lèi)如下鄙漏,傳入兩個(gè)參數(shù):
@Test
public void testselectStudentByNameAndAgeV2(){
Student stu=new Student("lallal", 1212, 40);
List<Student>students=dao.selectStudentByNameAndAgeV2("hello",14);
if(students.size()>0){
for(Student student:students)
System.out.println(student);
}
}
在sql接口中使用兩個(gè)參數(shù)
public List<Student>selectStudentByNameAndAgeV2(String name,int age);
在sql語(yǔ)句里面可以使用索引號(hào),例如#{0},下標(biāo)從零開(kāi)始嗤谚,與參數(shù)一一對(duì)應(yīng)
<!-- 接受多個(gè)參數(shù) -->
<select id="selectStudentByNameAndAgeV2" resultType="Student">
select id,name,age,score from student where name like '%' #{0} '%' and age> #{1}
</select>
個(gè)人理解:如果是簡(jiǎn)單的多參數(shù)棺蛛,比如沒(méi)有涉及到對(duì)象的,可以直接使用索引號(hào)就可以了巩步,這樣看起來(lái)更簡(jiǎn)單旁赊,如果涉及到參數(shù)是對(duì)象的話(huà),需要使用對(duì)象的屬性就用不了索引號(hào)椅野,需要使用map彤恶,如果參數(shù)較多的話(huà),使用map更加方便鳄橘,修改的時(shí)候也更有優(yōu)勢(shì)声离。
【作者簡(jiǎn)介】:
秦懷,公眾號(hào)【秦懷雜貨店】作者瘫怜,技術(shù)之路不在一時(shí)术徊,山高水長(zhǎng),縱使緩慢鲸湃,馳而不息赠涮。這個(gè)世界希望一切都很快,更快暗挑,但是我希望自己能走好每一步笋除,寫(xiě)好每一篇文章,期待和你們一起交流炸裆。