Mybatis的引數深入
阿新 • • 發佈:2021-02-09
目錄
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