【Spring集成MyBatis】MyBatis的Dao層實現(基于配置,非注解開發)

文章目錄

  • 1. MyBatis的dao層實現(傳統方式)——需要寫接口及其實現類
  • 2. MyBatis的代理開發方式——僅需寫接口

1. MyBatis的dao層實現(傳統方式)——需要寫接口及其實現類

傳統方式就是在項目下邊建立dao包,里面包含接口及其實現類,文件結構如下:
在這里插入圖片描述
UserMapper.java

package com.example.demo.dao;import com.example.demo.domain.User;import java.io.IOException;
import java.util.List;public interface UserMapper {List<User> findAll() throws IOException;
}

UserMapperImpl.java

package com.example.demo.dao.impl;import com.example.demo.dao.UserMapper;
import com.example.demo.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 java.io.IOException;
import java.io.InputStream;
import java.util.List;public class UserMapperImpl implements UserMapper {@Overridepublic List<User> findAll() throws IOException {InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession();List<User> userList = sqlSession.selectList("userMapper.findAll");sqlSession.close();return userList;}
}

測試其實現:

package com.example.demo.service;import com.example.demo.dao.UserMapper;
import com.example.demo.domain.User;import java.io.IOException;
import java.util.List;public class ServiceDemo {public static void main(String[] args) throws IOException {
//        創建dao層對象,目前dao層是手動編寫的UserMapper userMapper = new UserMapperImpl();List<User> all = userMapper.findAll();System.out.println(all);}
}

其實這里邊就是用MyBatis提供的API調用MyBatis配置,這個內容在剛開始學MyBatis的時候有提到過:【Spring集成MyBatis】MyBatis誕生及代碼快速入門(非注解開發)

2. MyBatis的代理開發方式——僅需寫接口

在上面的代碼中,其實很多代碼都是重復的,比如獲取sqlSession的代碼:

InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();

而sql語句的代碼又是半重復的,只有括號里面的內容會發生變化:

List<User> userList = sqlSession.selectList("userMapper.findAll");

在這里介紹MyBatis的代理開發方式,其需要遵循一定的規范
在這里插入圖片描述
即如下的對應部分應該相同:
在這里插入圖片描述
使用以上介紹的開發方式,我們就不需要再寫接口的實現類了,只需要讓接口與XML文件中的定義對應即可。
此時,我的XML文件和接口分別為:
UserMapper.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.example.demo.dao.UserMapper"><select id="findAll" resultType="user">select * from user</select>
</mapper>

UserMapper.java

package com.example.demo.dao;import com.example.demo.domain.User;import java.io.IOException;
import java.util.List;public interface UserMapper {List<User> findAll() throws IOException;
}

測試的時候,只需要通過sqlSession.getMapper()來獲得對應類的實現配置即可

package com.example.demo.service;import com.example.demo.dao.UserMapper;
import com.example.demo.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 java.io.IOException;
import java.io.InputStream;
import java.util.List;public class ServiceDemo {public static void main(String[] args) throws IOException {InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession();UserMapper userMapper = sqlSession.getMapper(UserMapper.class);List<User> userList = userMapper.findAll();System.out.println(userList);}
}

假如帶參數查詢,操作也是類似的,在XML文件中加上:
<select id="findById" parameterType="int" resultType="user">select * from user where id=#{id}
</select>

接口中加上:

User findById(int id);

實現時調用:

User user = userMapper.findById(1);

即可獲得對應的user結果

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/163684.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/163684.shtml
英文地址,請注明出處:http://en.pswp.cn/news/163684.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

交直流一體化電源系統測試步驟詳解

交直流一體化電源擁有高度適應性&#xff0c;可以用于不同的電力需求領域。但是為了確保其質量和性能&#xff0c;需要對交直流一體化電源進行各項測試以保證正常工作。本文納米軟件將介紹交直流一體化電源的測試方法&#xff0c;以及如何用交直流一體化電源測試系統進行測試。…

Java,數據結構與集合源碼,關于Map接口的實現類(HashMap、LinkedHashMap)

HashMap中的元素的特點&#xff1a; HashMap中的所有key之間是不可重復的、無序的。所有的key構成一個Set集合。 HashMap中的所有的value彼此之間是可重復的、無序的。所有的value構成一個Collection集合。 HashMap中的一對key-value&#xff0c;就構成了一個entry。Map中的ent…

python常用第三方模塊---openyxl

openyxl模塊&#xff1a;用于處理excel文件的木塊&#xff0c;可以Excel中的數據進行寫入和讀取 函數或類的名稱功能描述load_workbook(filename)打開已經存在的工作簿&#xff0c;結果為工作簿對象 workbook.sheetnames 工作簿對象的sheetnames屬性&#xff0c;用戶獲取所有工…

深入理解 pytest Fixture 方法及其應用!

當涉及到編寫自動化測試時&#xff0c;測試框架和工具的選擇對于測試用例的設計和執行非常重要。在Python 中&#xff0c;pytest是一種廣泛使用的測試框架&#xff0c;它提供了豐富的功能和靈活的擴展性。其中一個很有用的功 能是fixture方法&#xff0c;它允許我們初始化測試環…

《實現領域驅動設計》筆記——上下文映射圖

一個項目的上下文映射圖可以用方式來表示。比較容易的一種是畫一個簡單的框圖表示兩個或多個限界上下文之間的映射關系。該框圖表示了不同的限界上下文在解決方案空間中是如何通過集成相互關聯的。另一種更詳細的方式是通過限界上下文集成的源代碼實現來表示。 上下文映射圖為什…

微軟WHQL認證

windows驅動開發要擺脫在測試模式下的開發&#xff0c;需要通過WHQL認證。 1&#xff1a;申請EV代碼簽名證書。EV代碼簽名證書在后續注冊Windows硬件開發中心帳戶&#xff0c;以及提交WHQL認證前為驅動程序進行數字簽名等流程中都需要用到&#xff0c;所以申請EV代碼簽名證書是…

唯一索引和普通索引的使用上要注意什么

考慮下面一種情況&#xff1a; select name from CUser where id_card xxxxxxxyyyyyyzzzzz;你可能會將id_card作為主鍵了&#xff0c;但最好別這么做。你想想這么長一串的字符串做主鍵&#xff0c;查詢時候效率其實是比較低的&#xff0c;其實是建議選擇其他的作為主鍵。 那么…

BUUCTF [SWPU2019]我有一只馬里奧 1

BUUCTF:https://buuoj.cn/challenges 題目描述&#xff1a; 得到的 flag 請包上 flag{} 提交。 密文&#xff1a; 下載附件&#xff0c;得到一個.exe文件。 解題思路&#xff1a; 1、雙擊.exe文件運行&#xff0c;得到一個1.txt文本。打開&#xff0c;如下圖。 2、提示我們…

Mysql中正則表達式Regexp常見用法

Mysql中正則表達式Regexp常見用法_regexp不包含-CSDN博客

List轉string 逗號分隔

List轉string 逗號分隔 1、將list轉化為逗號分割的字符串 String str String.join(",", list); String str StringUtils.json(list.toArray(), ",");   2、將逗號分隔的字符串轉換為List List<String> list Arrays.asList(str.split("…

當老師應該選文科還是理科

教育不斷發展和改革&#xff0c;教師職業的選擇也越來越受到關注。許多人在選擇專業時都會考慮成為一名教師&#xff0c;但對于選擇文科還是理科卻感到困惑。本文將探討當老師應該選文科還是理科。 文科注重的是人文素養和社會科學方面的知識&#xff0c;而理科則注重自然科學和…

如何做一個簡單的深度集成學習框架

使用同一個框架&#xff0c;獨立在一個數據集上面&#xff0c;分別訓練多次&#xff0c;每個單獨模型訓練超參數可以一樣&#xff0c;也可以不一樣&#xff0c;最后若干個訓練好的獨立模型在測試集數據上面做最后集中決策。 實例代碼如下&#xff1a; class MyEnsemble(nn.Modu…

問題 上位機程序重啟

/ 1、上位機程序重啟&#xff0c; 讀線程被殺死&#xff0c;mcu usb busy&#xff0c;數據在fifo發不出去 下次線程重啟后&#xff0c;在fifo里的數據首先被發送出去。 //

紅旗Asianux Server Linux V8 安裝萬里數據庫(GreatSQL)

紅旗Asianux Server Linux V8 安裝萬里數據庫&#xff08;GreatSQL&#xff09; 紅旗Asianux介紹&#xff1a; 紅旗Asianux Server Linux 8.0是為云時代重新設計的操作系統&#xff0c;為云時代的到來引入了大量新功能&#xff0c;包括用于配置管理、快速遷移框架、編程語言和…

每天5分鐘復習OpenStack(十)Ceph 架構

1、Ceph是什么&#xff1f; “Ceph is a unified, distributed storage system designed for excellent performance, reliability and scalability.”這句話說出了Ceph的特性&#xff0c;它是可靠的、可擴展的、統一的、分布式的存儲系統。Ceph可以同時提供對象存儲RADOSGW&am…

ip_file_Hook項目解讀

程序流程 執行文件訪問攔截和 IP 地址攔截的流程&#xff1a; 文件訪問攔截功能&#xff1a; 當應用程序嘗試執行文件操作&#xff0c;例如打開文件&#xff0c;調用的是 open 或 openat 函數。 由于這兩個函數已經被重定向為自定義的版本&#xff0c;所以實際上調用的是 op…

基于 Flink SQL 和 Paimon 構建流式湖倉新方案

本文整理自阿里云智能開源表存儲負責人&#xff0c;Founder of Paimon&#xff0c;Flink PMC 成員李勁松在云棲大會開源大數據專場的分享。本篇內容主要分為四部分&#xff1a; 數據分析架構演進介紹 Apache PaimonFlink Paimon 流式湖倉流式湖倉Demo演示 數據分析架構演進 …

蝦皮數據參謀:知蝦助力商家實現數據化運營的利器

在如今競爭激烈的電商市場中&#xff0c;商家需要準確的數據分析來指導他們的業務決策。Shopee電商平臺的數據分析工具——蝦皮數據參謀&#xff08;知蝦&#xff09;&#xff0c;為商家提供了豐富的數據分析服務&#xff0c;包括商品市場、銷量、價格分布、物流監控、差評監控…

ArkTS聲明式開發范式

裝飾器 用來裝飾類、結構體、方法以及變量&#xff0c;賦予其特殊的含義&#xff0c;如上述示例中 Entry 、 Component 、 State 都是裝飾器。 Component 表示這是個自定義組件&#xff1b; Entry 則表示這是個入口組件&#xff1b; State 表示組件中的狀態變量&#xff0c;…

最新版靈沐V3.3微信資源類小程序源碼支持流量主

源碼簡介 最新版靈沐V3.3微信資源類小程序源碼支持流量主&#xff0c;一套不錯的流量主變現資源下載小程序&#xff0c;它支持在微信、QQ和抖音平臺上運行。這次更新主要集中在全局UI設計的升級&#xff0c;并依然注重資源下載和激勵視頻變現的功能。另外&#xff0c;還新增了…