BaseDao+万能方法 , HibernateDaoSupport
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的更多相关文章
- Dao层抽取BaseDao公共方法
设计IBseDao接口,定义公共的CRUD方法. // IBaseDao 接口,定义公共的CRUD方法 public interface IBaseDao<T> { public void ...
- .net 4中使用 dynamic,将json字符串转成对象的 万能方法。
在.net 4中增加了对弱类型的支持.为和弱类型的对象进行数据交换提供了方法.我们常常会遇到将json字符串转成对象的情景,虽然可以使用 JavaScriptSerializer 或者 DataCon ...
- 不一样的dynamic解析json 万能方法
写过javascript的人都知道js解析json 1:(JSON) 字符串转换为对象. var str = '{"name":"lsw","hobb ...
- valueof这个万能方法,将string转换为int或者int转换为string都可以
private static String testString = "111"; int stringInt = Integer.valueOf(testString); Str ...
- HibernateTemplate和HibernateDaoSupport(spring注入问题)
HibernateTemplate HibernateTemplate是spring提供的一个就hibernate访问持久层技术而言.支持Dao组件的一个工具.HibernateTemplate提供持 ...
- 万能的JDBC工具类。通过反射机制直接简单处理数据库操作
package com.YY.util; import java.io.IOException; import java.io.InputStream; import java.sql.Connect ...
- java项目常用 BaseDao BaseService
java项目常用 BaseDao BaseService IBaseDao 1 package com.glht.sim.dao; 2 3 import java.util.List; 4 5 6 ...
- js方法之间的调用之——传参方法
在最近项目需求中发现,完成一些功能的时候总是要调很多结构类似的方法,写起来很繁琐,所以就想写一个“万能”方法,是的代码更简洁.即:把一个方法作为参数传给这个“万能”方法,让它去执行你给定的方法,就类似 ...
- Hibernate查询方法总结
1. HQL查询 HQL是Hiberante官方推荐的Hibernate检索方式,它使用类似SQL的查询语言,以面向对象的方式从数据库中查询.可以使用HQL查询具有继承.多态和关 联关系的数据.在检索 ...
随机推荐
- 闭包-IIFE
1)嵌套函数,内部函数访问了外部函数的局部变量,通过返回内部函数,在函数外部调用内部函数,从而更新外部函数的局部变量的过程: 2)代码执行完成之后离开作用域依旧存在 3)有可能发生内存泄露,若对象的引 ...
- 自动生成SSM框架
使用idea 新创建项目 然后 新创建 java .resources 文件夹...... 图上是项目结构 java文件夹下的 文件夹 命名规范 com.nf147(组织名)+ oukele(作者) ...
- Redis介绍、安装、配置
NoSQL介绍 NoSQL(NoSQL=Not Only SQL),意为反SQL运动,是一项全新的数据库革命性运动.指的是非关系型数据库,解决了传统的关系型数据库,难以解决的超大规模和高并发的的问题 ...
- Acwing-198-反素数(约数, 数学)
链接: https://www.acwing.com/problem/content/200/ 题意: 对于任何正整数x,其约数的个数记作g(x),例如g(1)=1.g(6)=4. 如果某个正整数x满 ...
- Jenkins-邮件模板
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- .net大文件上传断点续传源码
IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头. 一. 两个必要响应头Accept-Ranges.ETag 客户端每次提交下载请求时,服务 ...
- VirtualBox:启动虚拟机后计算机死机
造冰箱的大熊猫@cnblogs 2018/2/21 故障描述:Ubuntu 16.04升级Linux内核后,在VirtualBox中启动虚拟机发现Ubuntu死机,只能通过长按电源开关硬关机的方式关闭 ...
- ETL工具-KETTLE教程专栏1----术语和定义
1-资源库 资源库是用来保存转换任务的,用户通过图形界面创建的的转换任务可以保存在资源库中. 资源库可以使多用户共享转换任务,转换任务在资源库中是以文件夹形式分组管理的,用户可以自定义文 ...
- 动态DP教程
目录 前言 开始 更进一步 前言 最后一届NOIPTG的day2T3对于动态DP的普及起到了巨大的作用.然而我到现在还不会 开始 SP1716 GSS3 - Can you answer these ...
- docker的数据管理
容器中管理数据主要有两种方式: 1.数据卷:容器内数据直接映射到本地宿主机. 2.数据卷容器:使用特定容器维护数据卷 数据卷: 数据卷是一个可供容器使用的特殊目录,他将主机操作系统目录直接映射进容器. ...