第二篇,整体架构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如:
第二篇,整体架构dbutils dao篇_第1张图片

然后在action或service中,传递查询名称和Map参数名值对,调用BaseDbUtilsDao的不同方法即可。
同一个查询名称sql,调用不同的方法,可返回一条数据,List数据、Map数据、分页数据和数量统计。

你可能感兴趣的:(sql,DbUtils,通用Dao)