package cn.yicha.adunion.dao;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import org.apache.log4j.Logger;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.Transaction;
public class BaseDao {
private final static Logger logger = Logger.getLogger(BaseDao.class);
public boolean save(final Object entity) {
Session sn = null;
boolean flag = false;
try {
sn = SessionManager.getSession();
Transaction ts = sn.beginTransaction();
sn.save(entity);
ts.commit();
flag = true;
} catch (Exception ex) {
flag = false;
logger.error("save() error:" + ex.getMessage(), ex);
} finally {
SessionManager.closeSession();
}
return flag;
}
public boolean update(final Object entity) {
Session sn = null;
boolean flag = false;
try {
sn = SessionManager.getSession();
Transaction ts = sn.beginTransaction();
sn.update(entity);
ts.commit();
flag = true;
} catch (Exception ex) {
flag = false;
logger.error("update() error:" + ex.getMessage(), ex);
} finally {
SessionManager.closeSession();
}
return flag;
}
public boolean delete(final Object entity) {
Session sn = null;
boolean flag = false;
try {
sn = SessionManager.getSession();
Transaction ts = sn.beginTransaction();
sn.delete(entity);
ts.commit();
flag = true;
} catch (Exception ex) {
flag = false;
logger.error("delete() error:" + ex.getMessage(), ex);
} finally {
SessionManager.closeSession();
}
return flag;
}
public Object get(final Class entity, final Serializable id) {
Session sn = null;
Object obj = null;
try {
sn = SessionManager.getSession();
obj = sn.get(entity, id);
} catch (Exception ex) {
logger.error("get() error:" + ex.getMessage(), ex);
} finally {
SessionManager.closeSession();
}
return obj;
}
public List findAll(final Class entity) {
Session sn = null;
List list = null;
try {
sn = SessionManager.getSession();
//Transaction ts = sn.beginTransaction();
list = sn.createQuery(" from " + entity.getName()).list();
//ts.commit();
} catch (Exception ex) {
logger.error("find() error:" + ex.getMessage(), ex);
} finally {
SessionManager.closeSession();
}
return list;
}
public List find(final String query) {
Session sn = null;
List list = null;
try {
sn = SessionManager.getSession();
//Transaction ts = sn.beginTransaction();
list = sn.createQuery(query).list();
//ts.commit();
} catch (Exception ex) {
logger.error("find() error:" + ex.getMessage(), ex);
} finally {
SessionManager.closeSession();
}
return list;
}
public List find(final String queryStr, final Object[] parameter) {
Session sn = null;
List list = null;
try {
sn = SessionManager.getSession();
//Transaction ts = sn.beginTransaction();
Query query = sn.createQuery(queryStr);
int len = parameter.length;
for (int i = 0; i < len; i++) {
query.setParameter(i, parameter[i]);
}
list = query.list();
//ts.commit();
} catch (Exception ex) {
logger.error("find error:" + ex.getMessage(), ex);
} finally {
SessionManager.closeSession();
}
return list;
}
/**
* 用标准Sql语句查询数据库
* @param sql sql语句
* @return
*/
public List selectWithSql(String sql){
Session sn = null;
try {
sn = SessionManager.getSession();
Transaction ts = sn.beginTransaction();
ts.begin();
SQLQuery query = sn.createSQLQuery(sql);
List l = query.list();
ts.commit();
return l;
}finally{
SessionManager.closeSession();
}
}
/**
* 得到分页的结果
* @param currentPage : 当前页
* @param pageSize : 每页要显示多少条数据
* @param countSql : 统计Hql
* @param countValues : 统计Hql中的值(是一个对象数组)
* @param sql
* @param values
* @return
*/
public HashMap getPageResult(int currentPage, final int pageSize
,final String countHql,final Object[] countValues, final String hql,final Object[] values) {
HashMap map = new HashMap();
List list=new ArrayList();
int totalSize= getTotalSize(countHql,countValues);
int start = 0; //第currentPage页数据是从哪条记录开始的
int end = 0; //第currentPage页数据是从哪条记录结束的
int totalPage = 0;
/***** 找出当前要显示页(currentpage)的开始记录号"start"和结束记录号"end",以便只把当前页的数据给找出来 ******/
totalPage = (int)Math.ceil((double)totalSize/pageSize); //共有多少页
//System.out.println("total:"+total+" totalPage:"+totalPage+" currentPage:"+currentPage);
//如果当前页大于总页数,则显示最后一页
if(currentPage>totalPage) currentPage = totalPage;
//如果当前页小于0,则显示第一页
if(currentPage<1) currentPage = 1;
// 根据条件判断,取出所需记录
start = pageSize*(currentPage-1);
end = start + pageSize;
if(end>totalSize) end = totalSize; //因为在下面的循环中用到的是小于,所以在此用"="
list = getCurrentPageResult(start,pageSize,hql,values);
map.put("list",list);
map.put("currentPage",String.valueOf(currentPage));
map.put("totalPage",String.valueOf(totalPage));
map.put("pageSize", String.valueOf(pageSize));
map.put("totalSize", String.valueOf(totalSize));
return map;
}
private int getTotalSize(String countHql,Object[] countValues){
Session session = SessionManager.getSession();
Query query = session.createQuery(countHql);
if(countValues!=null){
for (int i = 0; i < countValues.length; i++) {
String type = getType(countValues[i].getClass().getName());
if (type.equals("String")) {
query.setString(i, "%" + countValues[i].toString() + "%");
}else if (type.equals("Date")) {
query.setDate(i, (Date)countValues[i]);
}else if (type.equals("int")) {
query.setInteger(i, Integer.parseInt((countValues[i].toString())));
}else if (type.equals("Boolean")) {
query.setBoolean(i, Boolean.getBoolean(countValues[i].toString()));
}
}
}
return Integer.parseInt(query.uniqueResult().toString());
}
/**
* 功能:得到分页的结果(当前页)
* @param start : 开始记录号
* @param pageSize : 每页显示多少条记录
* @param sql : 要查询的sql语句
* @param values : sql语句中的变量值
* @return
*/
private List getCurrentPageResult(final int start,final int pageSize,final String sql,final Object[] values){
Session session = SessionManager.getSession();
Query query = session.createQuery(sql);
if(values!=null){
for (int i = 0; i < values.length; i++) {
String type = getType(values[i].getClass().getName());
if (type.equals("String")) {
query.setString(i, "%" + values[i].toString() + "%");
}else if (type.equals("Date")) {
query.setDate(i, (Date)values[i]);
}else if (type.equals("int")) {
query.setInteger(i, Integer.parseInt(values[i].toString()));
}else if (type.equals("Boolean")) {
query.setBoolean(i, Boolean.getBoolean(values[i].toString()));
}
}
}
query.setFetchSize(30);
query.setFirstResult(start);
query.setMaxResults(pageSize);
return query.list();
}
/**
* jiangys, 2008-01-24
* 查询数据库,并根据页数和页面显示数返回结果集
* @param hql 查询语句
* @param pageSize 页面显示数
* @param pageNum 页数
* @return
*/
public List find(final String hql, int pageSize, int pageNum) {
Session sn = null;
List list = null;
try {
sn = SessionManager.getSession();
Query query = sn.createQuery(hql);
int first = 0;
int last = 0;
if(pageNum <= 1){
first = 0;
last = pageSize;
}else{
first = (pageNum - 1) * pageSize;
last = pageSize * pageNum;
}
query.setFirstResult(first);
query.setMaxResults(last);
list = query.list();
} catch (Exception ex) {
logger.error("find() error:" + ex.getMessage(), ex);
} finally {
SessionManager.closeSession();
}
return list;
}
private String getType(String typeParam) {
int last = typeParam.lastIndexOf(".");
return typeParam.substring(last + 1);
}
/**
* 执行sql语句
* @param sql
* @return List HashMap
* @throws YiChaAdException
*/
public List executeQuery(String sql){
Session sn = null;
ResultSet rs = null;
List list = null;
try {
sn = SessionManager.getSession();
Connection conn=sn.connection();
rs = conn.createStatement().executeQuery(sql);
list = getList(rs);
}catch(Exception e){
logger.error("executeQuery :"+e.getMessage(),e);
}finally{
SessionManager.closeSession();
}
return list;
}
/**
* 执行sql语句
* @param sql
* @return boolean
*/
public boolean executeSql(String sql){
boolean result=false;
Session sn = null;
logger.info(sql);
try {
sn = SessionManager.getSession();
Connection conn=sn.connection();
conn.setAutoCommit(false);
conn.createStatement().executeUpdate(sql);
conn.commit();
result=true;
}catch(Exception e){
logger.error("execute:" + sql + e.getMessage(),e);
}finally{
SessionManager.closeSession();
}
return result;
}
/*
* @由rs得到ArrayList
*/
ArrayList getList(ResultSet rs) {
ArrayList vector = new ArrayList();
ResultSetMetaData rsmd = null;
HashMap map = new HashMap();
int columnCount = 0;
try{
rsmd = rs.getMetaData();
columnCount = rsmd.getColumnCount();
String[] columnName = new String[columnCount];
for(int i=0;i<columnCount;i++){
columnName[i]=rsmd.getColumnName(i+1);
}
while(rs.next()){
map = new HashMap();
// System.out.println("rows:"+rs.getRow()+" id:"+rs.getInt("id")+" email:"+rs.getString("email"));
for(int i=0;i<columnCount;i++){
int type = rsmd.getColumnType(i + 1);
// System.out.println(columnName[i]+type);
try{
if(rs.getObject(i+1)==null)
map.put(columnName[i].toLowerCase(),null);
else{
switch (type) {
case 4: //integer型
map.put(columnName[i], Integer.valueOf(rs.getString(i+1)));
break;
case 91: //date型
map.put(columnName[i],rs.getDate(i+1));
break;
case 93: //datetime 或 timestamp
map.put(columnName[i],(Timestamp)rs.getObject(i+1));
break;
case -7: //boolean型
map.put(columnName[i],(Boolean)rs.getObject(i+1));
break;
default:
map.put(columnName[i],rs.getString(i+1));
}
}
}catch(Exception e){
map.put(columnName[i],"");
//System.out.println("列名:"+columnName[i]+"出错!"+e.getMessage().toString());
}
}
vector.add(map);
}
}catch(SQLException e){
logger.error("ProcessVO.java中的getVector()方法出错:"+e.getMessage());
}
return vector;
}
}
分享到:
相关推荐
在给定的项目中,作者尝试简化这个过程,通过仅使用一个Servlet和一个DAO类来构建整个网站。这种方式旨在降低复杂性,提高开发效率。 Servlet在Java Web应用中扮演着服务器端处理程序的角色,它接收HTTP请求并返回...
在这个简单的DAO例子中,我们将深入理解DAO模式的基本概念,以及如何创建和使用一个基本的DAO类。 首先,DAO模式的核心思想是提供一个接口或者抽象类,通过这个接口或抽象类,应用可以与数据库进行交互,而无需关心...
在描述中提到的链接是一个博客文章,可能详细介绍了如何实现一个DAO类,包括如何建立数据库连接、执行SQL语句、处理结果集等。由于没有直接提供文章内容,我们只能根据常规步骤进行解释。 实现DAO时,通常需要以下...
泛型DAO则进一步增强了这种模式,通过泛型参数化,使得一个DAO类可以服务于多种类型的实体对象,减少了代码重复,提高了效率。 首先,我们需要理解什么是泛型。Java泛型是Java SE 5.0引入的新特性,它允许在定义类...
2. **DAO的职责**:DAO通常只负责单一的业务对象,比如一个DAO类对应一个实体类。DAO不处理会话、连接或事务,而是将其交给专门的工具类来管理,以提高代码的可维护性和灵活性。 三、DAO的实现 1. **泛型DAO**:...
在Java中,通常会为每个数据库表创建一个DAO类,用于执行CRUD(Create、Read、Update、Delete)操作。 JDBC(Java Database Connectivity)是Java语言连接数据库的标准API,它提供了与多种数据库进行交互的能力。在...
3. **DAO的结构**:通常,一个DAO类包含一个或多个对应于数据库操作的方法,如`insert()`, `update()`, `delete()`和`query()`。 4. **DAO的实现**:可能会通过JDBC(Java Database Connectivity)来实现,或者使用...
1. **DAO接口/抽象类**:首先,一个DAO类会定义一系列的方法,如增删查改(Insert、Delete、Select、Update),以及可能的事务处理方法。这些方法通常以通用的方式声明,不涉及具体的数据库操作细节。 2. **实现类*...
一个通用的DAO类通常会提供一些基础的数据库操作方法,如增删改查(CRUD),以便于在不同的业务组件中复用。 1. **Spring框架中的DAO支持**:Spring提供了对DAO的出色支持,包括事务管理、数据源配置以及DAO接口的...
在Java中,一个DAO类通常包含一组方法,对应于对数据库表的操作,如增删查改。例如,对于一个名为`User`的实体类,对应的DAO可能会有`saveUser()`, `getUserById()`, `updateUser()`, `deleteUser()`等方法。 这个...
通常,一个DAO类会对应数据库中的一个表,包含对应表的CRUD(创建、读取、更新、删除)操作。使用代码生成器,我们可以自定义模板,生成符合项目规范的DAO接口和实现类,以及对应的SQL映射文件(如MyBatis框架中的...
首先,一个基本的DAO类通常包含以下元素: 1. **接口定义**:定义了对数据库进行操作的方法,如增删查改(CRUD)操作。例如,`UserDao` 接口可能包含 `getUserById(int id)` 和 `saveUser(User user)` 等方法。 2....
定义一个DAo的接口类,z再建一个IMPL实现类,实现接口类的所有方法
1)dao类的繁多,很多设计都是一个entity对应一个dao (不同的只有类名和方法名) 2)dao接口需要维护的method庞大。 3)业务逻辑改变时,dao需要同时修改两个类文件(接口和实现类) 在本文中,我将为您展示如何...
然后,我们需要定义一个DAO类,该类将包含所有与数据库交互的逻辑。这些方法可以是CRUD(创建、读取、更新、删除)操作,以及其他特定于应用的数据库查询。DAO通常会使用JDBC或者ORM框架如Hibernate或MyBatis来实现...
在本文中,`StudentDAO.java`就是这样一个DAO类,负责处理与学生表相关的增删改查操作。 Java Bean则是一个符合一定规范的Java类,通常用于封装数据和业务逻辑,便于在多个组件之间共享和传递数据。例如,`Student....
这个".net 自动生成实体类、DAO工具"是一个实用的小型工具,能够帮助开发者快速构建数据访问层,从而节省手动编写代码的时间。 首先,让我们了解一下实体类(Entity Class)。实体类是对数据库表的面向对象表示,它...
在给定的“generalDAO”压缩包中,可能包含了一个或多个通用 DAO 类的实现,这些类可能是针对不同数据库操作(如增删改查)的封装。这些类可能使用了参数化 SQL 语句或者预编译的 SQL 语句(如 Java 中的 ...
在Java中,一个DAO类通常会包含一组方法,如增删查改,用于执行特定的数据库操作。通过接口或者继承,我们可以实现不同数据库(如MySQL、Oracle等)的切换,而无需修改业务代码。 在"DrugManagementSystem"这个项目...
在Java中,一个DAO类通常会包含连接数据库、执行SQL语句、处理结果集等方法。 **Servlet技术** Servlet是Java EE的一部分,它是一个Java类,用于扩展服务器的功能。在Web应用中,Servlet用于处理HTTP请求,可以生成...