日期:2014-05-16  浏览次数:20775 次

ibatis mysql 接口封装

使用ibatis作为Dao层时,如不封装下,代码会比较冗余,看着比较乱,笔者结合所在项目实际,进行了简单的封装。由于项目没有使用javabean模型,所以一般数据的组装全部是Map和List,封装后的类DBUtil.java,内容如下:

?

/**
 * @author hqq
 * 封装常用数据库操作
 */
public class DBUtil {

	private static final long serialVersionUID = 1L;
	private static Logger log = Logger.getLogger(DBUtil.class);
	
	/**
	 * 插入一条记录
	 * @param sqlId
	 * @param param
	 * @param sqlMapClient
	 * @return 保存失败返回-1
	 */
	public static Object insert(String sqlId,Object param,SqlMapClientTemplate sqlMapClient){
		Object obj = null;
		try {
			obj = sqlMapClient.insert(sqlId, param);
		} catch (Exception e) {
			obj = -1;
			log.error("出错了!"+e);
		}
		return obj;
	}
	/**
	 * 更新一条记录
	 * @param sqlId
	 * @param param
	 * @param sqlMapClient
	 * @return 成功 or 失败
	 */
	public static boolean update(String sqlId,Object param,SqlMapClientTemplate sqlMapClient){
		boolean flag = false;
		try {
			sqlMapClient.update(sqlId, param);
			flag = true;
		} catch (Exception e) {
			log.error("出错了!"+e);
		}
		return flag;
	}
	/**
	 * 删除记录
	 * @param sqlId
	 * @param param
	 * @param sqlMapClient
	 * @return 成功 or 失败
	 */
	public static boolean delete(String sqlId,Object param,SqlMapClientTemplate sqlMapClient){
		boolean flag = false;
		try {
			sqlMapClient.delete(sqlId, param);
			flag = true;
		} catch (Exception e) {
			log.error("出错了!"+e);
		}
		return flag;
	}
	/**
	 * 返回单条记录的查询
	 * @param sqlId
	 * @param param
	 * @param sqlMapClient
	 * @return
	 */
	public static Map getMap(String sqlId,Object param,SqlMapClientTemplate sqlMapClient){
		Map map = null;
		try {
			map = (Map) sqlMapClient.queryForObject(sqlId, param);
		} catch (Exception e) {
			log.error("出错了!"+e);
		}
		return map;
	}
	/**
	 * 返回多条记录的查询
	 * @param sqlId
	 * @param param
	 * @param sqlMapClient
	 * @return
	 */
	public static List<Map> getList(String sqlId,Object param,SqlMapClientTemplate sqlMapClient){
		List<Map> list = null;
		try {
			list = sqlMapClient.queryForList(sqlId, param);
		} catch (Exception e) {
			log.error("出错了!"+e);
		}
		return list;
	}
	/**
	 * 获取分页列表
	 * @param condition 查询条件<Map<key,value>>
	 * @param orderBy 排序字段及排序方向,如无需排序,则传 null
	 * @param showPage 页数,如小于1,则取默认值 1 (1表示第1页)
	 * @param pageSize 页大小,如小于1,则取默认值10
	 * @param countSqlId 查询符合条件总记录数的sql名称,对应xml配置文件中的id
	 * @param dataSqlId 查询数据的sql名称,对应xml配置文件中的id
	 * @return Map(
    	[totalPages] => 总页数
    	[totalRows] => 符合条件的总记录数
    	[count] => 符合条件的总记录数
    	[nowPage] => 当前显示页码
    	[pageSize] => 页大小
    	[data] => 当前页码的数据,格式如下:(总体是一个List,list里面是map,每一个map对应一行记录)
    	List<
    		Map{
    			列名1 => 值
    			列名2 => 值
    			}
    		>
	 */
	public static Map getPage(Map<String,Object> condition, String orderBy, int showPage,int pageSize,
			String countSqlId,String dataSqlId,SqlMapClientTemplate sqlMapClient){

		//数据合法性校验
		if(countSqlId == null || "".equals(countSqlId)){
			log.error("getCountState不能为空!");
			return null;
		}
		if(dataSqlId == null || "".equals(dataSqlId)){
			log.error("getDataState不能为空!");
			return null;
		}
		if(showPage <= 0){
			showPage = 1;
		}
		if(pageSize <= 0){
			pageSize = 10;
		}
		if(condition == null){
			condition = new HashMap<String,Object>();
		}
		Map<String,Object> returnMap = new HashMap<String, Object>();
		try {
			
			//总记录数
			int totalRows = Integer.parseInt(sqlMapClient.queryForObject(countSqlId, condition).toString());
			
			//总页数(模运算,也叫取余运算:7%3=1    ; 除法运算:7/3=2)
			int totalPages = (totalRows%pageSize==0?totalRows/pageSize:totalRows/pageSize+1);
			
			//计算偏移量,即起始记录行号
			int offset = (showPage-1)*pageSize;
			
			//组装查询条件
			condition.put("_order", orderBy);
			
			Map<String,Integer> limitPara = new HashMap<String,Integer>();
			limitPara.put("_pstart", offset);
			limitPara.put("_psize", pageSize);
			
			condition.put("_limit", limitPara);
			
			//查询数据
			List<Map<String,Object>> list = sqlMa