使用Mybatis實現條件查詢


1、SQL映射文件,頂級元素配置
  mapper:映射文件的根元素節點,只有一個namespace(命名接口),用於區分不同mapper,全局唯一。綁定dao接口,即面向接口編程,當namespace綁定某一接口之后,可以不用寫該接口的實現類。
  cache:配置給定命名空間的緩存
  cache-ref:從其他命名空間引用緩存配置。
  resultMap:用來描述數據庫結果集和對象的對應關系
  sql:可以重用的SQL塊,也可以被其他語句引用
  insert:映射插入語句
  update:映射更新語句
  delete:映射刪除語句
  select:映射查詢語句
  關於MyBatis的SQL映射文件中的mapper元素的namespace屬性有以下要求:
  • namespace的命名必須跟某個DAO接口同名,同屬於DAO層,映射文件與DAO接口應防放置在同一package下,並且習慣都是以Mapper結尾。
  • 在不同的mapper文件中,子元素的id可以相同,MyBatis通過namespace和子元素的id聯合區分,接口中的方法與映射文件中SQL語句id應一一對應

2、使用select完成單條件查詢

  <select id="getUserListByUserName" resultType="User" paramterType="string">

    select * from  user where userName like CONCAT ('%',#{userName},'%')

  </select>

  select元素屬性
  id:命名空間中的唯一標識符,可以被用來引用這條語句
  parameterType:表示查詢語句傳入參數的類型的完全限定名或別名,它支持基礎數據類型和復雜數據類型。在上面的例子中使用的是基礎數據類
          型“string”,這是一個別名,代表String,屬於一個內建的類 型別名。
  resultType:查詢語句返回結果類型的完全限定名或別名。別名的使用方式與parameterType是一樣的。
                            
別名與Java類型映射
  別名   映射類型   別名    映射類型

string

String double Double
byte Byte float Float
long Long boolean Boolean
short Short date Date
int Integer map Map
integer Integer hashmap HashMap
arraylist ArrayList list List

 

 

 

 

 

 

 

 

 

 

3、MyBaits多條件查詢:
  3.1、parameterType傳參類型可以為任何類型,該屬性可以不寫。當傳入一個參數為基本數據類型時,可以通過#{}來獲取傳入的值,也可以通過#{下標}來
    獲取,也可使用${value}獲取。當傳入 為多個基本數據類型時只能用#{下標}獲取,下標從0開始。
  例:  
  接口:
    public List<User> getUserListByParam(String username,Integer roleId);
  Mapper映射文件:
    <select id="getUserListByParam" resultType="User" >
      select * from smbms_user where username like CONCAT('%',#{0},'%') and userRole=#{1}
    </select>
  3.2、使用實體類,將參數封裝成對象傳入。#{}中的參數名需要與對象的屬性名一致。
  接口:
    public List<User> getUserListByUser(User user);
  Mapper映射文件:
    <select id="getUserListByUser" resultType="User" parameterType="User">
      select * from smbms_user where username like CONCAT('%',#{userName},'%') and userRole=#{userRole}
    </select>
  3.3、使用Map集合,將參數存入Map集合進行傳遞。#{}中參數名需要與Map集合中的鍵名一致
  接口:
    public List<User> getUserListByUserMap(Map<String, String> map);
  Mapper映射文件:
    <select id="getUserListByUserMap" resultType="User" 
parameterType="map">
      select * from smbms_user where username like CONCAT('%',#{userName},'%') and userRole=#{userRole}
    </select>
  3.4、使用@Param注解傳遞多個參數。使用@Param注解封裝的參數小括號中參數名需要與#{}中參數名一致。
  接口:
    public List<User> getUserListByParam(@Param("userName")String username,@Param("userRole")Integer roleId);
  Mapper映射文件:
    <select id="getUserListByParam" resultType="User" >
      select * from smbms_user where username like CONCAT('%',#{userName},'%') and userRole=#{userRole}
    </select>
 
4、${}和#{}獲取參數的區別
  4.1、#{}會將參數轉化成String類型進行處理(特殊字符會進行轉義),${}不會。
  4.2、使用#{}會進行預處理,也就是表示使用PreparedStatement進行執行SQL語句,可以有效的防止sql注入,但是${}不會。
  4.3、一般在進行排序order by的時候使用${},${value}(只有單個參數時使用${value}可以獲取到參數值,多個參數依然使用對象屬性或Map集合的鍵名)
  4.4、在能使用#{}的時候就不要去用${}。

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM