1. 程式人生 > 其它 >Mybatis的引數深入

Mybatis的引數深入

技術標籤:Mybatismybatis

目錄

parameterType 配置引數

使用說明

使用SQL 語句傳參,使用標籤的 parameterType 屬性來設定。該屬性的取值可以
是基本型別,引用型別(例如:String 型別),還可以是實體類型別(POJO 類)。同時也可以使用實體類的包裝類,本章節將介紹如何使用實體類的包裝類作為引數傳遞。

注意事項

基 本 類 型 和 String 我 們 可 以 直 接 寫 類 型 名 稱 , 也 可 以 使 用 包 名 . 類 名 的 方 式 ,例 如 :java.lang.String。實體類型別,目前我們只能使用全限定類名。

究其原因,是 mybaits 在載入時已經把常用的資料型別註冊了別名,從而我們在使用時可以不寫包名,而我們的是實體類並沒有註冊別名,所以必須寫全限定類名。在今天課程的最後一個章節中將講解如何註冊實體類的別名。

傳遞 pojo 包裝物件(使用QueryVo作為查詢條件)

開發中通過 pojo 傳遞查詢條件 ,查詢條件是綜合的查詢條件,不僅包括使用者查詢條件還包括其它的查詢條件(比如將使用者購買商品資訊也作為查詢條件),這時可以使用包裝物件傳遞輸入引數。
Pojo 類中包含 pojo。
需求:根據使用者名稱查詢使用者資訊,查詢條件放到 QueryVo 的 user 屬性中。

編寫 QueryVo

QueryVo

package com.keafmd.domain;

/**
 * Keafmd
 *
 * @ClassName: QueryVo
 * @Description:
 * @author: 牛哄哄的柯南
 * @date: 2021-02-08 21:08
 */
public class QueryVo {
    private  User user;

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
} }

編寫持久層介面

IUserDao:

package com.keafmd.dao;

import com.keafmd.domain.QueryVo;
import com.keafmd.domain.User;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * Keafmd
 *
 * @ClassName: IUserDao
 * @Description: 使用者的持久層介面
 * @author: 牛哄哄的柯南
 * @date: 2021-02-06 19:29
 */

public interface IUserDao {
  
    /**
     * 根據QueryVo中的條件查詢使用者
     * @param vo
     * @return
     */
    List<User> findUserByVo(QueryVo vo);

}

持久層介面的對映檔案

IUserDao.xml:

<?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.keafmd.dao.IUserDao">

    <!--根據QueryVo的條件查詢使用者-->
    <select id="findUserByVo" parameterType="com.keafmd.domain.QueryVo" resultType="com.keafmd.domain.User">
        select * from user where username like #{user.username}
    </select>

</mapper>

測試包裝類作為引數

MybatisTest:

package com.keafmd.test;

import com.keafmd.dao.IUserDao;
import com.keafmd.domain.QueryVo;
import com.keafmd.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;

/**
 * Keafmd
 *
 * @ClassName: MybatisTest
 * @Description: 測試類,測試crud操作
 * @author: 牛哄哄的柯南
 * @date: 2021-02-08 15:24
 */
public class MybatisTest {

    private InputStream in;
    private SqlSession sqlsession;
    private IUserDao userDao;

    @Before // 用於在測試方法執行前執行
    public void init()throws Exception{
        //1.讀取配置檔案,生成位元組輸入流
        in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.建立SqlSessionFactory工廠
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
        //3.使用工廠生產SqlSession物件
        sqlsession = factory.openSession();
        //4.使用SqlSession建立Dao介面的代理物件
        userDao = sqlsession.getMapper(IUserDao.class);
    }

    @After // 用於在測試方法執行後執行
    public void destory() throws Exception{
        //提交事務
        sqlsession.commit();
        //6.釋放資源
        sqlsession.close();
        in.close();
    }

    /**
     * 測試使用QueryVo作為查詢條件
     * @throws Exception
     */
    @Test
    public void testFindUserByVo() throws Exception {
        QueryVo vo = new QueryVo();
        User user = new User();
        user.setUsername("%王%");
        vo.setUser(user);
        //5.執行使用QueryVo作為查詢條件
        List<User> users = userDao.findUserByVo(vo);
        for (User u : users) {
            System.out.println(u);
        }
    }

}

輸出結果:
在這裡插入圖片描述

以上就是Mybatis的引數深入的全部內容。

看完如果對你有幫助,感謝點贊支援!
如果你是電腦端的話,看到右下角的 “一鍵三連” 了嗎,沒錯點它[哈哈]

在這裡插入圖片描述

加油!

共同努力!

Keafmd