package com.cock.bos.dao.base.impl;
import com.cock.bos.dao.base.IBaseDao;
import com.cock.bos.utils.PageBean;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Projections;
import org.hibernate.query.Query;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
import javax.annotation.Resource;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
/**
* 持久层通用实现
*
* @param <T>
*/
public class BaseDaoImpl<T> extends HibernateDaoSupport implements IBaseDao<T> {
//某个实体的类型
private Class<T> entityClass;
//根据类型注入spring工厂中的会话工厂对象sessionFactory
@Resource
public void setMySessionFactory(SessionFactory sessionFactory) {
super.setSessionFactory(sessionFactory);
}
//在父类(BaseDaoImpl)的构造方法中动态获得entityClass
public BaseDaoImpl() {
ParameterizedType superclass = (ParameterizedType) this.getClass().getGenericSuperclass();
//获得父类上声明的泛型数组
Type[] actualTypeArguments = superclass.getActualTypeArguments();
entityClass = (Class<T>) actualTypeArguments[0];
}
@Override
public void save(T entity) {
this.getHibernateTemplate().save(entity);
}
@Override
public void delete(T entity) {
this.getHibernateTemplate().delete(entity);
}
@Override
public void update(T entity) {
this.getHibernateTemplate().update(entity);
}
@Override
public T findById(Serializable id) {
return this.getHibernateTemplate().get(entityClass, id);
}
@Override
public List<T> findAll() {
String hql = "FROM " + entityClass.getSimpleName();
return (List<T>) this.getHibernateTemplate().find(hql);
}
/**
* 执行更新
*
* @param queryName
* @param objects
*/
@Override
public void executeUpdate(String queryName, Object... objects) {
Session session = this.getSessionFactory().getCurrentSession();
Query query = session.getNamedQuery(queryName);
int i = 0;
for (Object object : objects) {
//为HQL语句中的?赋值
query.setParameter(i++, object);
}
//执行更新
query.executeUpdate();
}
/**
* 通用分页查询方法
*
* @param pageBean
*/
@Override
public void pageQuery(PageBean pageBean) {
int currentPage = pageBean.getCurrentPage();
int pageSize = pageBean.getPageSize();
DetachedCriteria detachedCriteria = pageBean.getDetachedCriteria();
//查询total---总数据量
detachedCriteria.setProjection(Projections.rowCount());
//指定hibernate框架发出sql的形式----》select count(*) from bc_staff;
List<Long> countList = (List<Long>) this.getHibernateTemplate().findByCriteria(detachedCriteria);
Long count = countList.get(0);
pageBean.setTotal(count.intValue());
//查询rows---当前页需要展示的数据集合
//指定hibernate框架发出sql的形式----》select * from bc_staff;
detachedCriteria.setProjection(null);
int firstResult = (currentPage - 1) * pageSize;
int maxResult = pageSize;
List rows = this.getHibernateTemplate().findByCriteria(detachedCriteria, firstResult, maxResult);
pageBean.setRows(rows);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
BOS物流项目[IDEA创建Maven项目,SSH框架,MySQL]-bos-parent.zip (528个子文件)
easyui.css 44KB
easyui.css 44KB
easyui.css 43KB
easyui.css 43KB
easyui.css 40KB
style.css 22KB
tabs.css 8KB
tabs.css 8KB
tabs.css 8KB
tabs.css 8KB
style_grey.css 7KB
tabs.css 6KB
zTreeStyle.css 6KB
datagrid.css 5KB
datagrid.css 5KB
datagrid.css 5KB
datagrid.css 5KB
datagrid.css 4KB
calendar.css 3KB
calendar.css 3KB
calendar.css 3KB
calendar.css 3KB
calendar.css 3KB
tree.css 3KB
tree.css 3KB
tree.css 3KB
tree.css 3KB
tree.css 3KB
default.css 3KB
linkbutton.css 3KB
linkbutton.css 3KB
linkbutton.css 3KB
panel.css 3KB
panel.css 3KB
panel.css 2KB
panel.css 2KB
linkbutton.css 2KB
linkbutton.css 2KB
panel.css 2KB
menu.css 2KB
menu.css 2KB
menu.css 2KB
menu.css 2KB
menu.css 2KB
window.css 2KB
window.css 2KB
window.css 2KB
window.css 2KB
layout.css 2KB
layout.css 2KB
layout.css 2KB
layout.css 2KB
layout.css 2KB
icon.css 2KB
window.css 2KB
slider.css 2KB
slider.css 2KB
slider.css 2KB
slider.css 2KB
slider.css 2KB
searchbox.css 1KB
searchbox.css 1KB
searchbox.css 1KB
searchbox.css 1KB
searchbox.css 1KB
pagination.css 1KB
pagination.css 1KB
pagination.css 1KB
pagination.css 1KB
pagination.css 1KB
validatebox.css 1KB
validatebox.css 1KB
validatebox.css 1KB
validatebox.css 1KB
validatebox.css 1KB
spinner.css 1KB
spinner.css 1KB
spinner.css 1KB
spinner.css 1KB
spinner.css 1KB
combo.css 1017B
combo.css 1017B
combo.css 1017B
combo.css 1008B
combo.css 1005B
splitbutton.css 962B
splitbutton.css 959B
splitbutton.css 956B
splitbutton.css 956B
splitbutton.css 953B
accordion.css 838B
accordion.css 835B
accordion.css 835B
accordion.css 829B
accordion.css 829B
messager.css 761B
messager.css 761B
messager.css 761B
messager.css 758B
messager.css 758B
共 528 条
- 1
- 2
- 3
- 4
- 5
- 6
资源评论
普通网友
- 粉丝: 1127
- 资源: 5292
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- java全大撒大撒大苏打
- pca20241222
- LabVIEW实现LoRa通信【LabVIEW物联网实战】
- CS-TY4-4WCN-转-公版-XP1-8B4WF-wifi8188
- 计算机网络期末复习资料(课后题答案+往年考试题+复习提纲+知识点总结)
- 从零学习自动驾驶Lattice规划算法(下) 轨迹采样 轨迹评估 碰撞检测 包含matlab代码实现和cpp代码实现,方便对照学习 cpp代码用vs2019编译 依赖qt5.15做可视化 更新:
- 风光储、风光储并网直流微电网simulink仿真模型 系统由光伏发电系统、风力发电系统、混合储能系统(可单独储能系统)、逆变器VSR+大电网构成 光伏系统采用扰动观察法实现mppt控
- (180014016)pycairo-1.18.2-cp35-cp35m-win32.whl.rar
- (180014046)pycairo-1.21.0-cp311-cp311-win32.whl.rar
- DS-7808-HS-HF / DS-7808-HW-E1
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功