MyBatis映射文件3(參數處理Map)


參數命名

POJO

    如果多個參數,正好是業務邏輯的數據模型,那么我們就可以直接傳入POJO,這樣#{}中就可以直接使用屬性名

Map

如果多個參數不是業務邏輯的數據模型,沒有對應的POJO,為了方便,我們可以傳入一個map,此時#{key}就是取出map的值

在接口中創建一個新方法:

Employee getEmpByMap(Map<String,Object> map); 

創建新的<select>標簽

  1. <select id="getEmpByMap" resultType="com.figsprite.bean.Employee">  
  2.     select id,last_name lastName,gender,email from tb_employee where id = #{id} and last_name = #{lastName}  
  3. </select>  

然后我們再做測試

  1. @Test  
  2. public void test7() throws IOException {  
  3.     SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();  
  4.     SqlSession openSession = sqlSessionFactory.openSession();  
  5.     try {  
  6.         EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);  
  7.         Map<String,Object> map = new HashMap<>();  
  8.         map.put("id",3);  
  9.         map.put("lastName","Hello");  
  10.         Employee e = mapper.getEmpByMap(map);  
  11.         System.out.println(e);  
  12.     }finally {  
  13.         openSession.close();  
  14.     }  
  15. }  

TO

如果getEmpByMap方法調用頻率很高,每次調用都需要重新創建一個map,這樣的話,還是一件麻煩事,如果是這種情況,建議編寫一個TO(Transfer Object),比如我們在查找分頁記錄時,需要多項內容:

Page{
int index;
int size;
}

思考題:

public Employee getEmp(@Param("id") Integet id,String lastName)

    取值:idè#{id/param1} lastNameè#{param2}

public Employee getEmp(Integer id,@Param("e") Employee emp)

    取值:idè#{param1} lastNameè#{param2.lastName/e.lastName}

public Employee getEmpById(List<Integer> ids)

    如果是Collection類型或者是數組,也會特殊處理,封裝在map,如果是Collection,那么key是Collection[i],如果是List,那么我們還可以使用list[i],至於數組,array[i]

取值:取第一個id值 idè#{list[0]}


免責聲明!

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



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