- 浏览: 339018 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
孙艳霞111:
java.lang.IllegalStateException: Argument [RedirectAttributes] is of type Model -
llnyxxzj:
如果问题未解决可以看看http://blog.360chwl. ...
Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bea -
u013810758:
楼主求帮助类 ReflectionUtils,Hibernat ...
BaseDao可以这样设计 -
rankx:
你好,楼主可否发一份 ReflectionUtils,Hibe ...
BaseDao可以这样设计
package org.ks4j.orm.hibernate; import java.util.List; import java.util.Map; import javax.annotation.Resource; import javax.persistence.MappedSuperclass; import org.hibernate.Criteria; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.criterion.Criterion; import org.hibernate.criterion.Restrictions; import org.ks4j.orm.Compositor; import org.ks4j.orm.Filtration; import org.ks4j.orm.PageData; import org.ks4j.utils.HibernateUtils; import org.ks4j.utils.ReflectionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.util.Assert; /** * dao基类. * 1:该类封装了最常见数据库操作的方法,你可以继承该类,添加自己喜欢的方法 * 2:当你有多个sessionFactory时,你也可以在你的子类中重写setSessionFactory()方法 * * * @param <T> 实体类类型 */ @SuppressWarnings("unchecked") @MappedSuperclass public class BaseDao<T> { protected Logger logger = LoggerFactory.getLogger(getClass()); protected SessionFactory sessionFactory; protected Class<T> entityClass; //操作SQL语句的模板 private JdbcTemplate jdbcTemplate; //注入Spring JdbcTemplate 对象 @Resource(name="jdbcTemplate") public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } /** * 构造方法 */ public BaseDao() { this.entityClass = ReflectionUtils.getSuperClassGenricType(getClass()); } /** * 采用@Resource(name="xxx")按名称注入SessionFactory, 当有多个SesionFactory的时候Override本函数. */ @Resource public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } /** * 取得Session. */ public Session getSession() { return sessionFactory.getCurrentSession(); } //-------------------------------------------------------------------------------------------------- /** * 新增对象. */ public void save(T entity) { Assert.notNull(entity, "entity不能为空"); getSession().save(entity); logger.debug("save entity: {}", entity); } /** * 修改对象. */ public void update(T entity) { Assert.notNull(entity, "entity不能为空"); getSession().update(entity); logger.debug("update entity: {}", entity); } /** * 删除对象. */ public void delete(T entity) { Assert.notNull(entity, "entity不能为空"); getSession().delete(entity); logger.debug("delete entity: {}", entity); } /** * 删除对象. */ public void delete(String id) { delete(findById(id)); logger.debug("delete entity {},id is {}", entityClass.getSimpleName(), id); } /** * 按id获取对象. */ public T findById(String id) { Assert.notNull(id, "id不能为空"); return (T) getSession().get(entityClass, id); } /** * 按属性查找唯一对象,匹配方式为相等. */ public T find(String fieldName, Object fieldValue) { Assert.hasText(fieldName, "fieldName不能为空"); Criterion criterion = Restrictions.eq(fieldName, fieldValue); return (T) HibernateUtils.createCriteria(getSession(), entityClass, criterion).uniqueResult(); } /** * 按属性查找对象列表,匹配方式为相等. */ public List<T> findList(String fieldName, Object fieldValue) { Assert.hasText(fieldName, "fieldName不能为空"); Criterion criterion = Restrictions.eq(fieldName, fieldValue); return HibernateUtils.createCriteria(getSession(), entityClass, criterion).list(); } /** * 按照过滤条件对象查找对象列表. */ public List<T> findList(Filtration... filtrations) { Criteria criteria = HibernateUtils.createCriteria(getSession(), entityClass); //设置过滤条件 criteria = HibernateUtils.setFiltrationParameter(criteria, filtrations); return criteria.list(); } /** * 按照过滤条件对象查找对象列表. */ public List<T> findList(List<Filtration> filtrationList) { Criteria criteria = HibernateUtils.createCriteria(getSession(), entityClass); //设置过滤条件 criteria = HibernateUtils.setFiltrationParameter(criteria, filtrationList); return criteria.list(); } /** * 按照过滤条件对象查找对象列表,支持排序. */ public List<T> findList(Compositor compositor, Filtration... filtrations) { Criteria criteria = HibernateUtils.createCriteria(getSession(), entityClass); //设置过滤条件 criteria = HibernateUtils.setFiltrationParameter(criteria, filtrations); //设置排序 criteria = HibernateUtils.setCompositorParameter(criteria, compositor); return criteria.list(); } /** * 按照过滤条件对象查找对象列表,支持排序. */ public List<T> findList(Compositor compositor, List<Filtration> filtrationList) { Criteria criteria = HibernateUtils.createCriteria(getSession(), entityClass); //设置过滤条件 criteria = HibernateUtils.setFiltrationParameter(criteria, filtrationList); //设置排序 criteria = HibernateUtils.setCompositorParameter(criteria, compositor); return criteria.list(); } /** * 获取全部对象. */ public List<T> findAll() { List<Map<String,Object>> list = jdbcTemplate.queryForList("select * from sys_role"); for(Map item:list){ System.out.println(item.toString()); } return findList(); } /** * 获取全部对象,支持排序. */ public List<T> findAll(Compositor compositor) { return findList(compositor); } /** * 分页查询. */ public PageData<T> find(PageData<T> pageData) { Assert.notNull(pageData, "pageData不能为空"); Criteria criteria = HibernateUtils.createCriteria(getSession(), entityClass); HibernateUtils.setParameter(criteria, pageData); pageData.setResult(criteria.list()); // jdbcTemplate.qu return pageData; } /** * 根据分页查询. */ // c.name=:name and c.password=:password .setEntity("name") public PageData<T> find(String hql, Map<String, ?> values, PageData<T> pageData) { Assert.notNull(pageData, "pageData不能为空"); Query query = HibernateUtils.createQuery(getSession(), hql, values) .setFirstResult(pageData.getPagination().getCurrentlyPageFirstResoultIndex()) .setMaxResults(pageData.getPagination().getPageSize()); pageData.setResult(query.list()); return pageData; } /** * 按id列表获取对象. */ public List<T> findListByIds(List<String> idList) { if (idList != null && idList.size() >= 1) { Criterion criterion = Restrictions.in("id", idList); return HibernateUtils.createCriteria(getSession(), entityClass, criterion).list(); } else { return null; } } //-------------------------------------------------------------------------------------------------- /** * 按HQL查询唯一对象. * @param hql "from Users where name=? and password=?" * @param values 数量可变的参数,按顺序绑定. * @return */ public <X> X find(String hql, Object... values) { return (X) HibernateUtils.createQuery(getSession(), hql, values).uniqueResult(); } /** * 按HQL查询唯一对象. * @param hql "from Users where name=:name and password=:password" * @param values 命名参数,按名称绑定. * @return */ public <X> X find(String hql, Map<String, ?> values) { return (X) HibernateUtils.createQuery(getSession(), hql, values).uniqueResult(); } /** * 按HQL查询对象列表. * @param hql "from Users where name=? and password=?" * @param values 数量可变的参数,按顺序绑定. * @return */ public <X> List<X> findList(String hql, Object... values) { return HibernateUtils.createQuery(getSession(), hql, values).list(); } /** * 按HQL查询对象列表. * @param hql "from Users where name=:name and password=:password" * @param values 命名参数,按名称绑定. * @return */ public <X> List<X> findList(String hql, Map<String, ?> values) { return HibernateUtils.createQuery(getSession(), hql, values).list(); } /** * 执行HQL进行批量修改/删除操作. * @return 更新记录数. */ public int batchExecute(String hql, Object... values) { return HibernateUtils.createQuery(getSession(), hql, values).executeUpdate(); } /** * 执行HQL进行批量修改/删除操作. * @return 更新记录数. */ public int batchExecute(String hql, Map<String, ?> values) { return HibernateUtils.createQuery(getSession(), hql, values).executeUpdate(); } //-------------------------------------------------------------------------------------------------- /** * 本地SQL查询. * @return 查询List. */ public List find(String sql) { Assert.hasText(sql, "sql不能为空"); return getSession().createSQLQuery(sql).list(); } }
评论
2 楼
u013810758
2014-11-07
楼主求帮助类 ReflectionUtils,HibernateUtils 547717007@qq.com
1 楼
rankx
2013-07-04
你好,楼主可否发一份 ReflectionUtils,HibernateUtils
发表评论
-
toString
2013-09-28 11:00 923implements java.lang.Cloneabl ... -
匿名内部类 是否可以继承其它类,是否可以实现接口
2013-06-25 11:20 1559Inner Class(内部类)定义在类中的类。 Nested ... -
JAVA中的接口和抽象类(转)
2013-06-25 11:16 877在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是 ... -
【解惑】领略Java内部类的“内部”
2013-06-25 10:57 897标签:Java 职场 休闲 内 ... -
Java内部类的使用小结
2013-06-25 10:51 1036标签:Java 内部类 休闲 职场 内部类是指在一个外部类的内 ... -
java内部类的作用分析
2013-06-25 10:16 980提起Java内部类(Inner Class)可能很多人不太熟悉 ... -
java中Class.forName的作用
2013-06-20 11:36 1122http://www.cnblogs.com/pyrmkj/a ... -
编写你自己的单点登录(SSO)服务
2013-06-18 16:15 1022http://blog.csdn.net/javachanne ... -
Windows和Linux环境下Memcached安装与配置
2013-06-08 14:32 1014来源http://www.cnblogs.com/xd502d ... -
windows下安装memcached
2013-06-08 11:52 952来源http://kevin-gzhz.iteye.c ... -
分布式缓存系统Memcached学习心得(转)
2013-06-08 10:40 944来源http://www.blogjava.net/sword ... -
Java中的值传递和引用传递
2013-05-24 17:04 938来源http://www.cnblogs.com/clara/ ... -
java中的值传递和引用传递
2013-05-24 16:51 894来源http://www.blogjava.net/jiafa ... -
java自定义注解
2013-05-24 14:23 4912来源http://www.cnblogs.com/xd502d ... -
【状态保持】会话状态Session解析以及原理分析
2013-05-21 17:16 1047来源http://www.cnblogs.com/wl ... -
log4j 详解
2013-05-21 16:16 972http://www.blogjava.net/hwpok/a ... -
静态导入Static import
2013-05-21 11:55 984http://www.cnblogs.com/mengdd/a ... -
Java 可变参数
2013-05-21 11:49 887http://www.cnblogs.com/whgw/arc ... -
java枚举类型
2013-05-21 11:45 1001http://www.cnblogs.com/Fskjb/ar ... -
Struts2数据传输的背后机制:ValueStack(值栈)(转载)
2013-05-17 14:40 1170http://www.blogjava.net/freeman ...
相关推荐
BaseDao是一种设计模式,它通常被用来作为数据库访问对象(DAO)的基础,用于封装数据库的基本CRUD(创建、读取、更新、删除)操作。这种模式可以提高代码复用性,降低业务逻辑与数据访问层的耦合度。 首先,我们来...
2. **BaseDAO设计原理** BaseDAO通常包含一组通用的数据库操作方法,如增删改查(CRUD:Create、Read、Update、Delete)。这些方法由继承BaseDAO的子类调用,实现对特定领域对象的操作。这样,每个具体的DAO只需...
`BaseDAO`是许多项目中常见的一种设计模式,它代表了数据访问对象(Data Access Object)的基础类,用于封装对数据库的通用操作。现在我们来深入探讨`hibernate`中的`BaseDAO`及其相关知识点。 首先,DAO设计模式是...
这样,每个具体的DAO实现类(如`UserDao extends BaseDao<User>`)就可以操作特定的实体类型,而无需重复编写相同的方法。 BaseService则是业务逻辑层的基类,它处理业务规则和事务管理。同样,我们可以利用泛型将...
在BaseDao中,泛型可以用来定义通用的类型参数,比如,使得BaseDao能够处理任何类型的实体对象,而无需为每种实体创建一个新的DAO类。 反射是Java的一个重要特性,它允许运行时动态地获取类的信息并调用其方法。在...
1. **泛型**: BaseDAO通常会使用泛型来定义与特定实体类的关联,这样在具体使用时可以避免类型转换的麻烦。 2. **基本操作**: 包含CRUD(Create, Read, Update, Delete)等基本数据库操作,如insert、update、...
在IT行业中,Spring框架是Java开发中...结合Spring的事务管理和BaseDao设计,可以构建出高效、稳定的Java后端系统。在实际项目中,开发者应根据需求选择合适的事务管理策略和BaseDao实现,以达到最佳的代码结构和性能。
在IT行业中,SSH(Spring、Struts、Hibernate)是一个经典的Java Web开发框架组合,而BaseDao是常用于数据访问层的一个基类设计。本话题主要围绕如何利用SSH框架结合BaseDao实现分页功能来展开。 首先,让我们了解...
这些方法的实现可以使用模板方法设计模式,将一部分通用逻辑放在`BaseDao`中,而具体的SQL语句或者HQL(Hibernate Query Language)则由子类提供。 在实际项目中,`BaseDao`的实现往往需要结合事务管理。例如,当一...
在Java编程语言中,BaseDao(基础数据访问对象)是一个常见的设计模式,它为数据库操作提供了一种统一的接口。BaseDao通常包含了CRUD(创建、读取、更新、删除)的基本方法,使得开发者可以方便地对数据库进行操作,...
BaseDao的设计理念是将数据库操作的核心逻辑进行抽象,减少重复代码,使得开发人员可以更专注于业务逻辑的实现。 首先,BaseDao的核心功能之一是提供CRUD(创建、读取、更新、删除)操作。这些基本方法包括: 1. `...
在Java的持久化框架Hibernate中,BaseDAO(Base Data Access Object)是一种常见的设计模式,用于封装数据库操作,提供一套标准的...理解并熟练运用BaseDAO设计模式,能帮助开发者更好地利用Hibernate进行数据库操作。
学习`jdbcBaseDao`,你需要理解JDBC的工作原理,熟悉SQL语句的编写,同时掌握面向对象设计中的继承概念。实践时,可以创建一个简单的项目,模拟数据库操作,观察`BaseDao`如何简化代码。通过这种方式,你可以更好地...
在IT行业中,SSH(Struts2、...通过这样的设计,开发者可以在不重复编写相同分页代码的情况下,快速实现分页功能,并且由于SSH框架的集成,使得数据访问和业务逻辑的分离更加清晰,提高了代码的可维护性和扩展性。
这样,我们就可以在子类中重写`BaseDao`的某些方法以实现特定的查询逻辑,或者添加新的方法来满足业务需求。 例如,假设我们有一个`User`实体,我们可以创建如下的`UserDao`: ```java public class UserDao ...
#### BaseDAO类的设计与实现 在Spring JDBC中,可以通过继承`JdbcDaoSupport`类来简化代码编写过程。下面将详细分析BaseDAO类的实现原理及其核心方法。 #### 核心方法解析 1. **查询方法(query)** - **方法定义**...
这个类是IT领域中处理数据库操作时经常使用的一种设计模式,它通过封装数据库连接、执行SQL语句、处理结果集以及释放资源等逻辑,来提供一个统一的接口,简化了上层业务代码对数据库的操作。 ### JDBC与BaseDao通用...
BaseDAO.js是这样一个基础框架,它为开发者提供了一个便捷的起点,用于构建自己的DAO类。本文将深入探讨BaseDAO.js的核心概念、结构以及如何利用它进行实际的数据库操作。 首先,我们需要理解DAO的设计思想。DAO...
`BaseDao`类就是这样一个通用的DAO实现,它提供了连接数据库、执行SQL语句、关闭资源等基本功能。 #### 1. 获取数据库连接 getConnection() 此方法用于建立与数据库的连接。首先,通过`ConfigManager`实例获取...
Java MySQL BaseDAO是一个常见的设计模式,用于简化Java应用程序与MySQL数据库之间的交互。在这个模式中,BaseDAO类作为数据访问对象(DAO)的基类,提供了一些通用的方法,使得子类可以方便地执行CRUD(创建、读取...