若是您喜歡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如:
![](http://static.javashuo.com/static/loading.gif)
而後在action或service中,傳遞查詢名稱和Map參數名值對,調用BaseDbUtilsDao的不一樣方法便可。 同一個查詢名稱sql,調用不一樣的方法,可返回一條數據,List數據、Map數據、分頁數據和數量統計。