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查询具有继承.多态和关 联关系的数据.在检索 ...
随机推荐
- BZOJ 1006 完美消除序列&最大势算法&弦图
K国是一个热衷三角形的国度,连人的交往也只喜欢三角原则.他们认为三角关系:即AB相互认识,BC相互认识,CA相互认识,是简洁高效的.为了巩固三角关系,K国禁止四边关系,五边关系等等的存在.所谓N边关系 ...
- MyBatis---join 查询
在实际业务中,经常能碰到多表关联查询 下面的Demo,讲举例join查询在MyBatis中的实现 User 类: package com.zy.domain; import java.io.Seria ...
- MyBatis-04-配置解析
4.配置解析 1.核心配置文件 mybatis-config.xml MyBatis的配置文件包含了会深深影响MyBatis行为的设置和属性信息 configuration(配置) propertie ...
- CF892E Envy[最小生成树]
题意:有一张 $n$ 个点$ m $条边的连通图.有$Q$ 次询问.每次询问给出 $k[i]$ 条边,问这些边能否同时出现在一棵最小生成树上.$n,m,Q,\sum k\le 500000$. 这题利 ...
- 小猿圈-IT自学人的小圈子 https://book.apeland.cn/details/54/
笔记链接 https://book.apeland.cn/details/54/ 学习视频 https://www.apeland.cn/python
- 题解 最长上升序列2 — LIS2
最长上升序列2 - LIS2 Description 已知一个 1 ∼ N 的排列的最长上升子序列长度为 K ,求合法的排列个数. Input 输入一行二个整数 N , K ( K ≤ N ≤ 15) ...
- js比较两个时间的大小
function checkdate(s,e){ //得到日期值并转化成日期格式,replace(/-/g, "//")是根据验证表达式把日期转化成长日期格式,这样再进行判断就好判 ...
- Linux Tomcat 文件上传异常
如题: ERROR > The temporary upload location [/tmp/tomcat.7982919351026796141.9097/work/Tomcat/local ...
- Python身份运算符
运算符 描述 实例 is is 是判断两个标识符是不是引用自一个对象 x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False is not ...
- hdu 5821 Ball 思维题
Ball Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submis ...