1. 程式人生 > >mybatis泛型DAO介面的設計

mybatis泛型DAO介面的設計

1、泛型DAO介面定義

Java程式碼  收藏程式碼
  1. import java.io.Serializable;  
  2. import java.util.List;  
  3. /** 
  4.  * GenericDao DAO層泛型介面,定義基本的DAO功能 
  5.  * @author wl 
  6.  * @since 0.1 
  7.  * @param <T>    實體類 
  8.  * @param <PK>    主鍵類,必須實現Serializable介面 
  9.  *  
  10.  * @see com.thinkon.commons.dao.GenericIbatisDao 
  11.  */
      
  12. public abstract interface GenericDao<T, PK extends Serializable> {  
  13.     /** 
  14.      * 插入一個實體(在資料庫INSERT一條記錄) 
  15.      * @param entity 實體物件 
  16.      */  
  17.     public abstract void insert(T entity);  
  18.     /** 
  19.      * 修改一個實體物件(UPDATE一條記錄) 
  20.      * @param entity 實體物件 
  21.      * @return 修改的物件個數,正常情況=1
     
  22.      */  
  23.     public abstract int update(T entity);  
  24.     /** 
  25.      * 修改符合條件的記錄 
  26.      * <p>此方法特別適合於一次性把多條記錄的某些欄位值設定為新值(定值)的情況,比如修改符合條件的記錄的狀態欄位</p> 
  27.      * <p>此方法的另一個用途是把一條記錄的個別欄位的值修改為新值(定值),此時要把條件設定為該記錄的主鍵</p> 
  28.      * @param param 用於產生SQL的引數值,包括WHERE條件、目標欄位和新值等 
  29.      * @return 修改的記錄個數,用於判斷修改是否成功
     
  30.      */  
  31.     public abstract int update(DynamicSqlParameter param);  
  32.     /** 
  33.      * 按主鍵刪除記錄 
  34.      * @param primaryKey 主鍵物件 
  35.      * @return 刪除的物件個數,正常情況=1 
  36.      */  
  37.     public abstract int delete(PK primaryKey);  
  38.     /** 
  39.      * 刪除符合條件的記錄 
  40.      * <p><strong>此方法一定要慎用,如果條件設定不當,可能會刪除有用的記錄!</strong></p> 
  41.      * @param param 用於產生SQL的引數值,包括WHERE條件(其他引數內容不起作用) 
  42.      * @return 
  43.      */  
  44.     public abstract int delete(DynamicSqlParameter param);  
  45.     /** 
  46.      * 清空表,比delete具有更高的效率,而且是從資料庫中物理刪除(delete是邏輯刪除,被刪除的記錄依然佔有空間) 
  47.      * <p><strong>此方法一定要慎用!</strong></p> 
  48.      * @return 
  49.      */  
  50.     public abstract int truncate();  
  51.     /** 
  52.      * 查詢整表總記錄數 
  53.      * @return 整表總記錄數 
  54.      */  
  55.     public abstract int count();  
  56.     /** 
  57.      * 查詢符合條件的記錄數 
  58.      * @param param 查詢條件引數,包括WHERE條件(其他引數內容不起作用)。此引數設定為null,則相當於count() 
  59.      * @return 
  60.      */  
  61.     public abstract int count(DynamicSqlParameter param);  
  62.     /** 
  63.      * 按主鍵取記錄 
  64.      * @param primaryKey 主鍵值 
  65.      * @return 記錄實體物件,如果沒有符合主鍵條件的記錄,則返回null 
  66.      */  
  67.     public abstract T get(PK primaryKey);  
  68.     /** 
  69.      * 按主鍵取記錄 
  70.      * @param primaryKey 主鍵值 
  71.      * @return 記錄實體物件,如果沒有符合主鍵條件的記錄,則 throw DataAccessException 
  72.      */  
  73.     public abstract T load(PK primaryKey) throws DataAccessException;  
  74.     /** 
  75.      * 取全部記錄 
  76.      * @return 全部記錄實體物件的List 
  77.      */  
  78.     public abstract List<T> select();  
  79.     /** 
  80.      * 按條件查詢記錄 
  81.      * @param param 查詢條件引數,包括WHERE條件、分頁條件、排序條件 
  82.      * @return 符合條件記錄的實體物件的List 
  83.      */  
  84.     public abstract List<T> select(DynamicSqlParameter param);  
  85.     /** 
  86.      * 按條件查詢記錄,並處理成分頁結果 
  87.      * @param param 查詢條件引數,包括WHERE條件、分頁條件、排序條件 
  88.      * @return PaginationResult物件,包括(符合條件的)總記錄數、頁實體物件List等 
  89.      */  
  90.     public abstract PaginationResult<T> selectPagination(DynamicSqlParameter param);  
  91.     /** 
  92.      * 按條件查詢記錄,並把有外來鍵關聯的欄位的關聯物件也處理出來 
  93.      * <p>此方法是為了避免1+N而設定的</p> 
  94.      * @param param 查詢條件引數,包括WHERE條件、分頁條件、排序條件<strong>(不包括外來鍵關聯表條件)</strong> 
  95.      * @return 符合條件記錄的實體物件的List 
  96.      */  
  97.     public abstract List<T> selectFk(DynamicSqlParameter param);  
  98.     /** 
  99.      * 按條件查詢記錄,並把有外來鍵關聯的欄位的關聯物件也處理出來,並處理成分頁結果 
  100.      * <p>此方法是為了避免1+N而設定的</p> 
  101.      * @param param 查詢條件引數,包括WHERE條件、分頁條件、排序條件<strong>(不包括外來鍵關聯表條件)</strong> 
  102.      * @return PaginationResult物件,包括(符合條件的)總記錄數、頁實體物件List等 
  103.      */  
  104.     public abstract PaginationResult<T> selectFkPagination(DynamicSqlParameter param);  
  105.     /** 
  106.      * 批量插入 
  107.      * @param list 
  108.      */  
  109.     public abstract void batchInsert(final List<T> list);  
  110.     /** 
  111.      * 批量修改 
  112.      * @param list 
  113.      */  
  114.     public abstract void batchUpdate(final List<T> list);  
  115.     /** 
  116.      * 批量刪除 
  117.      * @param list 
  118.      */  
  119.     public abstract void batchDelete(final List<PK> list);  
  120. }  

 2、泛型介面的實現類(其他DAO的基類),以iBatis實現:

Java程式碼  收藏程式碼
  1. import java.io.Serializable;  
  2. import java.sql.SQLException;  
  3. import java.util.List;  
  4. import org.springframework.orm.ibatis.SqlMapClientCallback;  
  5. import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;  
  6. import com.ibatis.sqlmap.client.SqlMapExecutor;  
  7. /** 
  8.  * iBatis DAO層泛型基類,實現了基本的DAO功能 利用了Spring的DaoSupport功能 
  9.  *  
  10.  * @author wl 
  11.  * @since 0.1 
  12.  * @param <T> 
  13.  *            實體類 
  14.  * @param <PK> 
  15.  *            主鍵類,必須實現Serializable介面 
  16.  *  
  17.  * @see com.thinkon.commons.dao.GenericDao 
  18.  * @see org.springframework.orm.ibatis.support.SqlMapClientDaoSupport 
  19.  */  
  20. public abstract class GenericIbatisDao<T, PK extends Serializable> extends  
  21.         SqlMapClientDaoSupport implements GenericDao<T, PK> {  
  22.     // sqlmap.xml定義檔案中對應的sqlid  
  23.     public static final String SQLID_INSERT = "insert";  
  24.     public static final String SQLID_UPDATE = "update";  
  25.     public static final String SQLID_UPDATE_PARAM = "updateParam";  
  26.     public static final String SQLID_DELETE = "delete";  
  27.     public static final String SQLID_DELETE_PARAM = "deleteParam";  
  28. 相關推薦

    mybatisDAO介面設計

    1、泛型DAO介面定義 Java程式碼   import java.io.Serializable;   import java.util.List;   /**   * GenericDao DAO層泛型介面,定義基本的DAO功能 

    mybatis整合spring的 DAO介面

    1,使用者分頁的引數類 package hwt.Utils; import java.util.Map; public class PageEntity { private Integer page; //目前是第幾頁 private Integer size; /

    介面的方式設計一個計算器

    首先,定義一個介面,進行統一和約束程式碼, 泛型在編寫時,是Object型別的,所以為了計算,把Object轉成字串進行計算,BigDecimal類對字串處理更加精確,計算時用BigDecimal類中的方法進行計算 public interface ICounter {

    DAO

    gets 返回 取消 not seda drive 傳遞 bject conn 最近正在學習泛型DAO,通過網上查閱資料,匯總並自己整理了一下。提前需要學習的知識java反射、泛型 用到的反射如下: Class<T>類 是java.lang包下,Class類的實

    Hibernate Dao實現

    car warn sage common exc mes return eat pri package com.esailcar.finance.common.persistence; import java.io.Serializable; import java.l

    javaSE_day10_集合_迭代器_增強for__List介面_ArrayList_LinkedList_Vector_Set_HashSet_Map__可變引數

    1.介紹 集合是一種容器,可以用來儲存多個數據 2.集合和陣列的區別 陣列的長度是固定的,集合的長度是可變的 集合中儲存的元素必須是引用資料型別 3.集合繼承關係 Collection介面為最頂層集合介面了       Collecton介面

    C#mysqlDao.cs

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using MySql.Data.MySqlClient; namespace ConsoleApplicatio

    《資料結構與演算法》之——使用介面型別表示

    如:考慮再由一些項組成的陣列中找出最大項的問題。基本的程式碼是型別無關的,但是它需要一種能力來比較任意兩個物件。因此,不能直接找出Object的陣列中的最大元素——我們需要更多的資訊。最簡單的方法就是找出Comparable的陣列中的最大元。要確定順序,可以使用compare

    springboot封裝mongodbdao

    專案介紹 基於springboot1.5.9封裝的mongodb常用泛型dao 可以在其他專案引入此依賴來實現mongodb操作 簡單方便 提供jar原始碼工程 使用說明 工程基於IDEA構建 JDK1.8以上 首先把工程打成jar  然後在其他專案引入

    Mybatis繫結Dao介面之後向Sql對映檔案傳值問題

    現象:Mybatis繫結Dao層介面之後 頁面傳遞的值傳入Mapping.xml使用 方法一: Dao層函式方法: Public User selectUse

    方法的設計與應用2(引數的限制與設計)

    設計泛型類或方法時,如果要對泛型成員執行除簡單賦值之外的任何操作或呼叫 System.Object 不支援的任何方法,則必須對該型別引數應用約束。包括但不僅限於: 由於具體型別的引數可能無法用於實現方法所以對泛型方法的引數進行限制: 由於具體的引數值可能不符合方法對引數的(數值大

    學習C++設計新思維(程式設計與設計模式之應用).pdf之繼承關係檢查

    ok!主題是:檢查型別A與B是不是有繼承關係,在本書的P38,下面直接上程式碼。 #pragma once template<class T, class U> class Conversion { typedef char Small; class B

    詳細介紹 Hibernate DAO 及其使用方法

    package com.th.huz; import java.io.Serializable; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.Collec

    [轉]Spring JdbcTemplate實現通用的超級dao,比dao更加強大

    這兩天比較忙,沒抽出什麼時間,這一停頓居然已經有2個評論了,無疑增添了我的不少動力。 在開始之前,先說下前面實現的通用泛型dao,在第四篇 通用自定義轉換到JavaBean的RowMapper實現中,把獲取屬性的操作也放到了mapRow的方法中,這會導致在每

    Spring JdbcTemplate實現通用的dao二:實現自己的名稱轉換NameHandler

    這個比較簡單,只是實現了根據Java實體屬性名轉換回資料庫表的列名而已,看下介面定義: /** * 名稱處理介面 * * User: liyd * Date: 2/12/14 * Time: 4:51 PM */ public interface NameHa

    使用註解自動解釋orm,從而實現無xml配置的jdbc介面dao,對資料庫單表增刪查改

    一、獲取資料庫連線和關閉資源 package cn.itdoer.base.utils.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepa

    Mybatis 運用減少DAO層程式碼

        在ORM開發中,針對不同的型別,一般需要編寫不同的DAO類來處理與資料庫的資料傳遞。     一般包括:新增(add)、修改(update)、根據條件查詢符合數(getCount)、根據條件查詢符合列表(getPage)、獲得某一條資料(get)、刪除(delete

    重學 Java 設計模式:實戰代理模式「模擬mybatis-spring中定義DAO介面,使用代理類方式操作資料庫原理實現場景」

    ![](https://img-blog.csdnimg.cn/20200616224007303.png) 作者:小傅哥 部落格:[https://bugstack.cn](https://bugstack.cn) >沉澱、分享、成長,讓自己和他人都能有所收穫!

    設計一個類orderedCollection

    ble test println 一個 不為 move stat arrays this import java.util.Arrays; /** * 設計一個泛型類orderedCollection,它存儲的Comparable對象的集合(在數組中), * 以及該集合的當

    C++ 程序設計與STL模板庫(1)---程序設計簡介及STL簡介與結構

    urn 向上 隊列 是把 鏈表 需要 input stack 特定 泛型程序設計的基本概念 編寫不依賴於具體數據類型的程序 將算法從特定的數據結構中抽象出來,成為通用的 C++的模板為泛型程序設計奠定了關鍵的基礎 術語:概念 用來界定具備一定功能的數據類型。例如: