第二篇,總體架構dbutils dao篇

若是您喜歡sql而不是hql,或者不喜歡用hibernate,jroo提供了一個經過sql操做數據庫的dao,可知足您對sql的喜好。
jroo採用dbutils操做sql,sql語句可寫在java類中或外部xml文件中,或在頁面上sql語句,哪一種方式均可知足您的喜好。
在頁面上寫sql的方式,可見演示程序的「系統管理」>「sql/hql管理」菜單。
dbutils的dao接口BaseDbutilsDao中的方法有:

public interface BaseDbutilsDao {


/**
* 執行insert/update/delete語句
* @param sql
* @param params
* @return
* @throws Exception 
*/
public int update(SqlBuilder sqlBuilder) throws Exception;

/**
* 外部sql,執行insert/update/delete語句
* @param queryName
* @param paramMap
* @return
* @throws Exception
*/
public int update(String queryName,Map<String,?> paramMap) throws Exception;


/**
* 批量執行指定的SQL語句
* @param sql
* @param params
* @return
* @throws Exception 
*/
public int[] batch(String sql, Object[][] params) throws Exception;
    
/**
* 執行統計查詢語句,語句的執行結果必須只返回一個數值
* @param sql
* @param params
* @return
* @throws Exception
*/
public long findCount(SqlBuilder sqlBuilder) throws Exception;

    /**
     * 外部sql查詢
     * @param queryName
     * @param paramMap
     * @return
     * @throws Exception
     */
public long findCount(String queryName,Map<String,?> paramMap) throws Exception;

 /** 
     * 查詢出結果集中的第一條記錄,並封裝成對象 
     * @param beanClass 類名 
     * @param sqlBuilder
     * @return 對象 
     */ 
public <T> T findOne(Class<T> beanClass, SqlBuilder sqlBuilder) throws Exception;

/**
* 外部sql查詢
* @param <T>
* @param beanClass
* @param queryName 查詢名
* @param paramMap
* @return
* @throws Exception
*/
public  <T> T findOne(Class<T> beanClass,String queryName,Map<String,?> paramMap) throws Exception;


    /** 
     * 執行查詢,將結果集的每行結果保存到Bean中,而後將全部Bean保存到List中 
     * @param beanClass 類名 
     * @param sqlBuilder
     * @return 查詢結果 
     */ 
public <T> List<T> findList(Class<T> beanClass, SqlBuilder sqlBuilder) throws Exception;

/**
* 外部sql查詢,返回list
* @param <T>
* @param beanClass
* @param queryName
* @param paramMap
* @return
* @throws Exception
*/
public  <T> List<T> findList(Class<T> beanClass,String queryName,Map<String,?> paramMap) throws Exception;

/**
* 執行查詢,結果集保存到Map中
* @param <T>
* @param beanClass
* @param sqlBuilder
* @param keyPropertyName 做爲Map結果集的key
* @param clazzOrPropertyName 做爲Map結果集的value,實體或實體中的屬性名稱
* @return
* @throws Exception
*/
public <T> Map<?, ?> findMap(Class<T> beanClass,SqlBuilder sqlBuilder,String keyPropertyName,Object clazzOrPropertyName) throws Exception;

/**
* 外部sql查詢,返回Map
* @param <T>
* @param beanClass
* @param paramMap
* @param keyPropertyName 做爲Map結果集的key
* @param clazzOrPropertyName 做爲Map結果集的value,實體或實體中的屬性名稱
* @return
* @throws Exception
*/
public  <T> Map<?, ?> findMap(Class<T> beanClass,String queryName,Map<String,?> paramMap,String keyPropertyName,Object clazzOrPropertyName) throws Exception;


/**
     *  mysql 分頁查詢,僅適用於mysql
     * @param entityClass
     * @param sqlBuilder
     * @param page
     * @return
     */
public <T> Page findPage(Class<T> beanClass,SqlBuilder sqlBuilder,Page page) throws Exception;

/**
* 外部sql分頁查詢,
* @param <T>
* @param beanClass 封裝查詢出來的數據的對象
* @param page 分頁對象
* @param queryName 查詢名
* @param paramMap 參數名值對
* @return
* @throws Exception
*/
    public <T> Page findPage(Class<T> beanClass,Page page, String queryName,Map<String,?> paramMap) throws Exception;


}


SqlBuilder同Hibernate dao的HqlBuilder,使用方法相似StringBuilder,具體使用可見上一篇的hibernate dao的HqlBuilder。
在xml中sql如:
而後在action或service中,傳遞查詢名稱和Map參數名值對,調用BaseDbUtilsDao的不一樣方法便可。 同一個查詢名稱sql,調用不一樣的方法,可返回一條數據,List數據、Map數據、分頁數據和數量統計。
相關文章
相關標籤/搜索