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)文章
關(guān)于@ApiModel和@ApiModelProperty的使用
這篇文章主要介紹了關(guān)于@ApiModel和@ApiModelProperty的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11
SpringBoot org.springframework.beans.factory.Unsatisfie
本文主要介紹了SpringBoot org.springframework.beans.factory.UnsatisfiedDependencyException依賴注入異常,文中通過示例代碼介紹的很詳細,具有一定的參考價值,感興趣的可以了解一下2024-02-02
解決IDEA2020 創(chuàng)建maven項目沒有src/main/java目錄和webapp目錄問題
這篇文章主要介紹了IDEA2020 創(chuàng)建maven項目沒有src/main/java目錄和webapp目錄問題解決方法,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10
Sprigmvc項目轉(zhuǎn)為springboot的方法
本篇文章主要介紹了Sprigmvc項目轉(zhuǎn)為springboot的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02

