【MyBatis】Mybatis 的parameterType 配置參數以及傳遞pojo包裝對象進行查詢
parameterType 配置參數
在實現CRUD操作時,基本類型和String我們可以直接寫類型名稱, 也可以使用包名.類名的方式 , 例 如:java.lang.String。
實體類類型,目前我們只能使用全限定類名。
究其原因,是 mybaits 在加載時已經把常用的數據類型註冊了別名,從而我們在使用時可以不寫包名,而我們的是實體類並沒有註冊別名,所以必須寫全限定類名。
在 mybatis 的官方文檔的說明
這些都是支持的默認別名。我們也可以從源碼角度來看它們分別都是如何定義出來的。
可以參考 TypeAliasRegistery.class 的源碼。
傳遞 pojo 包裝對象
開發中通過 pojo 傳遞查詢條件 ,查詢條件是綜合的查詢條件,不僅包括用戶查詢條件還包括其它的查詢條件(比如將用戶購買商品信息也作爲查詢條件),這時可以使用包裝對象傳遞輸入參數。
Pojo 類中包含 pojo。
需求:根據用戶名查詢用戶信息,查詢條件放到 QueryVo 的 user 屬性中。
- QueryVo
package com.siyi.domain;
public class QueryVo {
public User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
- 持久層接口
package com.siyi.dao;
import com.siyi.domain.QueryVo;
import com.siyi.domain.User;
import java.util.List;
/**
* 用戶持久層接口
*/
public interface IUSerDao {
/**
* 根據queryVo中的條件查詢用戶
* @param vo
* @return
*/
public List<User> findUserByVo(QueryVo vo);
}
- 持久層接口的映射文件
<?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.siyi.dao.IUSerDao">
<!-- 根據queryVo的條件查詢用戶 -->
<select id="findUserByVo" parameterType="com.siyi.domain.QueryVo" resultType="com.siyi.domain.User">
select * from user where username like #{user.username}
</select>
</mapper>
- 測試方法
@Test
public void testFindByVo(){
QueryVo vo = new QueryVo();
User user = new User();
user.setUsername("%yi%");
vo.setUser(user);
List<User> users = iuSerDao.findUserByVo(vo);
for (User u : users){
System.out.println(u);
}
}