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查询具有继承.多态和关 联关系的数据.在检索 ...
随机推荐
- hashmap C++实现分析及std::unordered_map拓展
今天想到哈希函数,好像解决冲突的只了解了一种链地址法而且也很模糊,就查了些资料复习一下 1.哈希Hash 就是把任意长度的输入,通过哈希算法,变换成固定长度的输出(通常是整型),该输出就是哈希值. 这 ...
- Web Api(4)
参考原文链接https://www.cnblogs.com/JamelAr/,本文大部分内容是根据这位博主进行实验测试的,非常感谢分享,另外也参考了https://www.cnblogs.com/vi ...
- SSH服务端
- .Net界面开发必备!DevExpress Blazor UI全新组件助力界面开发
行业领先的.NET界面控件DevExpress 正式发布了v19.1版本,DevExpress UI for Blazor/ Razor组件附带7个用户界面组件(包括Data Grid和Pivot G ...
- 修改mysql5.7数据表字符集编码的命令
查看表中字符集的命令 show variables like '%char%' 更改数据库中数据表的字符集靠谱命令,亲测可行,在workbench和phpmyadmin上都通过 alter table ...
- 题解 比赛 match
比赛 match Description 有 N 支队伍打比赛.已知有如下条件: • 每支队伍恰好打了 4 场比赛 • 对于一场比赛,如果是平局,双方各得 1 分:否则胜者得 3 分,负者不得分 给定 ...
- vue2.0 + element-ui2实现分页
当我们向服务端请求大量数据的时候,并要在页面展示出来,怎么办?这个时候一定会用到分页. 本次所使用的是vue2.0+element-ui2.12实现一个分页功能,element-ui这个组件特别丰富, ...
- Python 多线程Ⅲ
线程优先级队列( Queue) Python的Queue模块中提供了同步的.线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列Prior ...
- BZOJ 3073: [Pa2011]Journeys Dijkstra+线段树优化建图
复习一下线段树优化建图:1.两颗线段树的叶子节点的编号是公用的. 2.每次连边是要建两个虚拟节点 $p1,p2$ 并在 $p1,p2$ 之间连边. #include <bits/stdc++.h ...
- vue 运行脚手架报错
报错: You are using the runtime-only build of Vue where the template compiler is not available. Either ...