package dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import com.sun.crypto.provider.RC2Cipher; /**
*
* @author Administrator
* 数据访层基类
*
*/
public class BaseDao { /*
*打开数据库连接
*/
public Connection getConn(){ Connection conn = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","tiger");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
} /*
* 关闭的方法
* 释放资源
* 后开的先关
*/
public void closeAll(Connection conn,PreparedStatement pstmt,ResultSet rs){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } if(pstmt!=null){
try {
pstmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } } /*
* 万能方法
* 只能增、删除、改。
* 不能查
*/
public int executeSql(String sql,Object[] param){
Connection conn = null;//数据库连接
PreparedStatement pstmt = null;
int num = 0; try {
conn = this.getConn();//得到数据库连接
pstmt = conn.prepareStatement(sql); if(param!=null){ for (int i = 0; i < param.length; i++) {
pstmt.setObject(i+1, param[i]);
} }
num = pstmt.executeUpdate();//增、删除、改全用这个方法 } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
this.closeAll(conn, pstmt,null);
} return num; } }

  

BaseHibernateDAO

package dao.impl;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Example;
/**
*
* 操作数据库底层类
*
*/
public abstract class BaseHibernateDAO {
private Session session;
private boolean isClose = false;//是否是调用者关闭Session
/**
*
* @param cla
* @param id
* @return
*/
protected Object getObject(Class cla,java.io.Serializable id){
Object object = null;
session = this.getSession();
try{
object = session.get(cla, id);
}catch(Exception ex){
ex.printStackTrace();
}finally{
if(!isClose){
this.closeSession();
}
}
return object;
} /**
*
* @param cla
* @param id
* @return
*/
protected Object loadObject(Class cla,java.io.Serializable id){
Object object = null;
session = this.getSession();
try{
object = session.load(cla, id);
}catch(Exception ex){
ex.printStackTrace();
}finally{
if(!isClose){
this.closeSession();
}
}
return object;
} /**
* 添加数据
*/
protected boolean add(Object object){
Transaction tx = null;
session = this.getSession();
try{
tx = session.beginTransaction();//开启事务
session.save(object);
tx.commit();//提交事务
}catch(Exception ex){
if(tx!=null)tx.rollback();//回滚
ex.printStackTrace();
return false;
}finally{
if(!isClose)
this.closeSession();
}
return true;
}
/**
* 修改数据
*/
protected boolean update(Object object){
Transaction tx = null;
session = this.getSession();
try{
tx = session.beginTransaction();//开启事务
session.update(object);
tx.commit();//提交事务
}catch(Exception ex){
if(tx!=null)tx.rollback();//回滚
ex.printStackTrace();
return false;
}finally{
if(!isClose)
this.closeSession();
}
return true;
}
/**
* 删除数据
*/
protected boolean delete(Class cls,java.io.Serializable id){
Transaction tx = null;
Object object = this.getObject(cls, id);
session = this.getSession();
try{
tx = session.beginTransaction();//开启事务
session.delete(object);//获得对象并作删除
tx.commit();//提交事务
}catch(Exception ex){
if(tx!=null)tx.rollback();//回滚
ex.printStackTrace();
return false;
}finally{
if(!isClose)
this.closeSession();
}
return true;
}
/**
* 删除数据
*/
protected boolean deleteAll(String sql){
Transaction tx = null;
session = this.getSession();
try{
tx = session.beginTransaction();//开启事务
Query query = session.createQuery(sql.toString()); int i = query.executeUpdate();
System.out.println("======="+i);
//获得对象并作删除
tx.commit();//提交事务
}catch(Exception ex){
if(tx!=null)tx.rollback();//回滚
ex.printStackTrace();
return false;
}finally{
if(!isClose)
this.closeSession();
}
return true;
} /**
* 根据条件进行高级查询
*/
protected List search(Class clazz,Object condition){
List list = null;
try {
List results = this.getSession().createCriteria(clazz).add(Example.create(condition)).list();
return results;
} catch (Exception e) {
return list;
}finally{
if(!isClose)
this.closeSession();
}
} /**
* 根据SQL查询
*/
protected List selectBySql(String sql){
List list = null;
try{
list = this.getSession().createSQLQuery(sql).list();
return list;
}catch(Exception ex){
ex.printStackTrace();
return list;
}finally{
if(!isClose)
this.closeSession();
}
} /**
* 根据HQL查询
*/
protected List selectByHql(String Hql){
List list = null;
session = this.getSession();
try{
list = session.createQuery(Hql).list();
return list;
}catch(Exception ex){
ex.printStackTrace();
return list;
}finally{
if(!isClose)
this.closeSession();
}
} /**
*
* @return
*/
protected Session getSession() { if(this.session==null){
this.session = HibernateSessionFactory.getSession();
System.out.println("-----开启Session-----");
}
return this.session;
}
public void setSession(Session session) {
this.session = session;
} public void closeSession(){ this.session = null;
HibernateSessionFactory.closeSession();
System.out.println("-----关闭Session-----"); }
public void setClose(boolean isClose) {
this.isClose = isClose;
} }

  

CommonDao
package com.hljzr.framework.dao;

import java.io.Serializable;
import java.util.Collection;
import java.util.List; public interface CommonDao { /**
* 查询列表(不分页)
*
* @param hql语句
* @return list
*/
public List query(String hql); /**
* 查询一条
*
* @param cla Class类
* @param id 主键
* @return
*/
public Object queryById(Class cla, Serializable id); /**
* 保存一条数据
*
* @param obj 对象
* @return
*/
public void save(Object obj); /**
* 保存一条数据
*
* @param obj 对象
* @return
*/
public void save(Collection c); /**
* 修改一条数据
*
* @param obj 对象
* @return
*/
public void update(Object obj); /**
* 删除一条数据
*
* @param obj 对象
* @return
*/
public void delete(Object obj); /**
* 删除多条数据
*
* @param obj 对象
* @return
*/
public void delete(Collection c); /**
* 清空session中的特定实体
*/
public void clear(Object obj); /***
* 分页查询
*
* @param offset
* 当前页数
* @param pageSize
* 每页显示的条数
* @return 返回要查询的集合
*/
public List findByPage(final String hql,
final int offset, final int pageSize); /**
* 获取总条数
*/
public Long getTotalCount(String hql); /**
* 获取要分的页数
*
* @param pageSize 每页显示的条数
*/ public Long getTotalPages(String hql, Integer pageSize); /**
* 单个参数分页查询
*
* @param hql
* @param value
* @param offset
* @param pageSize
* @return
*/
public List findByPage(final String hql, final Object value,
final int offset, final int pageSize); /**
* 多个参数分页查询
*
* @param hql
* @param values
* @param offset
* @param pageSize
* @return
*/
public List findByPage(final String hql, final Object[] values,
final int offset, final int pageSize);
}

  

CommonDaoImpl
package com.hljzr.framework.dao.impl;

import java.io.Serializable;
import java.sql.SQLException;
import java.util.Collection;
import java.util.List; import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import com.hljzr.framework.dao.CommonDao; public class CommonDaoImpl extends HibernateDaoSupport implements CommonDao { public List query(String hql) { return super.getHibernateTemplate().find(hql);
} public Object queryById(Class cla, Serializable id) { return this.getHibernateTemplate().get(cla, id);
} public void save(Object obj) {
super.getHibernateTemplate().save(obj);
} public void update(Object obj) {
super.getHibernateTemplate().update(obj);
} public void delete(Object obj) {
super.getHibernateTemplate().delete(obj);
} public void delete(Collection c) {
super.getHibernateTemplate().deleteAll(c);
} public void save(Collection c) {
super.getHibernateTemplate().saveOrUpdateAll(c);
} public void clear(Object obj) {
super.getHibernateTemplate().evict(obj); } /***
* 分页查询
*
* @param pageNo
* 当前页数
* @param pageSize
* 每页显示的条数
* @return 返回要查询的集合
*/
public List findByPage(final String hql, final int pageNo,
final int pageSize) {
List list = getHibernateTemplate().executeFind(new HibernateCallback()// 回调函数
{
// 实现HibernateCallback接口必须实现的方法
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
// 执行Hibernate分页查询 List result = session.createQuery(hql).setFirstResult(
(pageNo - 1) * pageSize)// 索引值从“0”开始
.setMaxResults(pageSize)// 要显示几条
.list();
return result;
}
});
return list;
} /**
* 获取总条数
*/
public Long getTotalCount(String hql) {
return (Long) super.getHibernateTemplate().find(hql).get(0);
} /**
* 获取要分的页数
*/ public Long getTotalPages(String hql, Integer pageSize) {
Long totalpages; Long all = this.getTotalCount(hql); totalpages = (all % pageSize == 0) ? (all / pageSize)
: (all / pageSize + 1);
return totalpages;
} /**
* 带参数分页查询 (单个参数)
*/
public List findByPage(final String hql, final Object value,
final int offset, final int pageSize) {
// 通过一个HibernateCallback对象来执行查询
List list = getHibernateTemplate().executeFind(new HibernateCallback() {
// 实现HibernateCallback接口必须实现的方法
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
// 执行Hibernate分页查询
List result = session.createQuery(hql)
// 为hql语句传入参数
.setParameter(0, value).setFirstResult(offset)
.setMaxResults(pageSize).list();
return result;
}
});
return list;
} /**
* 多个参数分页查询
*/
public List findByPage(final String hql, final Object[] values,
final int offset, final int pageSize) {
// 通过一个HibernateCallback对象来执行查询
List list = getHibernateTemplate().executeFind(new HibernateCallback() {
// 实现HibernateCallback接口必须实现的方法
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
// 执行Hibernate分页查询
Query query = session.createQuery(hql); // 为hql语句传入参数
for (int i = 0; i < values.length; i++) {
query.setParameter(i, values[i]);
}
List result = query.setFirstResult(offset).setMaxResults(
pageSize).list();
return result;
}
});
return list;
}
}

  

BaseDao+万能方法 , HibernateDaoSupport的更多相关文章

  1. Dao层抽取BaseDao公共方法

    设计IBseDao接口,定义公共的CRUD方法. // IBaseDao 接口,定义公共的CRUD方法 public interface IBaseDao<T> { public void ...

  2. .net 4中使用 dynamic,将json字符串转成对象的 万能方法。

    在.net 4中增加了对弱类型的支持.为和弱类型的对象进行数据交换提供了方法.我们常常会遇到将json字符串转成对象的情景,虽然可以使用 JavaScriptSerializer 或者 DataCon ...

  3. 不一样的dynamic解析json 万能方法

    写过javascript的人都知道js解析json 1:(JSON) 字符串转换为对象. var str = '{"name":"lsw","hobb ...

  4. valueof这个万能方法,将string转换为int或者int转换为string都可以

    private static String testString = "111"; int stringInt = Integer.valueOf(testString); Str ...

  5. HibernateTemplate和HibernateDaoSupport(spring注入问题)

    HibernateTemplate HibernateTemplate是spring提供的一个就hibernate访问持久层技术而言.支持Dao组件的一个工具.HibernateTemplate提供持 ...

  6. 万能的JDBC工具类。通过反射机制直接简单处理数据库操作

    package com.YY.util; import java.io.IOException; import java.io.InputStream; import java.sql.Connect ...

  7. java项目常用 BaseDao BaseService

    java项目常用 BaseDao BaseService IBaseDao 1 package com.glht.sim.dao; 2 3  import java.util.List; 4 5 6 ...

  8. js方法之间的调用之——传参方法

    在最近项目需求中发现,完成一些功能的时候总是要调很多结构类似的方法,写起来很繁琐,所以就想写一个“万能”方法,是的代码更简洁.即:把一个方法作为参数传给这个“万能”方法,让它去执行你给定的方法,就类似 ...

  9. Hibernate查询方法总结

    1. HQL查询 HQL是Hiberante官方推荐的Hibernate检索方式,它使用类似SQL的查询语言,以面向对象的方式从数据库中查询.可以使用HQL查询具有继承.多态和关 联关系的数据.在检索 ...

随机推荐

  1. Web Api(1)

    由于在学习Web Api没有了解过MVC,觉得有些吃力.很多基础的东西都会一并记录下来. Web API 的意思是使用HTTP协议并通过网络调用的API. API的意思软件外部接口. 在实际的开发中, ...

  2. js创建对象的几种方式(工厂模式、构造函数模式、原型模式)

    普通方法创建对象 var obj = { name:"猪八戒", sayname:function () { alert(this.name); } } var obj1 = { ...

  3. 数据管理必看!Kendo UI for jQuery过滤器状态保持

    Kendo UI for jQuery最新试用版下载 Kendo UI目前最新提供Kendo UI for jQuery.Kendo UI for Angular.Kendo UI Support f ...

  4. jQuery数据管理:Kendo UI过滤器设置运算符

    Kendo UI for jQuery最新试用版下载 Kendo UI目前最新提供Kendo UI for jQuery.Kendo UI for Angular.Kendo UI Support f ...

  5. 把task加入websocket服务端程序

    服务端代码 <?php //task任务要实现两个方法onfinish ontask //还要设置worker_num date_default_timezone_set("PRC&q ...

  6. 验证码生成 C#

    /// <summary> /// 验证码类 /// </summary> public class Rand { #region 生成随机数字 /// <summary ...

  7. hdu 5723 Abandoned country 最小生成树+子节点统计

    Abandoned country Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  8. jdk中使用的设计模式

    在JDK(Java Development Kit)类库中,开发人员使用了大量设计模式,正因为如此,我们可以在不修改JDK源码的前提下开发出自己的应用软件,研究JDK类库中的模式实例也不失为学习如何使 ...

  9. pymysql pymysql.err.OperationalError 1045 Access denied最简单解决办法

    我使用的是python3.6+pymysql+mysql8.0 在cmd命令行直接输入mysql回车出现:ERROR 1045 (28000): Access denied for user 'ODB ...

  10. [笔记]动态规划(dynamic programming)

    动态规划与分治方法都是通过组合子问题的解来求解原问题,区别在于:分治方法将问题划分为互不相交的子问题,递归求解子问题,再将它们的解组合起来,求出原问题的解.分治算法可能反复的求解某些公共子问题,从而使 ...