`

BaseDao

    博客分类:
  • java
 
阅读更多
利用jdbc 实现的数据库操作方法

/*
 * 创建日期 2011-1-17
 *
 * TODO 要更改此生成的文件的模板,请转至
 * 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */
package com.hello.aess.vo;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Map;

import javax.sql.DataSource;

import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.ResultSetExtractor;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;

import com.hehe.aess.logic.log.LogManager;
import com.hehe.aess.logic.sysutil.ManagerFactory;

public abstract class BaseDAO{

	private static final LogManager logManager = ManagerFactory.getLogManager();
	
	private DataSource dataSource;	

	public void setDataSource(DataSource dataSource) {
		this.dataSource = dataSource;
	}
	
	private SimpleJdbcTemplate getSimpleJdbcTemplate() {
		return new SimpleJdbcTemplate(dataSource);
	}
	
	private JdbcTemplate getJdbcTemplate() {
		return new JdbcTemplate(dataSource);
	}

	/**
	 * 获取BeanPropertyRowMapper,主要目的是允许将数据库中NULL值转化为Java中基本类型的默认值
	 * @param <T>
	 * @param mappedClass
	 * @return
	 */
    protected <T>BeanPropertyRowMapper<T> getBeanPropertyRowMapper(Class<T> mappedClass) {
    	BeanPropertyRowMapper<T> bprm = new BeanPropertyRowMapper<T>(mappedClass);
    	bprm.setPrimitivesDefaultedForNullValue(true);
    	return bprm;
	}
    
	/**
	*使用JdbcTemplate实现的基础查询类,带有参数数组
	*/
	protected <T> List<T> query(String sql, Object[] args, RowMapper<T> rowMapper) {
		logManager.info(this.getClass(), sql + toString(args));
		
		return getJdbcTemplate().query(sql,args,rowMapper);
	}
	
	protected int queryForCount(String sql){
		logManager.info(this.getClass(), sql);
		
		return getJdbcTemplate().queryForInt(sql);
	} 
	
	protected int queryForCount(String sql,Object[] args){
		logManager.info(this.getClass(), sql + toString(args));
		
		return getJdbcTemplate().queryForInt(sql, args);
	} 

	protected int update(String sql, Object[] args, int[] types){
		logManager.info(this.getClass(), sql + toString(args));
		
		return getJdbcTemplate().update(sql, args, types);
	}
	
	
	protected int update(String sql,SqlParameterSource ps){
		logManager.info(this.getClass(), sql);
		
		return getSimpleJdbcTemplate().update(sql, ps);
	}
	
	
	protected int[] batchUpdate(String sql,SqlParameterSource[] ps){
		logManager.info(this.getClass(), sql);
		
		return getSimpleJdbcTemplate().batchUpdate(sql,ps);	
	}
	
	 protected int[] batchUpdate(String sql, BatchPreparedStatementSetter setter) {
			logManager.info(this.getClass(), sql);
			
	        return getJdbcTemplate().batchUpdate(sql, setter);
	 }
	
	/**
	*使用JdbcTemplate实现的基础查询类
	*/	
	protected <T> List<T> query(String sql,RowMapper<T> rowMapper) {
		logManager.info(this.getClass(), sql);
		
		return getJdbcTemplate().query(sql,rowMapper);
	}
	
	protected <T>List<T> pageQuery(String baseSql,RowMapper<T> rm,int begin,int length) {	
		String sql="select * from (select rownum as my_rownum,table_a.* from("+baseSql+") table_a where rownum<?) where my_rownum>=?";
		Object[] args=new Object[2];
		args[0] = new Integer(begin+length);
		args[1] = new Integer(begin);
		
		logManager.info(this.getClass(), sql + toString(args));
		
		return query(sql,args,rm);
	}
	
	protected <T>List<T> pageQuery(String baseSql,Object[] paras,RowMapper<T> rm,int begin,int length) {		
		String sql="select * from (select rownum as my_rownum,table_a.* from("+baseSql+") table_a where rownum<?) where my_rownum>=?";
		Object[] args=null;
		int i=0;
		if(paras!=null){
			args = new Object[paras.length+2];
			for(i=0;i<paras.length;i++) args[i]=paras[i];
		}
		else args = new Object[2];
		
		args[i++] = new Integer(begin+length);
		args[i++] = new Integer(begin);
		
		logManager.info(this.getClass(), sql + toString(args));
		
		return query(sql,args,rm);
	}
	
	protected List<Map<String, Object>> queryForList(String sql){
		logManager.info(this.getClass(), sql);
		
		List<Map<String, Object>> objList = this.getJdbcTemplate().queryForList(sql);
		return objList;			
	}
	
	protected List<Map<String, Object>>  queryForList(String sql,Object[] args){
		logManager.info(this.getClass(), sql + toString(args));
		
		List<Map<String, Object>>  objList = this.getJdbcTemplate().queryForList(sql, args);
		return objList;		
	}
	
	protected List<Map<String, Object>> pageQuery(String baseSql,Object[] params,int begin,int length){
		String sql = "select * from (select rownum as my_rownum,table_a.* from("+ baseSql+ ") table_a where rownum<?) where my_rownum>=?" ;
		Object[] args=new Object[params.length+2];
		int i=0;
		if(params!=null){
			args = new Object[params.length+2];
			for(i=0;i<params.length;i++) args[i]=params[i];
		}
		args[i++] = new Integer(begin+length);
		args[i++] = new Integer(begin);

		logManager.info(this.getClass(), sql + toString(args));
		
		return this.queryForList(sql,args);
	}
	
	/**
     * 功能:取得特定订单号 
     * 输入:sequenceName 数据库表对应的sequence的名字 
     * 输出:订单号 
     * 说明:订单号生成规则:时间(如20060412152403)+四位流水号
     * 		时间以数据库时间为准,如果以应用服务器时间为准,如果服务器时间不一致,可造成订单号重复
     * 		现在的实现很弱智,需要改进
     */		
    public final String getNextId(String sequenceName) {
       StringBuffer buf = new StringBuffer();
        buf.append("select to_char(sysdate,'yyyymmddhh24MISS')||");
        buf.append(sequenceName);
        buf.append(".nextval as id from dual");
        try
        {
			String id = (String) getJdbcTemplate().query(buf.toString(),
            new ResultSetExtractor<String>() {
                    public String extractData(ResultSet rs) {
                        String str=null;
                        try {
                            if (rs.next()) {
                                str=rs.getString("id");
                            }
                        } catch (SQLException e) {
                            e.printStackTrace();
                        }
                        return str;
                    }
                });
            return id;
        }catch(Exception e){
            e.printStackTrace();
            return null;
        }  

    }

    /**获得参数列表的字符串*/
    private String toString(Object[] params){
    	if(params==null) return "{[]}";
    	StringBuffer buff = new StringBuffer();
    	buff.append("{");
    	for (int i=0;i<params.length;i++){
    		Object obj = params[i];
    		if(obj!=null) buff.append("["+getString(obj)+"]");
    		if(i!=params.length-1)buff.append(",");
    	}
    	buff.append("}");    	
    	return buff.toString();
    }
    
    /**将对象转换为字符串*/
    private String getString(Object obj){
    	if(obj==null) return "null";
    	else if(obj instanceof Date){
    		Date date = (Date)obj;    		
    		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd HH:mm:ss",Locale.SIMPLIFIED_CHINESE);
    		return  sdf.format(date);
    	}
    	else if(obj instanceof String){
    		String str = (String)obj;    		
    		return str;
    	}
    	return obj.toString();
    }
    
}

分享到:
评论

相关推荐

    basedao_basedao数据库_

    "基于BaseDao的手动数据库操作"是一个常见的话题,尤其在Java开发中。BaseDao是一种设计模式,它通常被用来作为数据库访问对象(DAO)的基础,用于封装数据库的基本CRUD(创建、读取、更新、删除)操作。这种模式...

    常用的BaseDAO及其实现

    "常用的BaseDAO及其实现" BaseDAO是Java中一种常用的数据访问对象(DAO),它提供了统一的数据访问接口,封装了数据访问的基本操作。BaseDAO通常是通过继承HibernateDaoSupport类实现的。 BaseDAO的主要功能包括:...

    java泛型BaseDao与BaseService

    在Java开发中,BaseDao和BaseService是常见的设计模式,用于实现数据访问层(DAO)和业务逻辑层(Service)的抽象基类。通过结合泛型,我们可以创建更通用、灵活的代码,减少冗余并提高代码质量。 首先,我们来理解...

    基于hibernate的baseDao

    **基于Hibernate的BaseDAO** 在Java企业级开发中,数据访问层(DAO,Data Access Object)是连接业务逻辑层和数据库的重要桥梁。BaseDAO是一种通用的设计模式,它封装了Hibernate框架的基本操作,使得业务逻辑层...

    hibernate>>BaseDAO

    `BaseDAO`是许多项目中常见的一种设计模式,它代表了数据访问对象(Data Access Object)的基础类,用于封装对数据库的通用操作。现在我们来深入探讨`hibernate`中的`BaseDAO`及其相关知识点。 首先,DAO设计模式是...

    NC65通过BaseDAO操作数据库

    NC65通过BaseDAO操作数据库,包含接口类及接口实现类: /** * 获取baseDAO * @return */ public BaseDAO getBaseDAO() { if(baseDAO == null){ baseDAO = new BaseDAO(); } return baseDAO; } public ...

    ssh+baseDao实现分页

    在IT行业中,SSH(Spring、Struts、Hibernate)是一个经典的Java Web开发框架组合,而BaseDao是常用于数据访问层的一个基类设计。本话题主要围绕如何利用SSH框架结合BaseDao实现分页功能来展开。 首先,让我们了解...

    Spring声明式事务及BaseDao完整版

    本篇将重点讲解Spring的声明式事务管理和BaseDao的设计与实现。 一、Spring声明式事务管理 1. **什么是事务**:事务是数据库操作的基本单元,它保证了数据的一致性和完整性。一个事务中的所有操作要么全部成功,...

    SpringBoot_BaseDao.zip

    "SpringBoot_BaseDao.zip"这个压缩包文件显然与SpringBoot相关的数据库操作有关,特别是关于BaseDao的基础使用和实现。在Java开发中,Dao(Data Access Object)层是负责处理数据访问的,通常用于与数据库进行交互。...

    基于SpringJDBC的BaseDAO

    ### 基于Spring JDBC的BaseDAO实现与应用 #### 概述 在Java开发领域,尤其是企业级应用开发中,持久层框架是至关重要的组件之一。Spring框架提供了多种方式来处理数据库操作,其中Spring JDBC模块是轻量级且功能...

    SSH集成查询分页处理BaseDao

    在标题提到的"SSH集成查询分页处理BaseDao"中,我们主要关注的是如何在SSH框架下实现数据的分页查询。 分页是大型Web应用中必不可少的功能,它能够帮助用户更有效地浏览和管理大量数据。在这个场景中,"BaseDao...

    Java通用的BaseDao(我是用连接池做的你把里面代码换一下就行了)

    在Java开发中,BaseDao(基础数据访问对象)是一个常见的设计模式,用于提供数据库操作的通用接口或基类。这个模式的主要目标是提高代码的复用性和可维护性,通过抽象出基本的CRUD(创建、读取、更新、删除)操作,...

    BaseDao.java,DaoUtil.java

    在Java编程语言中,`BaseDao.java` 和 `DaoUtil.java` 文件通常包含了与数据库交互的核心逻辑,特别是针对关系型数据库如MySQL。这两个文件中的类和方法是基于JDBC(Java Database Connectivity)API实现的,这是一...

    dbutils封装ORM 实现BaseDAO

    `BaseDAO` 的封装则是一种常见的设计模式,用于简化数据访问对象(DAO)的实现,使得业务代码更加简洁、可维护。 `dbutils` 主要包含以下几个核心概念和功能: 1. **QueryRunner**: QueryRunner类是dbutils的主要...

    基于注解反射封装的BaseDao(支持一对多查询)

    在Java开发中,`BaseDao` 是一个常见的设计模式,用于提供数据访问对象(DAO)的基础功能,方便其他业务逻辑层或数据访问层组件进行数据库操作。本篇将深入探讨如何利用注解和反射机制来封装一个支持一对多查询的 `...

    spring4+hibernate4 封装BaseDao增删改查以及分页,,支持jdk1.7,不支持jdk1.8

    3. **BaseDao封装**:BaseDao是一般用于数据访问层的基类,它包含了通用的CRUD操作。在这个项目中,BaseDao可能已经定义了如`save()`, `update()`, `delete()`, `findById()`, `findAll()`等方法,以供其他特定的DAO...

    Hibernate底层数据库操作函数BaseDao+具体实例

    `BaseDao`是常见的一种设计模式,用于封装Hibernate的基本数据库操作,它为业务层提供了一种统一的接口,方便进行CRUD(创建、读取、更新、删除)操作。在这个主题中,我们将深入探讨`BaseDao`的设计与实现,以及...

    JDBC连接数据库BaseDao通用类(可以调用存储过程)

    ### JDBC与BaseDao通用类 #### JDBC(Java Database Connectivity) JDBC是一种用于执行SQL语句的Java API,它可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC定义了一系列的API,...

    mybatis basedao

    MyBatis BaseDAO 是一种基于 MyBatis 框架的工具类库,它旨在简化数据库操作,通过封装常见的CRUD(Create、Read、Update、Delete)方法,为开发者提供便利,减少重复代码,提高开发效率。在Java Web 开发中,...

    springboot+mybatis 多数据源 basedao +分页

    本项目涉及到的主题是“SpringBoot+MyBatis实现多数据源以及基于BaseDAO的分页功能”。 多数据源是指在一个应用中同时管理多个数据库。这在分布式系统或者需要隔离不同业务数据的场景中非常常见。SpringBoot可以...

Global site tag (gtag.js) - Google Analytics