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

2、getMapper獲取代理對象
只需調用 SqlSession 的 getMapper()方法,即可獲取指定接口的實現(xiàn)類對 象。該方法的參數(shù)為指定 Dao 接口類的 class 值。
SqlSession session = factory.openSession(); StudentDao dao = session.getMapper(StudentDao.class);
使用工具類
StudentDao studentDao = MyBatisUtil.getSqlSession().getMapper(StudentDao.class);
getMapper()創(chuàng)建的對象,是代替我們自己創(chuàng)建的 StudentDaoImpl 類
3、使用 Dao 代理對象方法執(zhí)行 sql 語句
select方法進行查詢
@Test
public void testSelect() throws IOException {
final List<Student> studentList = studentDao.selectStudents();
studentList.forEach( stu -> System.out.println(stu));
}
insert方法進行插入
@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ù)的類型, 類型的完全限定名或別名。這個屬 性是可選的,因為 MyBatis 可以推斷出具體傳入語句的參數(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>
一個簡單參數(shù)
Dao 接口中方法的參數(shù)只有一個簡單類型(java 基本類型和 String),占位符 #{ 任意字符 },和方法的參數(shù)名無關。
接口方法
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ù)名無關。
測試方法
@Test
public void testSelectById(){
//一個參數(shù)
Student student = studentDao.selectById(1005);
System.out.println("查詢 id 是 1005 的學生:"+student);
}
使用@Param
當 Dao 接口方法多個參數(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));
}
使用對象
使用 java 對象傳遞參數(shù), java 的屬性值就是 sql 需要的參數(shù)值。 每一個屬性就是一個參數(shù)。
語法格式: #{ property,javaType=java 中數(shù)據(jù)類型名
jdbcType=數(shù)據(jù)類型名稱 } javaType, jdbcType 的類型 MyBatis 可以檢測出來,一般不需要設置。常用格式 #{ property }

?創(chuàng)建保存參數(shù)值的對象 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));
}
到此這篇關于MyBatis詳細講解DAO代理的使用的文章就介紹到這了,更多相關MyBatis DAO代理內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
使用synchronized實現(xiàn)一個Lock代碼詳解
這篇文章主要介紹了使用synchronized實現(xiàn)一個Lock代碼詳解,具有一定借鑒價值,需要的朋友可以參考下。2017-12-12
Java 在Word中創(chuàng)建郵件合并模板并合并文本和圖片的操作方法
通過Java程序展示如何來實現(xiàn)創(chuàng)建模板,并通過郵件合并功能來合并文本數(shù)據(jù)和圖片數(shù)據(jù)的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2021-07-07
Spring?Boot應用中如何動態(tài)指定數(shù)據(jù)庫實現(xiàn)不同用戶不同數(shù)據(jù)庫的問題
讓我們創(chuàng)建一個 Spring Boot 項目首先設置一個具有必要依賴項的新 Spring Boot項目,在項目配置中包括 Spring Web、Spring Data JPA 和關于數(shù)據(jù)庫的依賴項,接下來介紹Spring?Boot應用中如何動態(tài)指定數(shù)據(jù)庫,實現(xiàn)不同用戶不同數(shù)據(jù)庫的場景?,需要的朋友可以參考下2024-04-04
詳解spring boot集成ehcache 2.x 用于hibernate二級緩存
本篇文章主要介紹了詳解spring boot集成ehcache 2.x 用于hibernate二級緩存,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05
Spring Boot自定義favicon實現(xiàn)方法實例解析
這篇文章主要介紹了Spring Boot自定義favicon實現(xiàn)方法實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-08-08

