亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

mybatis學習資料

系統 2255 0

3.1 selectKey?標簽

???????在insert語句中,在Oracle經常使用序列、在MySQL中使用函數來自動生成插入表的主鍵,而且需要方法能返回這個生成主鍵。使用myBatis的selectKey標簽可以實現這個效果。

???????下面例子,使用mysql數據庫自定義函數nextval('student'),用來生成一個key,并把他設置到傳入的實體類中的studentId屬性上。所以在執行完此方法后,邊可以通過這個實體類獲取生成的key。

?

Xml代碼?? 收藏代碼
  1. <!--?插入學生?自動主鍵--> ??
  2. < insert ? id = "createStudentAutoKey" ? parameterType = "liming.student.manager.data.model.StudentEntity" ? keyProperty = "studentId" > ??
  3. ???? < selectKey ? keyProperty = "studentId" ? resultType = "String" ? order = "BEFORE" > ??
  4. ????????select?nextval('student')??
  5. ???? </ selectKey > ??
  6. ????INSERT?INTO?STUDENT_TBL(STUDENT_ID,??
  7. ????????????????????????????STUDENT_NAME,??
  8. ????????????????????????????STUDENT_SEX,??
  9. ????????????????????????????STUDENT_BIRTHDAY,??
  10. ????????????????????????????STUDENT_PHOTO,??
  11. ????????????????????????????CLASS_ID,??
  12. ????????????????????????????PLACE_ID)??
  13. ????VALUES?(#{studentId},??
  14. ????????????#{studentName},??
  15. ????????????#{studentSex},??
  16. ????????????#{studentBirthday},??
  17. ????????????#{studentPhoto,? javaType = byte [],? jdbcType = BLOB ,? typeHandler = org .apache.ibatis.type.BlobTypeHandler},??
  18. ????????????#{classId},??
  19. ????????????#{placeId})??
  20. </ insert > ??

?調用接口方法,和獲取自動生成key

?

?

Java代碼?? 收藏代碼
  1. StudentEntity?entity?=? new ?StudentEntity();??
  2. entity.setStudentName( "黎明你好" );??
  3. entity.setStudentSex( 1 );??
  4. entity.setStudentBirthday(DateUtil.parse( "1985-05-28" ));??
  5. entity.setClassId( "20000001" );??
  6. entity.setPlaceId( "70000001" );??
  7. this .dynamicSqlMapper.createStudentAutoKey(entity);??
  8. System.out.println( "新增學生ID:?" ?+?entity.getStudentId());??

?selectKey語句屬性配置細節:

?

?

屬性 描述 取值
keyProperty selectKey?語句生成結果需要設置的屬性。 ?
resultType 生成結果類型,MyBatis?允許使用基本的數據類型,包括String?、int類型。 ?
order

1:BEFORE,會先選擇主鍵,然后設置keyProperty,再執行insert語句;

2:AFTER,就先運行insert?語句再運行selectKey?語句。

BEFORE

AFTER
statementType MyBatis?支持STATEMENT,PREPARED和CALLABLE?的語句形式,?對應Statement?,PreparedStatement?和CallableStatement?響應

STATEMENT

PREPARED

CALLABLE

?

3.2 if標簽

?

?if標簽可用在許多類型的sql語句中,我們以查詢為例。首先看一個很普通的查詢:

?

Xml代碼?? 收藏代碼
  1. <!--?查詢學生list,like姓名?--> ??
  2. < select ? id = "getStudentListLikeName" ? parameterType = "StudentEntity" ? resultMap = "studentResultMap" > ??
  3. ????SELECT?*?from?STUDENT_TBL?ST???
  4. WHERE?ST.STUDENT_NAME?LIKE?CONCAT(CONCAT('%',?#{studentName}),'%')??
  5. </ select > ??

?是此時如果studentName或studentSex為null,此語句很可能報錯或查詢結果為空。此時我們使用if動態sql語句先進行判斷,如果值為null或等于空字符串,我們就不進行此條件的判斷,增加靈活性。

?

參數為實體類StudentEntity。將實體類中所有的屬性均進行判斷,如果不為空則執行判斷條件。

?

Xml代碼?? 收藏代碼
  1. <!--?2?if(判斷參數)?-?將實體類不為空的屬性作為where條件?--> ??
  2. < select ? id = "getStudentList_if" ? resultMap = "resultMap_studentEntity" ? parameterType = "liming.student.manager.data.model.StudentEntity" > ??
  3. ????SELECT?ST.STUDENT_ID,??
  4. ???????????ST.STUDENT_NAME,??
  5. ???????????ST.STUDENT_SEX,??
  6. ???????????ST.STUDENT_BIRTHDAY,??
  7. ???????????ST.STUDENT_PHOTO,??
  8. ???????????ST.CLASS_ID,??
  9. ???????????ST.PLACE_ID??
  10. ??????FROM?STUDENT_TBL?ST???
  11. ?????WHERE??
  12. ???? < if ? test = "studentName?!=null?" > ??
  13. ????????ST.STUDENT_NAME?LIKE?CONCAT(CONCAT('%',?#{studentName,? jdbcType = VARCHAR }),'%')??
  14. ???? </ if > ??
  15. ???? < if ? test = "studentSex?!=?null?and?studentSex?!=?''?" > ??
  16. ????????AND? ST.STUDENT_SEX ?=?#{studentSex,? jdbcType = INTEGER }??
  17. ???? </ if > ??
  18. ???? < if ? test = "studentBirthday?!=?null?" > ??
  19. ????????AND? ST.STUDENT_BIRTHDAY ?=?#{studentBirthday,? jdbcType = DATE }??
  20. ???? </ if > ??
  21. ???? < if ? test = "classId?!=?null?and?classId!=?''?" > ??
  22. ????????AND? ST.CLASS_ID ?=?#{classId,? jdbcType = VARCHAR }??
  23. ???? </ if > ??
  24. ???? < if ? test = "classEntity?!=?null?and?classEntity.classId?!=null?and?classEntity.classId?!='?'?" > ??
  25. ????????AND? ST.CLASS_ID ?=?#{classEntity.classId,? jdbcType = VARCHAR }??
  26. ???? </ if > ??
  27. ???? < if ? test = "placeId?!=?null?and?placeId?!=?''?" > ??
  28. ????????AND? ST.PLACE_ID ?=?#{placeId,? jdbcType = VARCHAR }??
  29. ???? </ if > ??
  30. ???? < if ? test = "placeEntity?!=?null?and?placeEntity.placeId?!=?null?and?placeEntity.placeId?!=?''?" > ??
  31. ????????AND? ST.PLACE_ID ?=?#{placeEntity.placeId,? jdbcType = VARCHAR }??
  32. ???? </ if > ??
  33. ???? < if ? test = "studentId?!=?null?and?studentId?!=?''?" > ??
  34. ????????AND? ST.STUDENT_ID ?=?#{studentId,? jdbcType = VARCHAR }??
  35. ???? </ if > ???
  36. </ select > ??

?使用時比較靈活,?new一個這樣的實體類,我們需要限制那個條件,只需要附上相應的值就會where這個條件,相反不去賦值就可以不在where中判斷。

?

?

Java代碼?? 收藏代碼
  1. public ? void ?select_test_2_1()?{??
  2. ????StudentEntity?entity?=? new ?StudentEntity();??
  3. ????entity.setStudentName( "" );??
  4. ????entity.setStudentSex( 1 );??
  5. ????entity.setStudentBirthday(DateUtil.parse( "1985-05-28" ));??
  6. ????entity.setClassId( "20000001" );??
  7. ???? //entity.setPlaceId("70000001"); ??
  8. ????List<StudentEntity>?list?=? this .dynamicSqlMapper.getStudentList_if(entity);??
  9. ???? for ?(StudentEntity?e?:?list)?{??
  10. ????????System.out.println(e.toString());??
  11. ????}??
  12. }??

?

?

3.3 if + where?的條件判斷

???????當where中的條件使用的if標簽較多時,這樣的組合可能會導致錯誤。我們以在3.1中的查詢語句為例子,當java代碼按如下方法調用時:

?

Java代碼?? 收藏代碼
  1. @Test ??
  2. public ? void ?select_test_2_1()?{??
  3. ????StudentEntity?entity?=? new ?StudentEntity();??
  4. ????entity.setStudentName( null );??
  5. ????entity.setStudentSex( 1 );??
  6. ????List<StudentEntity>?list?=? this .dynamicSqlMapper.getStudentList_if(entity);??
  7. ???? for ?(StudentEntity?e?:?list)?{??
  8. ????????System.out.println(e.toString());??
  9. ????}??
  10. }??

?如果上面例子,參數studentName為null,將不會進行STUDENT_NAME列的判斷,則會直接導“WHERE AND”關鍵字多余的錯誤SQL。

?

這時我們可以使用where動態語句來解決。這個“where”標簽會知道如果它包含的標簽中有返回值的話,它就插入一個‘where’。此外,如果標簽返回的內容是以AND?或OR?開頭的,則它會剔除掉。

上面例子修改為:

?

Xml代碼?? 收藏代碼
  1. <!--?3?select?-?where/if(判斷參數)?-?將實體類不為空的屬性作為where條件?--> ??
  2. < select ? id = "getStudentList_whereIf" ? resultMap = "resultMap_studentEntity" ? parameterType = "liming.student.manager.data.model.StudentEntity" > ??
  3. ????SELECT?ST.STUDENT_ID,??
  4. ???????????ST.STUDENT_NAME,??
  5. ???????????ST.STUDENT_SEX,??
  6. ???????????ST.STUDENT_BIRTHDAY,??
  7. ???????????ST.STUDENT_PHOTO,??
  8. ???????????ST.CLASS_ID,??
  9. ???????????ST.PLACE_ID??
  10. ??????FROM?STUDENT_TBL?ST???
  11. ???? < where > ??
  12. ???????? < if ? test = "studentName?!=null?" > ??
  13. ????????????ST.STUDENT_NAME?LIKE?CONCAT(CONCAT('%',?#{studentName,? jdbcType = VARCHAR }),'%')??
  14. ???????? </ if > ??
  15. ???????? < if ? test = "studentSex?!=?null?and?studentSex?!=?''?" > ??
  16. ????????????AND? ST.STUDENT_SEX ?=?#{studentSex,? jdbcType = INTEGER }??
  17. ???????? </ if > ??
  18. ???????? < if ? test = "studentBirthday?!=?null?" > ??
  19. ????????????AND? ST.STUDENT_BIRTHDAY ?=?#{studentBirthday,? jdbcType = DATE }??
  20. ???????? </ if > ??
  21. ???????? < if ? test = "classId?!=?null?and?classId!=?''?" > ??
  22. ????????????AND? ST.CLASS_ID ?=?#{classId,? jdbcType = VARCHAR }??
  23. ???????? </ if > ??
  24. ???????? < if ? test = "classEntity?!=?null?and?classEntity.classId?!=null?and?classEntity.classId?!='?'?" > ??
  25. ????????????AND? ST.CLASS_ID ?=?#{classEntity.classId,? jdbcType = VARCHAR }??
  26. ???????? </ if > ??
  27. ???????? < if ? test = "placeId?!=?null?and?placeId?!=?''?" > ??
  28. ????????????AND? ST.PLACE_ID ?=?#{placeId,? jdbcType = VARCHAR }??
  29. ???????? </ if > ??
  30. ???????? < if ? test = "placeEntity?!=?null?and?placeEntity.placeId?!=?null?and?placeEntity.placeId?!=?''?" > ??
  31. ????????????AND? ST.PLACE_ID ?=?#{placeEntity.placeId,? jdbcType = VARCHAR }??
  32. ???????? </ if > ??
  33. ???????? < if ? test = "studentId?!=?null?and?studentId?!=?''?" > ??
  34. ????????????AND? ST.STUDENT_ID ?=?#{studentId,? jdbcType = VARCHAR }??
  35. ???????? </ if > ??
  36. ???? </ where > ????
  37. </ select > ??

?

?

3.4 if + set?的更新語句

當update語句中沒有使用if標簽時,如果有一個參數為null,都會導致錯誤。

當在update語句中使用if標簽時,如果前面的if沒有執行,則或導致逗號多余錯誤。使用set標簽可以將動態的配置SET?關鍵字,和剔除追加到條件末尾的任何不相關的逗號。

?

???????使用if+set標簽修改后,如果某項為null則不進行更新,而是保持數據庫原值。如下示例:

?

Xml代碼?? 收藏代碼
  1. <!--?4?if/set(判斷參數)?-?將實體類不為空的屬性更新?--> ??
  2. < update ? id = "updateStudent_if_set" ? parameterType = "liming.student.manager.data.model.StudentEntity" > ??
  3. ????UPDATE?STUDENT_TBL??
  4. ???? < set > ??
  5. ???????? < if ? test = "studentName?!=?null?and?studentName?!=?''?" > ??
  6. ???????????? STUDENT_TBL.STUDENT_NAME ?=?#{studentName},??
  7. ???????? </ if > ??
  8. ???????? < if ? test = "studentSex?!=?null?and?studentSex?!=?''?" > ??
  9. ???????????? STUDENT_TBL.STUDENT_SEX ?=?#{studentSex},??
  10. ???????? </ if > ??
  11. ???????? < if ? test = "studentBirthday?!=?null?" > ??
  12. ???????????? STUDENT_TBL.STUDENT_BIRTHDAY ?=?#{studentBirthday},??
  13. ???????? </ if > ??
  14. ???????? < if ? test = "studentPhoto?!=?null?" > ??
  15. ???????????? STUDENT_TBL.STUDENT_PHOTO ?=?#{studentPhoto,? javaType = byte [],? jdbcType = BLOB ,? typeHandler = org .apache.ibatis.type.BlobTypeHandler},??
  16. ???????? </ if > ??
  17. ???????? < if ? test = "classId?!=?''?" > ??
  18. ???????????? STUDENT_TBL.CLASS_ID ?=?#{classId}??
  19. ???????? </ if > ??
  20. ???????? < if ? test = "placeId?!=?''?" > ??
  21. ???????????? STUDENT_TBL.PLACE_ID ?=?#{placeId}??
  22. ???????? </ if > ??
  23. ???? </ set > ??
  24. ????WHERE? STUDENT_TBL.STUDENT_ID ?=?#{studentId};??????
  25. </ update > ??

?

?

3.5 if + trim代替where/set標簽

???????trim是更靈活的去處多余關鍵字的標簽,他可以實踐where和set的效果。

?

3.5.1 trim代替where

?

? ??

Xml代碼?? 收藏代碼
  1. <!--?5.1?if/trim代替where(判斷參數)?-?將實體類不為空的屬性作為where條件?--> ??
  2. < select ? id = "getStudentList_if_trim" ? resultMap = "resultMap_studentEntity" > ??
  3. ????SELECT?ST.STUDENT_ID,??
  4. ???????????ST.STUDENT_NAME,??
  5. ???????????ST.STUDENT_SEX,??
  6. ???????????ST.STUDENT_BIRTHDAY,??
  7. ???????????ST.STUDENT_PHOTO,??
  8. ???????????ST.CLASS_ID,??
  9. ???????????ST.PLACE_ID??
  10. ??????FROM?STUDENT_TBL?ST???
  11. ???? < trim ? prefix = "WHERE" ? prefixOverrides = "AND|OR" > ??
  12. ???????? < if ? test = "studentName?!=null?" > ??
  13. ????????????ST.STUDENT_NAME?LIKE?CONCAT(CONCAT('%',?#{studentName,? jdbcType = VARCHAR }),'%')??
  14. ???????? </ if > ??
  15. ???????? < if ? test = "studentSex?!=?null?and?studentSex?!=?''?" > ??
  16. ????????????AND? ST.STUDENT_SEX ?=?#{studentSex,? jdbcType = INTEGER }??
  17. ???????? </ if > ??
  18. ???????? < if ? test = "studentBirthday?!=?null?" > ??
  19. ????????????AND? ST.STUDENT_BIRTHDAY ?=?#{studentBirthday,? jdbcType = DATE }??
  20. ???????? </ if > ??
  21. ???????? < if ? test = "classId?!=?null?and?classId!=?''?" > ??
  22. ????????????AND? ST.CLASS_ID ?=?#{classId,? jdbcType = VARCHAR }??
  23. ???????? </ if > ??
  24. ???????? < if ? test = "classEntity?!=?null?and?classEntity.classId?!=null?and?classEntity.classId?!='?'?" > ??
  25. ????????????AND? ST.CLASS_ID ?=?#{classEntity.classId,? jdbcType = VARCHAR }??
  26. ???????? </ if > ??
  27. ???????? < if ? test = "placeId?!=?null?and?placeId?!=?''?" > ??
  28. ????????????AND? ST.PLACE_ID ?=?#{placeId,? jdbcType = VARCHAR }??
  29. ???????? </ if > ??
  30. ???????? < if ? test = "placeEntity?!=?null?and?placeEntity.placeId?!=?null?and?placeEntity.placeId?!=?''?" > ??
  31. ????????????AND? ST.PLACE_ID ?=?#{placeEntity.placeId,? jdbcType = VARCHAR }??
  32. ???????? </ if > ??
  33. ???????? < if ? test = "studentId?!=?null?and?studentId?!=?''?" > ??
  34. ????????????AND? ST.STUDENT_ID ?=?#{studentId,? jdbcType = VARCHAR }??
  35. ???????? </ if > ??
  36. ???? </ trim > ?????
  37. </ select > ??

?

?

3.5.2 trim代替set

??

Xml代碼?? 收藏代碼
  1. <!--?5.2?if/trim代替set(判斷參數)?-?將實體類不為空的屬性更新?--> ??
  2. < update ? id = "updateStudent_if_trim" ? parameterType = "liming.student.manager.data.model.StudentEntity" > ??
  3. ????UPDATE?STUDENT_TBL??
  4. ???? < trim ? prefix = "SET" ? suffixOverrides = "," > ??
  5. ???????? < if ? test = "studentName?!=?null?and?studentName?!=?''?" > ??
  6. ???????????? STUDENT_TBL.STUDENT_NAME ?=?#{studentName},??
  7. ???????? </ if > ??
  8. ???????? < if ? test = "studentSex?!=?null?and?studentSex?!=?''?" > ??
  9. ???????????? STUDENT_TBL.STUDENT_SEX ?=?#{studentSex},??
  10. ???????? </ if > ??
  11. ???????? < if ? test = "studentBirthday?!=?null?" > ??
  12. ???????????? STUDENT_TBL.STUDENT_BIRTHDAY ?=?#{studentBirthday},??
  13. ???????? </ if > ??
  14. ???????? < if ? test = "studentPhoto?!=?null?" > ??
  15. ???????????? STUDENT_TBL.STUDENT_PHOTO ?=?#{studentPhoto,? javaType = byte [],? jdbcType = BLOB ,? typeHandler = org .apache.ibatis.type.BlobTypeHandler},??
  16. ???????? </ if > ??
  17. ???????? < if ? test = "classId?!=?''?" > ??
  18. ???????????? STUDENT_TBL.CLASS_ID ?=?#{classId},??
  19. ???????? </ if > ??
  20. ???????? < if ? test = "placeId?!=?''?" > ??
  21. ???????????? STUDENT_TBL.PLACE_ID ?=?#{placeId}??
  22. ???????? </ if > ??
  23. ???? </ trim > ??
  24. ????WHERE? STUDENT_TBL.STUDENT_ID ?=?#{studentId}??
  25. </ update > ??

?

?

3.6 choose (when, otherwise)

?

? ? 有時候我們并不想應用所有的條件,而只是想從多個選項中選擇一個。而使用if標簽時,只要test中的表達式為true,就會執行if標簽中的條件。MyBatis提供了choose 元素。if標簽是與(and)的關系,而choose比傲天是或(or)的關系。

? ? choose標簽是按順序判斷其內部when標簽中的test條件出否成立,如果有一個成立,則choose結束。當choose中所有when的條件都不滿則時,則執行otherwise中的sql。類似于Java 的switch 語句,choose為switch,when為case,otherwise則為default。

? ? 例如下面例子,同樣把所有可以限制的條件都寫上,方面使用。choose會從上到下選擇一個when標簽的test為true的sql執行。安全考慮,我們使用where將choose包起來,放置關鍵字多于錯誤。

?

?

Xml代碼?? 收藏代碼
  1. <!--?6?choose(判斷參數)?-?按順序將實體類第一個不為空的屬性作為where條件?--> ??
  2. < select ? id = "getStudentList_choose" ? resultMap = "resultMap_studentEntity" ? parameterType = "liming.student.manager.data.model.StudentEntity" > ??
  3. ????SELECT?ST.STUDENT_ID,??
  4. ???????????ST.STUDENT_NAME,??
  5. ???????????ST.STUDENT_SEX,??
  6. ???????????ST.STUDENT_BIRTHDAY,??
  7. ???????????ST.STUDENT_PHOTO,??
  8. ???????????ST.CLASS_ID,??
  9. ???????????ST.PLACE_ID??
  10. ??????FROM?STUDENT_TBL?ST???
  11. ???? < where > ??
  12. ???????? < choose > ??
  13. ???????????? < when ? test = "studentName?!=null?" > ??
  14. ????????????????ST.STUDENT_NAME?LIKE?CONCAT(CONCAT('%',?#{studentName,? jdbcType = VARCHAR }),'%')??
  15. ???????????? </ when ? > ??
  16. ???????????? < when ? test = "studentSex?!=?null?and?studentSex?!=?''?" > ??
  17. ????????????????AND? ST.STUDENT_SEX ?=?#{studentSex,? jdbcType = INTEGER }??
  18. ???????????? </ when ? > ??
  19. ???????????? < when ? test = "studentBirthday?!=?null?" > ??
  20. ????????????????AND? ST.STUDENT_BIRTHDAY ?=?#{studentBirthday,? jdbcType = DATE }??
  21. ???????????? </ when ? > ??
  22. ???????????? < when ? test = "classId?!=?null?and?classId!=?''?" > ??
  23. ????????????????AND? ST.CLASS_ID ?=?#{classId,? jdbcType = VARCHAR }??
  24. ???????????? </ when ? > ??
  25. ???????????? < when ? test = "classEntity?!=?null?and?classEntity.classId?!=null?and?classEntity.classId?!='?'?" > ??
  26. ????????????????AND? ST.CLASS_ID ?=?#{classEntity.classId,? jdbcType = VARCHAR }??
  27. ???????????? </ when ? > ??
  28. ???????????? < when ? test = "placeId?!=?null?and?placeId?!=?''?" > ??
  29. ????????????????AND? ST.PLACE_ID ?=?#{placeId,? jdbcType = VARCHAR }??
  30. ???????????? </ when ? > ??
  31. ???????????? < when ? test = "placeEntity?!=?null?and?placeEntity.placeId?!=?null?and?placeEntity.placeId?!=?''?" > ??
  32. ????????????????AND? ST.PLACE_ID ?=?#{placeEntity.placeId,? jdbcType = VARCHAR }??
  33. ???????????? </ when ? > ??
  34. ???????????? < when ? test = "studentId?!=?null?and?studentId?!=?''?" > ??
  35. ????????????????AND? ST.STUDENT_ID ?=?#{studentId,? jdbcType = VARCHAR }??
  36. ???????????? </ when ? > ??
  37. ???????????? < otherwise > ??
  38. ???????????? </ otherwise > ??
  39. ???????? </ choose > ??
  40. ???? </ where > ????
  41. </ select > ??

?

?

3.7 foreach

對于動態SQL?非常必須的,主是要迭代一個集合,通常是用于IN?條件。List?實例將使用“list”做為鍵,數組實例以“array”?做為鍵。

foreach元素是非常強大的,它允許你指定一個集合,聲明集合項和索引變量,它們可以用在元素體內。它也允許你指定開放和關閉的字符串,在迭代之間放置分隔符。這個元素是很智能的,它不會偶然地附加多余的分隔符。

注意:你可以傳遞一個List實例或者數組作為參數對象傳給MyBatis。當你這么做的時候,MyBatis會自動將它包裝在一個Map中,用名稱在作為鍵。List實例將會以“list”作為鍵,而數組實例將會以“array”作為鍵。

這個部分是對關于XML配置文件和XML映射文件的而討論的。下一部分將詳細討論Java API,所以你可以得到你已經創建的最有效的映射。

?

?

3.7.1參數為array示例的寫法

?

接口的方法聲明:

?

Java代碼?? 收藏代碼
  1. public ?List<StudentEntity>?getStudentListByClassIds_foreach_array(String[]?classIds);??

?動態SQL語句:

?

?

Xml代碼?? 收藏代碼
  1. <!—?7.1?foreach(循環array參數)?-?作為where中in的條件?-- > ??
  2. < select ? id = "getStudentListByClassIds_foreach_array" ? resultMap = "resultMap_studentEntity" > ??
  3. ????SELECT?ST.STUDENT_ID,??
  4. ???????????ST.STUDENT_NAME,??
  5. ???????????ST.STUDENT_SEX,??
  6. ???????????ST.STUDENT_BIRTHDAY,??
  7. ???????????ST.STUDENT_PHOTO,??
  8. ???????????ST.CLASS_ID,??
  9. ???????????ST.PLACE_ID??
  10. ??????FROM?STUDENT_TBL?ST??
  11. ??????WHERE?ST.CLASS_ID?IN???
  12. ????? < foreach ? collection = "array" ? item = "classIds" ?? open = "(" ? separator = "," ? close = ")" > ??
  13. ????????#{classIds}??
  14. ????? </ foreach > ??
  15. </ select > ??

?測試代碼,查詢學生中,在20000001、20000002這兩個班級的學生:

?

?

Java代碼?? 收藏代碼
  1. @Test ??
  2. public ? void ?test7_foreach()?{??
  3. ????String[]?classIds?=?{? "20000001" ,? "20000002" ?};??
  4. ????List<StudentEntity>?list?=? this .dynamicSqlMapper.getStudentListByClassIds_foreach_array(classIds);??
  5. ???? for ?(StudentEntity?e?:?list)?{??
  6. ????????System.out.println(e.toString());??
  7. ????}??
  8. }??

?

?

3.7.2參數為list示例的寫法

接口的方法聲明:

Java代碼?? 收藏代碼
  1. public ?List<StudentEntity>?getStudentListByClassIds_foreach_list(List<String>?classIdList);??

? 動態 SQL 語句:

Xml代碼?? 收藏代碼
  1. <!--?7.2?foreach(循環List<String>參數)?-?作為where中in的條件?--> ??
  2. < select ? id = "getStudentListByClassIds_foreach_list" ? resultMap = "resultMap_studentEntity" > ??
  3. ????SELECT?ST.STUDENT_ID,??
  4. ???????????ST.STUDENT_NAME,??
  5. ???????????ST.STUDENT_SEX,??
  6. ???????????ST.STUDENT_BIRTHDAY,??
  7. ???????????ST.STUDENT_PHOTO,??
  8. ???????????ST.CLASS_ID,??
  9. ???????????ST.PLACE_ID??
  10. ??????FROM?STUDENT_TBL?ST??
  11. ??????WHERE?ST.CLASS_ID?IN???
  12. ????? < foreach ? collection = "list" ? item = "classIdList" ?? open = "(" ? separator = "," ? close = ")" > ??
  13. ????????#{classIdList}??
  14. ????? </ foreach > ??
  15. </ select > ??

? 測試代碼,查詢學生中,在 20000001 20000002 這兩個班級的學生:

Java代碼?? 收藏代碼
  1. @Test ??
  2. public ? void ?test7_2_foreach()?{??
  3. ????ArrayList<String>?classIdList?=? new ?ArrayList<String>();??
  4. ????classIdList.add( "20000001" );??
  5. ????classIdList.add( "20000002" );??
  6. ????List<StudentEntity>?list?=? this .dynamicSqlMapper.getStudentListByClassIds_foreach_list(classIdList);??
  7. ???? for ?(StudentEntity?e?:?list)?{??
  8. ????????System.out.println(e.toString());??
  9. ????}??
  10. }??

?

mybatis學習資料


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久久这里只有精品加勒比 | 四虎精品永久在线网址 | 一级特级女人18毛片免费视频 | 成人免费视频在线观看 | 播五月 | 韩国日本三级在线观看 | 精品综合一区二区三区 | 亚洲乱码国产乱码精品精98 | 久久香蕉国产线看观看精品yw | 免费观看国产一区二区三区 | 亚洲十欧美十日韩十国产 | 四虎视频国产精品免费入口 | 色综合久久最新中文字幕 | 成人特级毛片69免费观看 | 久久香蕉国产线看观看精品蕉 | 99热这里只有精品国产在热久久 | 国产亚洲综合精品一区二区三区 | 精品欧美成人bd高清在线观看 | 国产成人免费全部网站 | 久久精品人人做人人看最新章 | 永久免费的啪啪免费的网址 | 成人黄性视频 | 国产片91人成在线观看 | 国产成人禁片免费观看视频 | 日韩国产欧美一区二区三区在线 | 色网站在线观看 | 2021国产成人综合亚洲精品 | 久久天堂成人影院 | 奇米影视第 | 国产成人免费观看在线视频 | 香蕉久久夜色精品国产2020 | 久久久高清国产999尤物 | 天天做天天爱天天爽天天综合 | 在线观看精品国产 | 国产精品午夜性视频 | 日本不卡免费一区 | 在线看片亚洲 | 亚洲高清色| 国产成人精品自拍 | 99久久久精品 | 久久精品国产免费 |