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è)簡(jiǎn)單參數(shù)
Dao 接口中方法的參數(shù)只有一個(gè)簡(jiǎn)單類型(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)。
測(cè)試方法
@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>
測(cè)試方法
@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 可以檢測(cè)出來,一般不需要設(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>
測(cè)試方法
@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)文章
解決@RequestBody接收json對(duì)象報(bào)錯(cuò)415的問題
這篇文章主要介紹了解決@RequestBody接收json對(duì)象報(bào)錯(cuò)415的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06SpringBoot中啟動(dòng)時(shí)如何忽略某項(xiàng)檢測(cè)
這篇文章主要介紹了SpringBoot中啟動(dòng)時(shí)如何忽略某項(xiàng)檢測(cè),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11Spring Security實(shí)現(xiàn)退出登錄和退出處理器
本文主要介紹了Spring Security實(shí)現(xiàn)退出登錄和退出處理器,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05Springboot中使用攔截器、過濾器、監(jiān)聽器的流程分析
Javaweb三大組件:servlet、Filter(過濾器)、?Listener(監(jiān)聽器),這篇文章主要介紹了Springboot中使用攔截器、過濾器、監(jiān)聽器的流程分析,感興趣的朋友跟隨小編一起看看吧2023-12-12Java單例模式下的MongoDB數(shù)據(jù)庫操作工具類
這篇文章主要介紹了Java單例模式下的MongoDB數(shù)據(jù)庫操作工具類,結(jié)合實(shí)例形式分析了java基于單例模式下操作MongoDB數(shù)據(jù)庫相關(guān)連接、查詢、插入、刪除等操作封裝技巧,需要的朋友可以參考下2018-01-01Spring整合Mybatis具體代碼實(shí)現(xiàn)流程
這篇文章主要介紹了Spring整合Mybatis實(shí)操分享,文章首先通過介紹Mybatis的工作原理展開Spring整合Mybatis的詳細(xì)內(nèi)容,需要的小伙伴可以參考一下2022-05-05spring+hibernate 兩種整合方式配置文件的方法
本篇文章主要介紹了spring+hibernate 兩種整合方式配置文件的方法,主要有兩種方式 1、注解方式 2、xml方式實(shí)現(xiàn),有興趣的可以了解一下。2017-04-04Java基于Javafaker生成測(cè)試數(shù)據(jù)
這篇文章主要介紹了Java基于Javafaker生成測(cè)試數(shù)據(jù)的方法,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2020-12-12Servlet+JDBC實(shí)現(xiàn)登陸功能的小例子(帶驗(yàn)證碼)
這篇文章主要介紹了Servlet+JDBC實(shí)現(xiàn)登陸功能的小例子(帶驗(yàn)證碼),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06