论坛首页 Java企业应用论坛

使用dbutils封装的一个数据库操作类

浏览 4941 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-04-28  
DAO

使用commons-dbutils-1.3.jar,请自行下载.

 

关于Connection对象和事务在业务层作了处理.

 

主要代码如下:

 

 

package keel.util;

import java.sql.Connection;
import java.util.List;
import java.util.Map;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.log4j.Logger;

/**
 * 操作数据库方法
 * @author 蔡治平
 *
 */
public class SqlUtil {
	private static Logger logger = Logger.getLogger(SqlUtil.class);
	private static QueryRunner qr = new QueryRunner();
	
	/**
	 * 查询
	 * @param conn
	 * @param sql
	 * @param params
	 * @return List<Map<String, Object>>
	 */
	@SuppressWarnings("deprecation")
	public static List<Map<String, Object>> search(Connection conn, String sql, Object[] params){
		List<Map<String, Object>> mapList = null;
		try {
			if(params==null){
				mapList = qr.query(conn, sql, new MapListHandler());
			}else{
				mapList = qr.query(conn, sql, params, new MapListHandler());
			}			
		} catch (Exception e) {
			logger.error("查询出现异常!原因:"+e);
		}
		return mapList;
	}
	
	/**
	 * 查询,将结果返回到bean中,多个bean通过List包装返回
	 * @param <T>
	 * @param conn
	 * @param entityClass
	 * @param sql
	 * @param params
	 * @return List<T>
	 */
	@SuppressWarnings("unchecked")
	public static <T>List<T> search(Connection conn, Class<T> entityClass, String sql, Object[] params){
		List<T> list = null;
		try{
			if (params == null) {  
	            list = (List<T>) qr.query(conn, sql, new BeanListHandler(entityClass));  
	        } else {  
	            list = (List<T>) qr.query(conn, sql, new BeanListHandler(entityClass), params);  
	        }
		}catch(Exception e){
			logger.error("查询出现异常!原因:"+e);
		}		 
		return list;
	}
	
	/**
	 * 通过主键查找记录
	 * @param conn
	 * @param sql
	 * @param params
	 * @return Map<String, Object>
	 */
	public static Map<String, Object> getById(Connection conn, String sql, Object[] params){
		Map<String, Object> map = null;
		try{
			if (params == null) {  
				map = qr.query(conn, sql, new MapHandler());  
	        } else {  
	        	map = qr.query(conn, sql, new MapHandler(), params);  
	        }
		}catch (Exception e) {
			logger.error("查询出现异常!原因:"+e);
		}
		return map;
	}
	
	/**
	 * 查询表的记录总数
	 * @param conn
	 * @param table
	 * @return int
	 */
	public static int getTotal(Connection conn, String table){
		int total = 0;
		String field = "TOTAL";
		if(conn!=null){
			String sql = "SELECT COUNT(*) AS "+field+" FROM "+table;
			try {
				Map<String, Object> map = (Map<String, Object>) qr.query(conn, sql, new MapHandler());
				String n = map.get(field).toString();
				total = Integer.parseInt(n);
			} catch (Exception e) {
				logger.error("查询["+table+"]表记录总数出现异常!原因:"+e);
			}
		}else{
			logger.error("查询["+table+"]表记录总数出现异常!原因:连接为空!");
		}
		return total;
	}
	
	/**
	 * 更新,返回更新记录条数
	 * @param conn
	 * @param sql
	 * @param params
	 * @return int
	 */
	public static int update(Connection conn, String sql, Object[] params){
		int n = 0;
		try{
			if(params==null){
				n = qr.update(conn, sql);
			}else{
				n = qr.update(conn, sql, params);
			}			
		}catch(Exception e){
			logger.error("更新出现异常!原因:"+e);
		}
		return n;
	}
}

 

测试代码片段:

 

 

List<Map<String, Object>> list = SqlUtil.search(conn, sql, new Object[]{"1001","admin"});
		for(int i=0;i<list.size();i++){
			System.out.println(list.get(i).get("id"));
			System.out.println(list.get(i).get("userName"));
		}
		
		List<User> userList = SqlUtil.search(conn, User.class, sql, new Object[]{"1001","admin"});
		for(int i=0;i<userList.size();i++){
			System.out.println(userList.get(i).getId());
			System.out.println(userList.get(i).getUserName());
		}
		
		
		String sql1 = "update rg_user set flag = 1 where id=?";
		int n = SqlUtil.update(conn, sql1, new Object[]{"1001"});
		System.out.println(n);
		
		
		String sql2 = "select * from rg_user where id ='1001'";
		Map<String,Object> map = SqlUtil.getById(conn, sql2, null);
		System.out.println(map.get("id"));
 
   发表时间:2011-07-27   最后修改:2011-07-27
BeanHandler\BeanListHandler如何将db中字段和pojo对象属性绑定?
是否按一定规范?还是怎么的,求解?
0 请登录后投票
   发表时间:2011-07-27  
xiaomaha 写道
BeanHandler\BeanListHandler如何将db中字段和pojo对象属性绑定?
是否按一定规范?还是怎么的,求解?


如果要深入了解可以看dbutils的源码,原理就是把ResultSet转换成相应的bean.
如果想知道用法就看该贴.
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics