package com.zyytest.dao.impl.common;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;
import java.util.Map;
import org.hibernate.Criteria;
import org.hibernate.Hibernate;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.zyytest.dao.common.BaseDao;
import com.zyytest.model.SystemContext;
import com.zyytest.model.common.PageModel;
/**
* 使用Hibernate实现的泛型通用Dao
*/
@SuppressWarnings("unchecked")
@Repository
public abstract class BaseDaoImpl<T> implements BaseDao<T> {
/** 当前操作到的实体类的类型信息实例 */
protected Class<T> clazz;
protected Serializable oid;
/** Session工厂 */
protected SessionFactory sessionFactory;
/**构造方法*/
public BaseDaoImpl(){
//通过反射机制获取T的类型信息
ParameterizedType type = (ParameterizedType)this.getClass().getGenericSuperclass();
this.clazz = (Class)type.getActualTypeArguments()[0];
}
/** 取得SessionFactory对象 */
protected SessionFactory getSessionFactory() {
return sessionFactory;
}
@Autowired
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
this.oid = this.getId();
}
/** 取得当前Session */
protected Session getSession(){
return this.sessionFactory.getCurrentSession();
}
////////////////////////////// CRUD操作 //////////////////////////////////////
/* (non-Javadoc)
* @see com.tjitcast.dao.base.GenericDao#add(java.lang.Object)
*/
public void add(T entity) {
getSession().save(entity);
}
/* (non-Javadoc)
* @see com.tjitcast.dao.base.GenericDao#delete(java.lang.Object)
*/
public void delete(T entity) {
getSession().delete(entity);
}
/* (non-Javadoc)
* @see com.tjitcast.dao.base.GenericDao#delete(java.io.Serializable)
*/
public void delete(Serializable id) {
getSession().delete(getSession().load(clazz, id));
}
/* (non-Javadoc)
* @see com.tjitcast.dao.base.GenericDao#update(java.lang.Object)
*/
public void update(T entity) {
getSession().update(entity);
getSession().merge(entity);
}
/* (non-Javadoc)
* @see com.tjitcast.dao.base.GenericDao#get(java.io.Serializable)
*/
public T get(Serializable id) {
return (T)getSession().get(clazz, id);
}
/* (non-Javadoc)
* @see com.tjitcast.dao.base.GenericDao#load(java.io.Serializable)
*/
public T load(Serializable id) {
return (T)getSession().load(clazz, id);
}
//当确定返回的实例只有一个或者null时 用uniqueResult()方法
public long countResult() {
long result = 0;
Long count = (Long)createQuery("select count(t) from "+ clazz.getSimpleName() + " t").uniqueResult();
if(count != null){
result = count.longValue();
}
return result;
}
public int countHqlResult(String hql, Object... values) {
int result = 0;
result = Integer.parseInt(createQuery(hql, values).uniqueResult().toString());
return result;
}
/* (non-Javadoc)
* @see com.tjitcast.dao.base.GenericDao#getAll()
*/
public List<T> findAll() {
return createCriteria().list();
}
public List<T> findAll(String orderByProperty, boolean desc){
Criteria c = createCriteria();
if(desc){
c.addOrder(Order.desc(orderByProperty));
}else{
c.addOrder(Order.asc(orderByProperty));
}
return c.list();
}
/* (non-Javadoc)
* @see com.tjitcast.dao.base.GenericDao#getByPager(int, int)
*/
public PageModel<T> findByPager() {
int pageSize = SystemContext.getSize();
int pageNo = SystemContext.getOffset();
PageModel<T> pm = new PageModel<T>();
pm.setPageNo(pageNo);
pm.setPageSize(pageSize);
StringBuilder sb = new StringBuilder();
sb.append("select count(").append(oid).append(") from ").append(clazz.getSimpleName());
Long count = (Long)createQuery(sb.toString()).uniqueResult();
if(count !=null && count.intValue() > 0){
pm.setRecordCount(count.intValue());
List<T> list = createCriteria()
.setMaxResults(pageSize)
.setFirstResult(pageNo)
.list();
pm.setDatas(list);
}
return pm;
}
public PageModel<T> findByPager(int pageNo, int pageSize, String orderByProperty, boolean desc){
PageModel<T> pm = new PageModel<T>();
pm.setPageNo(pageNo);
pm.setPageSize(pageSize);
StringBuilder sb = new StringBuilder();
sb.append("select count(").append(oid).append(") from ").append(clazz.getSimpleName());
Long count = (Long)createQuery(sb.toString()).uniqueResult();
if(count !=null && count.intValue() > 0){
pm.setRecordCount(count.intValue());
Criteria c = createCriteria();
if(desc){
c.addOrder(Order.desc(orderByProperty));
}else{
c.addOrder(Order.asc(orderByProperty));
}
List<T> list = c.setMaxResults(pageSize)
.setFirstResult((pageNo - 1)*pageSize)
.list();
pm.setDatas(list);
}
return pm;
}
public List<T> find(String hql, Object... values) {
return createQuery(hql, values).list();
}
public List<Object[]> find2(String hql, Object... values){
return createQuery(hql, values).list();
}
public List<T> find(String hql, Map<String,?> values) {
return createQuery(hql, values).list();
}
public PageModel<T> find(int pageNo, int pageSize, String hql, Map<String,?> values) {
PageModel<T> pm = new PageModel<T>();
pm.setPageNo(pageNo);
pm.setPageSize(pageSize);
StringBuilder sb = new StringBuilder(hql);
sb.delete(0, sb.indexOf("from")+4)
.delete(sb.indexOf(" order by"),sb.length())
.insert(0, ")")
.insert(0, oid)
.insert(0, "select count(");
Long count = (Long)createQuery(sb.toString(), values).uniqueResult();
if(count !=null && count.intValue() > 0){
pm.setRecordCount(count.intValue());
List<T> list = createQuery(hql, values)
.setMaxResults(pageSize)
.setFirstResult((pageNo - 1)*pageSize)
.list();
pm.setDatas(list);
}
return pm;
}
public PageModel<T> find(int pageNo, int pageSize, String hql, Object... values) {
PageModel<T> pm = new PageModel<T>();
pm.setPageNo(pageNo);
pm.setPageSize(pageSize);
StringBuilder sb = new StringBuilder(hql);
sb.delete(0, sb.indexOf("from"))
.insert(0, "select count(*) ");
Long count = (Long)createQuery(sb.toString(), values).uniqueResult();
if(count !=null && count.intValue() > 0){
pm.setRecordCount(count.intValue());
List<T> list = createQuery(hql, values)
.setMaxResults(pageSize)
.setFirstResult((pageNo - 1)*pageSize)
.list();
pm.setDatas(list);
}
return pm;
}
public T findUniqueResult(String hql, Object... values) {
return (T)createQuery(hql, values).uniqueResult();
}
public T findUniqueResult(String hql, Map<String,?> values) {
return (T)createQuery(hql, values).uniqueResult();
}
////////////////////////////// 批量操作 //////////////////////////////////////
public List<T> getBatch(Serializable... ids) {
int length = ids == null ? 0 : ids.length;
StringBuilder sb = new StringBuilder("from ");
sb.append(clazz.getSimpleName());
for(int i = 0 ; i < length; i++){
if(i == 0){
sb.append(" where ").append(oid).append(" in(");
}
if(i > 0){
sb.append(",");
}
sb.append(ids[i]);
if(i == length -1){
sb.append(")");
}
}
return createQuery(sb.toString()).list();
}
/**
* 执行HQL进行批量修改/删除操作.
* @param values 命名参�
没有合适的资源?快使用搜索试试~ 我知道了~
SpringMVC、Spring、Hibernate经典demo
共111个文件
jar:44个
class:18个
java:18个
5星 · 超过95%的资源 需积分: 9 102 下载量 182 浏览量
2014-12-15
10:17:46
上传
评论 4
收藏 14.62MB ZIP 举报
温馨提示
SpringMVC、Spring、Hibernate经典demo,数据库:msyql,里面包含源码,可以直接运行,用增、删、改、查和登录功能,有效验功能,dao层和service都用用到泛型写的,非常值得参考~,希望下载的朋友都能学到SpringMVC的技巧。
资源推荐
资源详情
资源评论
收起资源包目录
SpringMVC、Spring、Hibernate经典demo (111个子文件)
BaseDaoImpl.class 12KB
BaseService.class 4KB
BlogController.class 4KB
UserController.class 4KB
User.class 2KB
BaseDao.class 2KB
LoginController.class 2KB
PageModel.class 2KB
SystemContextFilter.class 2KB
UserService.class 2KB
Blog.class 1KB
SystemContext.class 1KB
UserDaoImpl.class 902B
BlogService.class 779B
UserException.class 742B
BlogDaoImpl.class 555B
UserDao.class 316B
BlogDao.class 248B
.classpath 853B
org.eclipse.wst.common.component 532B
org.eclipse.wst.jsdt.ui.superType.container 49B
main.css 43B
hibernate-core-4.1.5.SP1.jar 4.24MB
aspectjweaver.jar 1.47MB
org.springframework.context-3.1.3.RELEASE.jar 818KB
mysql-connector-java-5.1.12-bin.jar 716KB
javassist-3.15.0-GA.jar 633KB
c3p0-0.9.1.2.jar 596KB
org.springframework.beans-3.1.3.RELEASE.jar 579KB
org.springframework.web.servlet-3.1.3.RELEASE.jar 564KB
commons-collections-3.1.jar 546KB
org.springframework.web-3.1.3.RELEASE.jar 542KB
log4j-1.2.16.jar 470KB
org.springframework.core-3.1.3.RELEASE.jar 441KB
antlr-2.7.7.jar 435KB
jstl-1.2.jar 405KB
org.springframework.jdbc-3.1.3.RELEASE.jar 395KB
org.springframework.orm-3.1.3.RELEASE.jar 372KB
org.springframework.aop-3.1.3.RELEASE.jar 325KB
com.springsource.net.sf.cglib-2.2.0.jar 319KB
dom4j-1.6.1.jar 307KB
bean-validator.jar 297KB
org.springframework.transaction-3.1.3.RELEASE.jar 239KB
org.springframework.test-3.1.3.RELEASE.jar 227KB
org.springframework.jms-3.1.3.RELEASE.jar 194KB
org.springframework.web.portlet-3.1.3.RELEASE.jar 186KB
org.springframework.expression-3.1.3.RELEASE.jar 174KB
aspectjrt.jar 112KB
org.springframework.context.support-3.1.3.RELEASE.jar 105KB
hibernate-jpa-2.0-api-1.0.1.Final.jar 100KB
hibernate-commons-annotations-4.0.1.Final.jar 79KB
org.springframework.oxm-3.1.3.RELEASE.jar 71KB
commons-logging-1.1.1.jar 60KB
jboss-logging-3.1.0.GA.jar 59KB
org.springframework.asm-3.1.3.RELEASE.jar 52KB
org.springframework.aspects-3.1.3.RELEASE.jar 50KB
pager-taglib.jar 46KB
hibernate-c3p0-4.1.5.SP1.jar 41KB
org.springframework.web.struts-3.1.3.RELEASE.jar 30KB
slf4j-api-1.6.1.jar 25KB
org.springframework.instrument.tomcat-3.1.3.RELEASE.jar 11KB
jboss-transaction-api_1.1_spec-1.0.0.Final.jar 11KB
slf4j-log4j12-1.6.1.jar 10KB
org.springframework.instrument-3.1.3.RELEASE.jar 7KB
aopalliance.jar 4KB
mypager-1.0-GA.jar 4KB
BaseDaoImpl.java 10KB
BlogController.java 3KB
UserController.java 2KB
BaseService.java 2KB
User.java 1KB
Blog.java 1KB
BaseDao.java 1KB
LoginController.java 1KB
PageModel.java 1KB
SystemContextFilter.java 1KB
UserService.java 1KB
BlogService.java 897B
SystemContext.java 684B
BlogDaoImpl.java 679B
UserException.java 527B
BlogDao.java 505B
UserDaoImpl.java 414B
UserDao.java 199B
.jsdtscope 503B
list.jsp 2KB
list.jsp 2KB
pager.jsp 923B
add.jsp 883B
add.jsp 856B
update.jsp 819B
update.jsp 793B
login.jsp 690B
show.jsp 587B
error.jsp 436B
MANIFEST.MF 39B
org.eclipse.wst.jsdt.ui.superType.name 6B
org.eclipse.jdt.core.prefs 670B
.project 1KB
log4j.properties 917B
共 111 条
- 1
- 2
资源评论
- xujingtaoa2016-06-07经典就谈不上了。根本看不懂,不够详细。代码还有小问题需要修改
- sailinger_002015-01-15看了下配置,可以借鉴
- kks012015-01-08没有给数据库代码。。。比较干净的一个demo,还可以把
- CarpeDiem2018-05-24还可以,功能蛮全面的,感谢分享
飞哥SS
- 粉丝: 109
- 资源: 14
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功