【MyBatis】Mybatis 的parameterType 配置參數以及傳遞pojo包裝對象進行查詢

【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);
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章