1. 程式人生 > >十九、基於SSM框架,BaseDao --> dao層的抽取優化

十九、基於SSM框架,BaseDao --> dao層的抽取優化

通常來說,在一個專案中我們會使用到多個dao,比如在一個資訊管理系統中,有 UserDao/ MessageDao等;
每個 dao 都有相同的 CRUD 程式碼,每個 dao 去寫也是可以的,但是程式碼量會偏多,程式碼結構不夠好,顯得比較臃腫;實際上可以通過泛型來抽取出一個 BaseDao,這個 BaseDao 包含了各個 dao 的增刪改查程式碼,建立新的 dao 時繼承BaseDao,就可以減少很多重複的程式碼,提高工作效率,優化程式碼結構!

下面我們先寫一個普通的Dao,然後抽取出BaseDao,看Dao前後程式碼變化。

1.抽取前的 dao 介面程式碼

package com.storm.user.dao;

import
com.storm.user.entity.User; import org.springframework.stereotype.Repository; import java.io.Serializable; import java.util.List; @Repository public interface UserDao { public int insert(User user);// 儲存 public int delete(User user);// 刪除使用者 public int update(Serializable id);// 更新使用者 public
User findById(Serializable id);// 根據主鍵查詢使用者 public List<User> getList();// 檢視所有 }

2.建立 BaseDao 介面
這個介面不需要改動太多,只需要把基本的增刪改查程式碼改成泛型

package com.storm.base.dao;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * DAO基礎操作模板
 *
 * @param <E> 泛型
 * @param <PK> 主鍵
 *
 * @author
zzz * @date 2018-01-19 */
public interface BaseDao<E,PK extends Serializable> { /** * 新增操作 * * @param entity 實體物件 * @return */ int insert(E entity); /** * 刪除操作 * * @param id 主鍵 * @return */ int delete(Serializable id); /** * 修改操作 * * @param entity 實體物件 * @return */ int update(E entity); /** * 獲取符合條件的單條資料 * * @param param 實體物件 * @return */ E findById(Serializable id); /** * 獲取符合條件引數的所有資料 * * @param param 實體物件 * @return */ List<E> getList(); }

3.修改抽取前的 dao 介面

package com.storm.user.dao;

import com.storm.base.dao.BaseDao;
import com.storm.user.entity.User;
import org.springframework.stereotype.Repository;
import java.util.List;

@Repository
public interface UserDao extends BaseDao<User,Long> {

    //A.把原來的通用的 CRUD 方法抽取到 BaseDao<E,PK extends Serializable>
    //B.繼承 BaseDao<E,PK extends Serializable>
    //C.所有基本的增刪改查都交給baseDao來處理.如果沒有新的業務,dao層程式碼基本是空
    //D.以後有新增的業務,只需要加新增的業務程式碼。整個UserDao 就沒有多少程式碼了。

    public List<User> selectUserByUserName();

}

<完>

相關推薦

基於SSM框架,BaseDao --> dao抽取優化

通常來說,在一個專案中我們會使用到多個dao,比如在一個資訊管理系統中,有 UserDao/ MessageDao等; 每個 dao 都有相同的 CRUD 程式碼,每個 dao 去寫也是可以的,但是程式碼量會偏多,程式碼結構不夠好,顯得比較臃腫;實際上可以通過

基於SSM框架,BaseDao --> dao抽取優化

通常來說,在一個專案中我們會使用到多個dao,比如在一個資訊管理系統中,有 UserDao/ MessageDao等; 每個 dao 都有相同的 CRUD 程式碼,每個 dao 去寫也是可以的,但是程式碼量會偏多,程式碼結構不夠好,顯得比較臃腫;實際上可以通過泛型來抽取出一個 Base

基於SSM框架,BaseService --- service抽取

service層的抽取和dao層的抽取差不多相同,主要不同點是dao例項化的問題,需要在呼叫時傳入,並在BaseServiceImpl接收。 詳細的過程說明請參考dao層的抽取。 dao層的抽取:http://blog.csdn.net/u011997561/article/deta

python學習之Django框架(二):請求URL路徑引數查詢字串請求體(表單,非表單)請求頭

一、請求 1.flask中,利用HTTP協議想伺服器傳參的幾種途徑 1.1 提取URL的特定部分,可以在伺服器端的路由中用正則表示式擷取: 如:/weather/2018 //前端傳送請求: $.ajax({ url:'http://www.baidu.com/

HTML5單頁框架View.js介紹 - 檢視跳轉(一)

檢視跳轉,是指使用者看到的介面切換為另一個介面的過程,亦即活動檢視轉移的過程。(同一時刻,只有一個檢視處於活動狀態。) 檢視跳轉時,View.js將自動調整位址列中的hash部分,使其始終反映出當前的活動檢視ID。如: http://wzhsoft.com/index.htm

基於proteus的51微控制器模擬例項七8位數碼管驅動晶片max7221應用例項

1、MAX7221是整合式共陰極數碼管驅動晶片。可以用來驅動8位7段式數碼管,也可以驅動條形LED或者8*8LED點陣 微控制器僅僅需要3個IO口就可以控制MAX7221驅動8位數碼管。注意這裡的

基於ssm框架的個人部落格(5)--Dao設計及測試

前臺的頁面完成了一部分,那麼是時候開發Dao層了,前面我們提到了mybatis的逆向工程,也展示了一些逆向生成的一些配置檔案,實體類......現在我們就基於ssm框架,對Dao進行開發,由於程式碼比較簡單,在此不做解釋,直接看註釋。 貼上程式碼 package test

基於proteus的51微控制器模擬例項五1位數碼管顯示例項

1、數碼管實際上是由7個發光二極體組成一個8字形,另外一個發光二極體做成圓點型,這樣就構成了一個數碼管。所有的8個二級管的正極或者負極都連到一個公共端點上,對於公共端連在正極的數碼管,稱為共陽極數碼管,反之稱為共陰極數碼管。 根據數碼管的內部結構原理,可以很清楚的知道數

第二百六節,Tornado框架-Session登錄判斷

獲取系統當前時間 __main__ 參數 art emp exp 登錄密碼 字典 cnblogs Tornado框架-Session登錄判斷 Session需要結合cookie來實現 Session的理解   1、用戶登錄系統時,服務器端獲取系統當前時間,進行nd5加密

動態加載腳本和樣式

所有 load 忽略 報錯 需求 flag mil ans n) 十九、動態加載腳本和樣式 本章主要講解上一章剩余的獲取位置的DOM方法、動態加載腳本和樣式。 1.元素位置 上一章已經通過幾組屬性可以獲取元素所需的位置,那麽這節課補充一個DOM的方法:getBoun

基於字符的I/O操作接口

reader 寫入 內容 網絡傳輸 編碼 writer 字符 read 但是 不管是磁盤還是網絡傳輸,最小的存儲單元都是字節,而不是字符,所以I/O操作的都是字節而不是字符,但是為什麽有操作字符的接口呢?這是因為在我們的程序中通常操作的都是字符的形式,為了操作方便當然要提供

基於ssm框架的論壇系統

star div batis pri 登錄 tps SSM框架 註冊 class 基於ssm框架的論壇系統 1.介紹 本論壇系統基於spring,spr

壓縮打包介紹gzip壓縮工具把bzip2壓縮工具xz壓縮工具

gzip bzip2 xz 十九、壓縮打包介紹、gzip壓縮工具、把bzip2壓縮工具、xz壓縮工具一、壓縮打包介紹windows下接觸的壓縮文件大多是.rar,.7z格式,Linux下,不能識別這種格式。.zip格式的文件在Windows和Linux下都能使用。壓縮文件,能節省磁盤空間,傳輸時能

基於SSM框架的博客系統(二)博主登錄功能

erl 映射 import incr pac 加密 actor gets AC 一、 準備 1.數據庫 創建表db_blogger: 1 DROP TABLE IF EXISTS `t_blogger`; 2 3 CREATE TABLE `t_bl

w查看系統負載vmstat命令top命令sar命令nload命令

w命令 vmstat命令 top命令 sar命令 nload命令 二十九、w查看系統負載、vmstat命令、top命令、sar命令、nload命令一、使用w查看系統負載 # w 06:10:09 up 6:20, 1 user, load average: 0.00, 0.01, 0

安裝PHP5安裝PHP7

PHP5 PHP7 一、安裝PHP5PHP官網www.php.net。主流版本5.6,7.1。如果你的程序,PHP代碼能用PHP7就用7,不能用就用5,PHP7的性能有很大提升。# cd /usr/local/src/# wget http://cn2.php.net/distributions/ph

Nginx防盜鏈Nginx訪問控制Nginx解析PHP相關配置Nginx代理

Nginx防盜鏈 Nginx訪問控制 Nginx解析PHP相關配置 Nginx代理 四十九、Nginx防盜鏈、Nginx訪問控制、Nginx解析PHP相關配置、Nginx代理一、Nginx防盜鏈 必須和“不記錄日誌和過期時間”結合在一起,因為它們同時用到了location。# v

模塊和包

http 變化 圖片 發現 .py 一個 遇到 bsp pri 什麽叫做包:簡單點說就是帶_init_.py文件的文件夾就是包。當我們去調用這個包的時候其實是優先執行了包裏面的_init_文件。而包裏面的其他的py文件就是模塊 1.當我們需要直接調用某模塊的時候,而又不確定

Java基於ssm框架的restful應用開發

unicode ray -c mat after 內容 XP nco restful Java基於ssm框架的restful應用開發 好幾年都沒寫過java的應用了,這裏記錄下使用java ssm框架、jwt如何進行rest應用開發,文中會涉及到全局異常攔截處理、jwt校驗

for循環while循環break跳出循環continue結束本次循環exit退出整

for循環 while循環 break跳出循環 continue結束本次循環 exit退出整個腳本 六十九、for循環、while循環、break跳出循環、continue結束本次循環、exit退出整個腳本一、for循環 語法:for 變量名 in 條件; do …; done 案例1#