MyBatis詳細(xì)講解DAO代理的使用
DAO代理實(shí)現(xiàn)數(shù)據(jù)庫操作
1、去掉Dao接口實(shí)現(xiàn)類

2、getMapper獲取代理對(duì)象
只需調(diào)用 SqlSession 的 getMapper()方法,即可獲取指定接口的實(shí)現(xiàn)類對(duì) 象。該方法的參數(shù)為指定 Dao 接口類的 class 值。
SqlSession session = factory.openSession(); StudentDao dao = session.getMapper(StudentDao.class);
使用工具類
StudentDao studentDao = MyBatisUtil.getSqlSession().getMapper(StudentDao.class);
getMapper()創(chuàng)建的對(duì)象,是代替我們自己創(chuàng)建的 StudentDaoImpl 類
3、使用 Dao 代理對(duì)象方法執(zhí)行 sql 語句
select方法進(jìn)行查詢
@Test
public void testSelect() throws IOException {
final List<Student> studentList = studentDao.selectStudents();
studentList.forEach( stu -> System.out.println(stu));
}
insert方法進(jìn)行插入
@Test
public void testInsert() throws IOException {
Student student = new Student();
student.setId(1006);
student.setName("林浩");
student.setEmail("linhao@163.com");
student.setAge(26);
int nums = studentDao.insertStudent(student);
System.out.println("使用 Dao 添加數(shù)據(jù):"+nums);
}
4、深入理解參數(shù)
從 java 代碼中把參數(shù)傳遞到 mapper.xml 文件。
parameterType
parameterType: 接口中方法參數(shù)的類型, 類型的完全限定名或別名。這個(gè)屬 性是可選的,因?yàn)?MyBatis 可以推斷出具體傳入語句的參數(shù),默認(rèn)值為未設(shè)置 (unset)。接口中方法的參數(shù)從 java 代碼傳入到 mapper 文件的 sql 語句。
- int 或 java.lang.Integer
- hashmap 或 java.util.HashMap
- list 或 java.util.ArrayList
- student 或 com.bjpowernode.domain.Student
<select>,<insert>,<update>,<delete>都可以使用 parameterType 指定類型。
eg:
<delete id="deleteStudent" parameterType="int">
delete from student where id=#{studentId}
</delete>
等同于
<delete id="deleteStudent" parameterType="java.lang.Integer">
delete from student where id=#{studentId}
</delete>
一個(gè)簡單參數(shù)
Dao 接口中方法的參數(shù)只有一個(gè)簡單類型(java 基本類型和 String),占位符 #{ 任意字符 },和方法的參數(shù)名無關(guān)。
接口方法
Student selectById(int id);
mapper文件
<select id="selectById" resultType="com.bjpowernode.domain.Student">
select id,name,email,age from student where id=#{studentId}
</select>
#{studentId} , studentId 是自定義的變量名稱,和方法參數(shù)名無關(guān)。
測試方法
@Test
public void testSelectById(){
//一個(gè)參數(shù)
Student student = studentDao.selectById(1005);
System.out.println("查詢 id 是 1005 的學(xué)生:"+student);
}
使用@Param
當(dāng) Dao 接口方法多個(gè)參數(shù),需要通過名稱使用參數(shù)。 在方法形參前面加 入@Param(“自定義參數(shù)名”),mapper 文件使用#{自定義參數(shù)名}。
例如定義 List<Student> selectStudent( @Param(“personName”)?
String name ) { … }?
mapper 文件 select * from student where name =?
#{ personName}
接口方法
List<Student> selectMultiParam(@Param("personName") String name,
@Param("personAge") int age);
Mapper文件
<select id="selectMultiParam" resultType="com.bjpowernode.domain.Student">
select id,name,email,age from student where name=#{personName} or age
=#{personAge}
</select>
測試方法
@Test
public void testSelectMultiParam(){
List<Student> stuList = studentDao.selectMultiParam("李力",20);
stuList.forEach( stu -> System.out.println(stu));
}
使用對(duì)象
使用 java 對(duì)象傳遞參數(shù), java 的屬性值就是 sql 需要的參數(shù)值。 每一個(gè)屬性就是一個(gè)參數(shù)。
語法格式: #{ property,javaType=java 中數(shù)據(jù)類型名
jdbcType=數(shù)據(jù)類型名稱 } javaType, jdbcType 的類型 MyBatis 可以檢測出來,一般不需要設(shè)置。常用格式 #{ property }

?創(chuàng)建保存參數(shù)值的對(duì)象 QueryParam
package com.bjpowernode.vo;
public class QueryParam {
private String queryName;
private int queryAge;
//set ,get 方法
}
接口方法
List<Student> selectMultiObject(QueryParam queryParam);
Mapper文件
<select id="selectMultiObject" resultType="com.bjpowernode.domain.Student">
select id,name,email,age from student where name=#{queryName} or age
=#{queryAge}
</select>
或
<select id="selectMultiObject" resultType="com.bjpowernode.domain.Student">
select id,name,email,age from student
where name=#{queryName,javaType=string,jdbcType=VARCHAR}
or age =#{queryAge,javaType=int,jdbcType=INTEGER}
</select>
測試方法
@Test
public void selectMultiObject(){
QueryParam qp = new QueryParam();
qp.setQueryName("李力");
qp.setQueryAge(20);
List<Student> stuList = studentDao.selectMultiObject(qp);
stuList.forEach( stu -> System.out.println(stu));
}
到此這篇關(guān)于MyBatis詳細(xì)講解DAO代理的使用的文章就介紹到這了,更多相關(guān)MyBatis DAO代理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用synchronized實(shí)現(xiàn)一個(gè)Lock代碼詳解
這篇文章主要介紹了使用synchronized實(shí)現(xiàn)一個(gè)Lock代碼詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12
Java調(diào)用IK分詞器進(jìn)行分詞方式,封裝工具類
這篇文章主要介紹了Java調(diào)用IK分詞器進(jìn)行分詞方式,封裝工具類,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
Java 在Word中創(chuàng)建郵件合并模板并合并文本和圖片的操作方法
通過Java程序展示如何來實(shí)現(xiàn)創(chuàng)建模板,并通過郵件合并功能來合并文本數(shù)據(jù)和圖片數(shù)據(jù)的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-07-07
Spring?Boot應(yīng)用中如何動(dòng)態(tài)指定數(shù)據(jù)庫實(shí)現(xiàn)不同用戶不同數(shù)據(jù)庫的問題
讓我們創(chuàng)建一個(gè) Spring Boot 項(xiàng)目首先設(shè)置一個(gè)具有必要依賴項(xiàng)的新 Spring Boot項(xiàng)目,在項(xiàng)目配置中包括 Spring Web、Spring Data JPA 和關(guān)于數(shù)據(jù)庫的依賴項(xiàng),接下來介紹Spring?Boot應(yīng)用中如何動(dòng)態(tài)指定數(shù)據(jù)庫,實(shí)現(xiàn)不同用戶不同數(shù)據(jù)庫的場景?,需要的朋友可以參考下2024-04-04
java怎樣動(dòng)態(tài)獲取泛型參數(shù)的類型
在Java中,泛型信息在編譯時(shí)會(huì)被擦除,但可以通過特定API獲取運(yùn)行時(shí)的泛型參數(shù)類型,主要API包括Class的getGenericSuperclass()和getGenericInterfaces()方法,以及ParameterizedType的getActualTypeArguments()方法2024-09-09
詳解spring boot集成ehcache 2.x 用于hibernate二級(jí)緩存
本篇文章主要介紹了詳解spring boot集成ehcache 2.x 用于hibernate二級(jí)緩存,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
Apache?Arrow?Parquet存儲(chǔ)與使用
這篇文章主要為大家介紹了Apache?Arrow?Parquet存儲(chǔ)與使用原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
Spring Boot自定義favicon實(shí)現(xiàn)方法實(shí)例解析
這篇文章主要介紹了Spring Boot自定義favicon實(shí)現(xiàn)方法實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08

