1. 程式人生 > >Mybatis框架中mapper配置和foreach標籤的使用

Mybatis框架中mapper配置和foreach標籤的使用

foreach標籤

下面介紹一下一個mapper配置檔案中的foreach標籤(注意,要跟著前面的總結來看,這裡使用的例子是結合前面的工程寫的,大部分程式碼沒有再贅述)

foreach的作用是向sql傳遞陣列或List,mybatis使用foreach解析

1.1需求
在使用者查詢列表和查詢總數的statement中增加多個id輸入查詢。
sql語句如下:

兩種方法:
SELECT * FROM USER WHERE id=1 OR id=3 OR id=5

SELECT * FROM USER WHERE id IN(1,3,5)

1.2在輸入引數型別中新增List<Integer> ids傳入多個id

public class UserQueryVo {

//傳入多個id
private List<Integer> ids;

public List<Integer> getIds() {
return ids;
}

public void setIds(List<Integer> ids) {
this.ids = ids;
}
......
}

1.3修改mapper.xml

WHERE id=1 OR id=3 OR id=5
在查詢條件中,查詢條件定義成一個sql片段,需要修改sql片段。
  1. <prename="code"class="html">
  2. <!-- 定義sql片段   
  3. id:sql片段的唯一標識   
  4. 在sql片段中不要加入where  
  5. 經驗:一般我們定義sql片段是為了可重用性,是基於單表來定義sql片段,  
  6. 這樣的話這個sql片段可重用性才高-->
  7. <sqlid="query_user_where">
  8.     <iftest="ids!=null">
  9.         <!-- 使用foreach遍歷傳入ids   
  10.         collection指定輸入物件中集合屬性  
  11.         item每次遍歷生成的物件名  
  12.         open開始遍歷時要拼接的串  
  13.         close開始遍歷時要拼接的串  
  14.         separator遍歷的兩個物件中間需要拼接的串  
  15.         -->
  16.         <!-- 使用實現下邊的sql拼接   
  17.         WHERE (id=1 OR id=3 OR id=5)-->
  18.         <foreachcollection="ids"item="user_id"open="AND ("close=")"separator="OR">
  19.             <!-- 每次遍歷要拼接的串 -->
  20.             id=#{user_id}  
  21.         </foreach>
  22.     </if>
  23. </sql>
  24. <!-- 使用者資訊綜合查詢 -->
  25.     <selectid="findUserList"parameterType="cn.edu.hpu.mybatis.PO.UserQueryVo"
  26.                                 resultType="cn.edu.hpu.mybatis.PO.UserCustom">
  27.         select * from user   
  28.         <!-- where標籤可以自動去掉第一個and -->
  29.         <where>
  30.             <!-- 應用sql片段的id,如果refid指定的id不再本mapper檔案中,需要前邊加namespace -->
  31.             <includerefid="query_user_where"></include>
  32.             <!-- 在這裡還可能要引用其他的sql片段 -->
  33.         </where>
  34.     </select>
在mapper介面類中新增相應方法:
  1. //使用者管理的Dao介面
  2. publicinterface UserMapper {  
  3.     //使用者資訊綜合查詢
  4.     public List<UserCustom> findUserList(UserQueryVo userQueryVo) throws Exception;  
  5.     ......  
  6. }  

1.4測試程式碼
  1. //使用者資訊綜合查詢
  2.     @Test
  3.     publicvoid testFindUserList() throws Exception{  
  4.         SqlSession sqlSession=sqlSessionFactory.openSession();  
  5.         //建立UserMapper代理物件
  6.         UserMapper userMapper=sqlSession.getMapper(UserMapper.class);  
  7.         //建立包裝物件,設定查詢條件
  8.         UserQueryVo userQueryVo=new UserQueryVo();  
  9.         //傳入多個Id
  10.         List<Integer> ids=new ArrayList<Integer>();  
  11.         ids.add(1);  
  12.         ids.add(3);  
  13.         ids.add(5);  
  14.         //將ids通過userQueryVo傳入statement中
  15.         userQueryVo.setIds(ids);  
  16.         //呼叫userMapper的方法
  17.         List<UserCustom> users=userMapper.findUserList(userQueryVo);  
  18.         for (int i = 0; i < users.size(); i++) {  
  19.             UserCustom user=(UserCustom)users.get(i);  
  20.             System.out.println(user.getId()+":"+user.getUsername());  
  21.         }  
  22.     }  

測試結果:
1:張三
3:劉莉莉
5:劉三姐


日誌輸出:
  1. DEBUG [main] - Opening JDBC Connection  
  2. DEBUG [main] - Created connection 6867819.  
  3. DEBUG [main] - Setting autocommit to false on JDBC Connection [[email protected]]  
  4. DEBUG [main] - ==>  Preparing: select * from user WHERE ( id=? OR id=? OR id=? )   
  5. DEBUG [main] - ==> Parameters: 1(Integer), 3(Integer), 5(Integer)  
  6. DEBUG [main] - <==      Total: 3  

可以看到,sql語句select * from user WHERE ( id=? OR id=? OR id=? ) 通過foreach輸出成功


1.5另外一個sql的實現:
  1. <!-- 使用實現下邊的sql拼接   
  2. AND ID IN(1,3,5)-->
  3. <foreachcollection="ids"item="user_id"open="AND ID IN("close=")"separator=",">
  4.     <!-- 每次遍歷要拼接的串 -->
  5.     #{user_id}  
  6. </foreach>

相關推薦

Mybatis框架mapper配置foreach標籤的使用

foreach標籤下面介紹一下一個mapper配置檔案中的foreach標籤(注意,要跟著前面的總結來看,這裡使用的例子是結合前面的工程寫的,大部分程式碼沒有再贅述)foreach的作用是向sql傳遞陣列或List,mybatis使用foreach解析1.1需求在使用者查詢列

MyBatis框架mapper配置檔案-foreach標籤

foreach標籤下面介紹一下一個mapper配置檔案中的foreach標籤(注意,要跟著前面的總結來看,這裡使用的例子是結合前面的工程寫的,大部分程式碼沒有再贅述)foreach的作用是向sql傳遞陣列或List,mybatis使用foreach解析1.1需求在使用者查詢

MyBatis框架Mapper映射配置的使用及原理解析(二) 配置篇 SqlSessionFactoryBuilder,XMLConfigBuilder

.cn 創建 ron 子節點 homepage 解析 調用 sco title 在 <MyBatis框架中Mapper映射配置的使用及原理解析(一) 配置與使用> 的demo中看到了SessionFactory的創建過程: SqlSessionFactory

MyBatis框架Mapper對映配置的使用及原理

(Mapper用於對映SQL語句,可以說是MyBatis操作資料庫的核心特性之一,這裡我們討論java的MyBatis框架中Mapper對映配置的使用及原理解析,包括對mapper.xml配置檔案的讀取流程解讀) Mapper的內建方法 model層就是實體類,對應資料庫的表。controller層是Se

Mybatis框架Mapper文件傳值參數獲取。【Mybatis

ram keyword ddr gem cli view ati copyto one Mybatis框架中,Mapper文件參數獲取一般有以下幾種: 1、參數個數為1個(string或者int) dao層方法為以下兩種: [java] view plain

Mybatis框架Mapper檔案傳值引數獲取。【Mybatis

Mybatis框架中,Mapper檔案引數獲取一般有以下幾種: 1、引數個數為1個(string或者int) dao層方法為以下兩種: /** * 單個int型 */ public Lis

MyBatis框架mapper配置檔案-關於動態sql

動態sql 1.什麼是動態sql mybatis核心 對sql語句進行靈活操作,通過表示式進行判斷,對sql進行靈活拼接、組裝。 2.需求 使用者資訊綜合查詢列表和使用者資訊查詢列表總數這兩個statement的定義使用動態sql。 對查詢條件進行判斷,如果輸入引數不為空才

JSTL的ifforEach標籤

if 在JSP中if 的格式: <c:if test = "" var="" scope=""> test是必要的屬性,var不是必要的屬性,scope不是必要的屬性。 但是要用var屬性的時候,scope也要連著用。 test的作用是裡面寫判斷的條件,結果反

SSM:spring+springmvc+mybatis框架的XML配置文件功能詳細解釋

con initial -m and 整理 .get 尺寸 internal 頁面 SSM:spring+springmvc+mybatis框架中的XML配置文件功能詳細解釋 2016-04-14 23:40 13030人閱讀 評論(2) 收藏 舉報

第四課:通過配置文件獲取對象(Spring框架的IOCDI的底層就是基於這樣的機制)

ted const dex generate stat clas name 必須 nbsp 首先在D盤創建一個文件hero.txt,內容為:com.hero.Hero(此處必須是Hero的完整路徑) 接下來是Hero類 package com.hero; publi

mybatis框架 #$傳遞參數的區別 註意

字符串 傳遞 註意 自動 nbsp val sql value bat #{}: 1、 是預編譯 2、 編譯成占位符 3、 可以防止sql註入 4、 自動判斷數據類型 5、 一個參數時,可以使用任意參數名稱進行接收 ${}: 1、 非預編譯 2、 sq

mybatis-plus自動配置mapper.xml與java介面對映問題

本來沒有mybatis-plus的話,這個工作是通過mybatis-spring的MapperScan來完成的。 Mybatis-plus中的自動配置類MybatisPlusAutoConfiguration.class中有一個靜態內部類MapperScannerRegistrarN

SSM:spring+springmvc+mybatis框架的XML配置檔案功能詳細解釋

SSM:spring+springmvc+mybatis框架中的XML配置檔案功能詳細解釋 這幾天一直在整合SSM框架,雖然網上有很多已經整合好的,但是對於裡面的配置檔案並沒有進行過多的說明,很多人知其然不知其所以然,經過幾天的搜尋和整理,今天總算對其中的XML配置檔案有了一定的瞭解,所以拿

Mybatis框架的log4j.properties配置

使用時建立log4j.properties檔案,然後複製貼上以下內容 log4j.rootLogger=DEBUG, Console #Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log4

mybatis框架mapper的xml配置的編寫(單表)

在使用mybatis的時候,我們要用到mapper對映,也就是說,一個專案有持久層dao,業務層service,表現層contraller,現在加上一個mapper對映。在mapper中,介面要和xml配置檔名字一樣。 如: 在介面中,我們定義一些方法,這些方法在持久層dao中要用

Mybatis批量insert 返回主鍵值foreach標籤詳解

  Mybatis批量insert 返回主鍵 Mybatis從3.3.1版本開始,支援批量插入後返回主鍵ID。首先對於支援自增主鍵的資料庫使用useGenerateKeys和keyProperty,對於不支援生成自增主鍵的資料庫使用selectKey標籤。類似《MyBatis 返回insert操

spring配置mybatis自動掃描*mapper.java*mapper.xml配置檔案

預設mybatis需要在配置檔案中載入每個mapper.xml,例如: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD

Spring Boot通過Mybatis,使用mapper介面xml配置sql,連線資料庫

由於最早使用的是註解的方式來連線資料庫,所以比較簡單,後來發行做後臺的同事用的一般都是xml的形式,所以也跟著學習了下。發行mapper介面和xml配置sql,比較複雜,尤其是對我這種新手,研究了好久才配置成功。為了防止忘記,故寫下來,也給準備學習的人當參考

【SSM-MyBatis框架Mapper.xml配置檔案(mybatis的核心)

  Mapper.xml對映檔案中定義了操作資料庫的sql,每一個sql是一個statement,對映檔案是myBatis的核心。   1.輸入對映(ParameterType)     通過parameterType指定輸入引數的型別,型別可以是簡單型別,pojo,包裝型

mybatis框架mapper.xml檔案sql的使用方法:

1.<!-- 根據id查詢 --> <select id="getFileInfo" parameterType="java.lang.String" resultMap="testFileBean">select * from test_tb_info where 1=1 <i