- 浏览: 71787 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (46)
- 行业应用 (10)
- Struts1.X学习开发应用 (7)
- Struts2学习开发应用 (2)
- Hibernate学习开发应用 (8)
- Spring2.5学习开发应用 (3)
- IBatis开发与应用 (2)
- Ajax学习开发应用 (3)
- DWR学习开发应用 (2)
- JQuery学习开发应用 (2)
- Ext学习开发应用 (2)
- WebService学习开发应用 (2)
- xfire学习应用开发 (2)
- xml学习开发应用 (2)
- java基础学习 (2)
- J2EE学习开发应用 (4)
- java Awt/Swing学习开发应用 (2)
- Java Web 学习开发应用 (17)
- J2SE基础学习 (2)
- java 网络编程学习开发应用 (2)
- 设计模式 (3)
- Oracle学习 (2)
- BD2学习 (2)
- 其他数据库 (2)
- SQL学习 (2)
- 报表工具 (6)
- 工作流 (2)
最新评论
import java.io.*;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.type.Type;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class GenericDao extends HibernateDaoSupport{
private ThreadLocal<Session> sessions = new ThreadLocal<Session>();
private ThreadLocal<Transaction> transactions = new ThreadLocal<Transaction>();
public synchronized Session getMySession(){
Session session = sessions.get();
if(session==null){
session = getSession();
transactions.set(session.beginTransaction());
sessions.set(session);
}else
if(!session.isOpen()){
session = getSession();
transactions.set(session.beginTransaction());
sessions.set(session);
}
return session;
}
public synchronized void commitMySession(){
Session session = sessions.get();
if(session!=null&&session.isOpen()){
transactions.get().commit();
session.close();
}
transactions.remove();
sessions.remove();
}
public synchronized void rollbackMySession(){
Session session = sessions.get();
if(session!=null&&session.isOpen()){
transactions.get().rollback();
session.close();
}
transactions.remove();
sessions.remove();
}
public <T> T get(Class<T> clazz, Serializable id){
return (T)getHibernateTemplate().get(clazz, id);
}
public <T> T load(Class<T> clazz, Serializable id){
return (T)getHibernateTemplate().load(clazz, id);
}
public <T> void save(T entity){
// System.out.println("---->gdao.save("+entity.getClass().getName()+")----");
getHibernateTemplate().save(entity);
}
public <T> void update(T entity){
getHibernateTemplate().update(entity);
}
public <T> void delete(T entity){
getHibernateTemplate().delete(entity);
}
public int execUpdateSQL(String sql, Serializable...values){
Session sess = getMySession();
SQLQuery query = sess.createSQLQuery(sql);
if(values!=null&&values.length>0){
for(int i=0; i<values.length; i++){
query.setParameter(i, values[i]);
}
}
return query.executeUpdate();
}
public Long getFirstLong(String sql, final Serializable... values) throws Exception{
List<String> params = new ArrayList<String>(1);
List<Type> types = new ArrayList<Type>(1);
params.add("c"); types.add(Hibernate.INTEGER);
Object obj = findUnique(sql, params, types, values);
if(obj==null){
return -1L;
}
if(obj instanceof Object[]){
obj = ((Object[])obj)[0];
}
if(obj instanceof Number){
return ((Number)obj).longValue();
}
return -1L;
}
// public Long getFirstLong(String sql, List<String>params, List<Type>types) throws Exception{
// Object[] obj = findUnique(sql, params, types);
// if(obj==null||obj.length==0){
// return -1L;
// }
// Object object = obj[0];
// if(object instanceof Number){
// return ((Number)object).longValue();
// }
// return -1L;
// }
public List<?> find(String hql){
return getHibernateTemplate().find(hql);
}
// public List<?> find(String hql, final Object...values){
// logger.info(hql);
// return getHibernateTemplate().find(hql, values);
// }
public <T> List<T> findByPage(Class<T> clazz, final int start, final int limit, final String where, final Serializable... values){
String hql = "from " + clazz.getName() + " as e";
if(where!=null&&where.length()>0){
hql += " where " + where;
}
final String fHql = hql;
return getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query q = session.createQuery(fHql);
if(values!=null&&values.length>0){
for(int i=0; i<values.length; i++){
q.setParameter(i, values[i]);
}
}
q.setFirstResult(start).setMaxResults(limit);
return q.list();
}
});
}
public <T> List<T> find(Class<T> clazz, final String where, final Serializable... values){
String hql = "from " + clazz.getSimpleName()+" as e";
if(where!=null&&where.length()>0){
hql += " where " + where;
}
return getHibernateTemplate().find(hql, values);
}
public long getTotalCountByHql(Class<?> clazz, final String where, final Serializable... values) throws Exception {
String hql = "select count(*) from " + clazz.getSimpleName()+" as e";
if(where!=null&&where.length()>0){
hql += " where " + where;
}
List<Number> cs = getHibernateTemplate().find(hql, values);
if(cs!=null&&cs.size()>0){
Number n = cs.get(0);
return n.longValue();
}
return 0;
}
public long getTotalCount(Class<?> clazz, final String where, final Serializable... values) throws Exception {
String sql = "select count(1) as c from " + clazz.getSimpleName() + " e";
if(where!=null&&where.length()>0){
sql += " where " + where;
}
return getFirstLong(sql, values);
}
public long getTotalCount(String sql, final Serializable... values) throws Exception {
return getFirstLong(sql, values).longValue();
}
public Object[] findUnique(final String sql, List<String>params, List<Type>types, final Serializable...values) {
Session sess = getMySession();
logger.debug("------findUnique.getSession()! sess="+sess.hashCode());
SQLQuery query = sess.createSQLQuery(sql);
for(int j=0; j<params.size(); j++){
query.addScalar(params.get(j), types.get(j));
}
if(values!=null&&values.length>0){
for(int i=0; i<values.length; i++){
query.setParameter(i, values[i]);
}
}
query.setMaxResults(1);
List<?> list = query.list();
if(list==null||list.size()==0){
return null;
}
Object obj = list.get(0);
if(obj==null){
return null;
}
logger.debug("obj.type="+obj.getClass().getName());
if(!obj.getClass().isArray()){//如果返回值不是数组,则要进行相关的处理
if(obj instanceof Number){
if(obj instanceof Long){
return new Long[]{(Long)(obj)};
}
if(obj instanceof Integer){
return new Long[]{new Long((Integer)obj)};
}
return new Number[]{(Number)obj};
}
return new Object[]{obj};
}
return (Object[])obj;
}
public List<Object[]> find(final String sql, List<String>params, List<Type>types, final Serializable... values) {
Session sess = getMySession();
logger.debug("------find.getSession()! sess="+sess.hashCode());
SQLQuery query = sess.createSQLQuery(sql);
for(int j=0; j<params.size(); j++){
query.addScalar(params.get(j), types.get(j));
}
if(values!=null&&values.length>0){
for(int i=0; i<values.length; i++){
query.setParameter(i, values[i]);
}
}
return query.list();
}
public long getNextId(String sequence) throws Exception{
String sql = "select "+sequence+".nextval as nextid from dual";
Session sess = getMySession();
logger.debug("------generateId.getSession()! sess="+sess.hashCode());
SQLQuery query = sess.createSQLQuery(sql);
query.addScalar("nextid", Hibernate.LONG);
List<?> list = query.list();
if(list==null||list.size()==0){
return -1L;
}
Object obj = list.get(0);
logger.debug("obj.type="+obj.getClass().getName());
if(obj instanceof Number){
return ((Number)obj).longValue();
}
return -1L;
}
public boolean exists(String sql, final Object...values) throws Exception{
Session sess = getMySession();
logger.debug("------exists.getSession()! sess="+sess.hashCode());
SQLQuery query = sess.createSQLQuery(sql);
for(int i=0; i<values.length; i++){
query.setParameter(i, values[i]);
}
List<?> list = query.list();
if(list==null||list.size()==0){
return false;
}
return true;
}
}
发表评论
-
birt db2 查不到结果集 报错
2011-09-07 15:22 4089在Eclipse 里预览时报这个错误。就是因为没有值,rs.n ... -
birt db2 查不到结果集 报错
2011-09-07 15:20 2837根据条件没有查询到结果,就是结果集是0的情况。错误信息:The ... -
通用的DAO查询,常见方法集合
2011-07-02 22:32 1254import java.io.*;import java.sq ... -
Java类型、Hibernate类型、标准sql类型对应表
2010-11-20 09:46 1387核心提示:Java数据类型,Hibernate数据类型,标 ... -
Hibernate 数据库操作 模板基类 GenericDao
2010-11-18 19:21 1425package com.ddhome.dao; import ... -
Hibernate 数据库操作 模板基类 实现类GenericHibernateDao
2010-11-18 19:20 806package com.ddhome.dao.hibernat ... -
c3p0、dbcp、proxool、BoneCP比较
2010-11-12 01:41 17161 c3p0、dbcp、proxool、BoneCP比较 1. ...
相关推荐
4. 查询(Find):包括根据ID获取单个对象的`get()`方法,以及查询所有对象的`list()`方法。 5. 分页查询(Paging):提供分页查询功能,通常结合"Page"类使用。 接下来是"Page"类。在大型应用中,为了提高用户体验...
在这个接口中,我们可以定义一个分页查询的方法,接收页码和每页大小作为参数,并返回一个包含结果的集合和总记录数。 分页功能的实现通常涉及数据库的COUNT和LIMIT/OFFSET操作。在Hibernate中,可以使用Criteria ...
- 可以通过配置文件控制是否生成通用的 CRUD 方法,以及生成的实体类是否包含序列化标识等。 - MBG的运行可能会覆盖已存在的文件,因此在实际使用时要注意备份。 总结,MyBatis Generator是MyBatis框架下的一个重要...
在论坛应用中,DAO类负责与数据库进行交互,执行SQL查询和更新操作,如添加新用户、发布帖子等。DAO使得代码更易测试和维护,因为它隐藏了数据库相关的复杂性。 【JSTL标签库】: JSTL是JavaServer Pages的标准标签...
CodeSmith模板集合提供的对象持久化模板,可能包括了数据访问层(DAL)的生成,例如创建DAO(数据访问对象)类、实体类以及CRUD(创建、读取、更新、删除)操作的方法。这些模板能够自动生成与数据库表对应的C#类,...
《CommonSQLDAO类详解》 在Java开发中,数据访问对象(DAO)模式是一种常见的设计模式,...然而,为了保持代码的灵活性和可维护性,应当避免过度依赖通用DAO,对于有特殊需求的数据操作,仍然建议创建特定的DAO子类。
通常,开发者会创建一个通用的分页Action,结合DAO层进行数据库查询,然后在视图层展示分页结果。 3. **Struts2配置文件** Struts2的核心配置文件是struts.xml,它定义了Action、ActionMapping、结果类型、拦截器...
VB提供了多种方式来连接和操作数据库,如DAO(Data Access Objects)、RDO(Remote Data Objects)、ADO(ActiveX Data Objects)等。本资源“VB数据库编程之通用源代码”包含了已经过测试并成功编译的源代码,旨在...
在数据库应用开发中,ADO(ActiveX Data Objects)和DAO(Data Access Objects)是两种常见的数据访问技术。本文将深入探讨如何使用ADO进行数据库开发,并对比性地提及DAO的使用方式,以帮助开发者理解这两种技术的...
在这个场景中,"BaseDao"通常是一个基类,它包含了通用的数据库操作方法,可以被各个特定的DAO(Data Access Object)继承,以实现业务逻辑中的数据访问。 1. **BaseDao**:BaseDao是DAO层的基类,它的设计目的是...
在Java开发中,`BaseDao` 是一个常见的设计模式,用于提供数据访问对象(DAO)的基础功能,方便其他业务逻辑层或数据访问层组件进行数据库操作。本篇将深入探讨如何利用注解和反射机制来封装一个支持一对多查询的 `...
3. **整合Struts**:在Action类中,我们接收用户的请求参数(如页码和每页大小),然后调用Service层的方法,Service层再调用Dao层的分页查询方法。Action将查询结果传递给对应的ActionForm或VO,最后由Struts的...
- **简化**:相比DAO和RDO,提供了更少的对象,更多的属性和方法。 - **兼容性**:支持广泛的ODBC数据源,包括SQL Server、Oracle、Access等。 - **易用性**:API设计友好,易于学习和使用。 - **应用**:适用于...
总之,`BaseDao`接口及其实现是Java中数据访问层设计的一个常见模式,用于封装数据库操作,提供通用的方法供业务逻辑调用。这样的设计有助于减少代码重复,提高代码质量,同时也便于更换不同的数据库引擎。
例如,你可以创建一个泛型BaseMapper接口,包含通用的CRUD方法,然后每个具体的Mapper接口继承这个BaseMapper,指定具体的实体类型。这样,即使数据库表结构变化,只需修改对应的Mapper,无需改动Service层和...
14.1 理解ActiveX Windows通用控件 433 14.1.1 使用TabStrip控件 434 14.1.2 使用Access选项卡和使用ActiveX TabStrip控件的区别 436 14.2 ImageList控件详述 438 14.2.1 在设计阶段添加图像 438 14.2.2 ...
14.1 理解ActiveX Windows通用控件 433 14.1.1 使用TabStrip控件 434 14.1.2 使用Access选项卡和使用ActiveX TabStrip控件的区别 436 14.2 ImageList控件详述 438 14.2.1 在设计阶段添加图像 438 14.2.2 在运行...
在这个项目中,开发者可能封装了一些通用的DAO(Data Access Object)类,提供简单易用的方法来执行CRUD(创建、读取、更新、删除)操作,以适应不同的数据库系统,如MySQL、Oracle等。 3. **日志记录 (Log)**:...
数据库访问技术随着信息技术的发展而不断进步,目前常见的数据库访问接口包括数据库访问对象(DAO)、远程数据库对象(RDO)以及ActiveX数据对象(ADO)。其中,ADO因其高效性与灵活性成为最流行的数据访问技术,被...