package com.sshFrame.zero.dao;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import javax.persistence.Id;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Example;
import org.springframework.beans.factory.annotation.Autowired;
/**
* 基于hibernate的BaseDao
* Spring3对Hibernate4已经没有了HibernateDaoSupport和HibernateTemplate的支持,使用了原生态的API
* @author 雪精灵
*
* @param <T>
*/
public class BaseDao<T extends Serializable> {
@Autowired
private SessionFactory sessionFactory;
//当前泛型类
@SuppressWarnings("rawtypes")
private Class entityClass;
//当前主键名称
private String pkname;
private final String HQL_LIST_ALL;
private final String HQL_COUNT_ALL;
@SuppressWarnings("rawtypes")
public Class getEntityClass() {
return entityClass;
}
@SuppressWarnings("rawtypes")
public void setEntityClass(Class entityClass) {
this.entityClass = entityClass;
}
@SuppressWarnings("rawtypes")
public BaseDao() {
//获取当前泛型类
Type type = this.getClass().getGenericSuperclass();
if (type.toString().indexOf("BaseDao") != -1) {
ParameterizedType type1 = (ParameterizedType) type;
Type[] types = type1.getActualTypeArguments();
setEntityClass((Class) types[0]);
}else{
type = ((Class)type).getGenericSuperclass();
ParameterizedType type1 = (ParameterizedType) type;
Type[] types = type1.getActualTypeArguments();
setEntityClass((Class) types[0]);
}
getPkname();
HQL_LIST_ALL="from "+this.entityClass.getSimpleName()+" order by "+pkname+" desc";
HQL_COUNT_ALL="select count(*) from "+this.entityClass.getSimpleName();
}
/**
* 获取主键名称
* @return
*/
public String getPkname() {
Field[] fields = this.entityClass.getDeclaredFields();//反射类字段
for (Field field : fields) {
field.isAnnotationPresent(Id.class);
this.pkname=field.getName();
break;
}
return pkname;
}
/**
* 保存实例
*
* @param t
* @throws HibernateException
*/
public void save(T t) throws HibernateException{
Session session=null;
try {
session=sessionFactory.openSession();
session.beginTransaction();
session.save(t);
session.getTransaction().commit();
} catch (HibernateException e) {
e.printStackTrace();
throw new HibernateException(e);
}finally{
session.close();
}
}
/**
* 修改实例
*
* @param t
* @throws HibernateException
*/
public void update(T t) throws HibernateException{
Session session=null;
try {
session=sessionFactory.openSession();
session.beginTransaction();
session.update(t);
session.getTransaction().commit();
} catch (HibernateException e) {
e.printStackTrace();
throw new HibernateException(e);
}finally{
session.close();
}
}
/**
* 删除实例
*
* @param t
* @throws HibernateException
*/
public void delete(T t) throws HibernateException{
Session session=null;
try {
session=sessionFactory.openSession();
session.beginTransaction();
session.delete(t);
session.getTransaction().commit();
} catch (HibernateException e) {
e.printStackTrace();
throw new HibernateException(e);
}finally{
session.close();
}
}
/**
* 获取实例
*
* @param id
* @throws HibernateException
*/
@SuppressWarnings("unchecked")
public T get(Serializable id) throws Exception{
Session session=null;
T t=null;
try {
session=sessionFactory.openSession();
session.beginTransaction();
t=(T) session.get(getEntityClass(), id);
session.getTransaction().commit();
} catch (HibernateException e) {
e.printStackTrace();
throw new HibernateException(e);
}finally{
session.close();
}
return t;
}
/**
* 查询全部
*
* @throws HibernateException
*/
@SuppressWarnings("unchecked")
public List<T> findAll() throws Exception {
List<T> list=null;
Session session=null;
try {
session = sessionFactory.openSession();
session.beginTransaction();
Query query = session.createQuery(HQL_LIST_ALL);
list = query.list();
session.getTransaction().commit();
} catch (HibernateException e) {
e.printStackTrace();
}finally{
session.close();
}
return list;
}
/**
* 查询总数
*
* @throws HibernateException
*/
public Integer findAllCount() throws Exception {
Session session=null;
Integer count=0;
try {
session = sessionFactory.openSession();
session.beginTransaction();
Query query = session.createQuery(HQL_COUNT_ALL);
List<?> list = query.list();
session.getTransaction().commit();
if(list!=null&&!list.isEmpty()){
count=((Integer) list.get(0)).intValue();
}
} catch (HibernateException e) {
e.printStackTrace();
}finally{
session.close();
}
return count;
}
/**
* QBC查询
*
* @param criteria
* @throws HibernateException
*/
@SuppressWarnings("unchecked")
public List<T> findByCriteria(Criteria criteria) throws Exception {
List<T> list=null;
Session session=null;
try {
session = sessionFactory.openSession();
session.beginTransaction();
Criteria criteria1 = session.createCriteria(getEntityClass());
criteria1=criteria;
list = criteria1.list();
session.getTransaction().commit();
} catch (HibernateException e) {
e.printStackTrace();
}finally{
session.close();
}
return list;
}
/**
* QBE查询
*
* @param t
* @throws HibernateException
*/
@SuppressWarnings("unchecked")
public List<T> findByExample(T t) throws Exception {
List<T> list=null;
Session session=null;
Example example = Example.create(t);
try {
session = sessionFactory.openSession();
session.beginTransaction();
Criteria criteria = session.createCriteria(getEntityClass());
criteria.add(example);
list = criteria.list();
session.getTransaction().commit();
} catch (HibernateException e) {
e.printStackTrace();
}finally{
session.close();
}
return list;
}
/**
* HQL查询
*
* @param hql
* @param objects
* @throws HibernateException
*/
@SuppressWarnings("unchecked")
public List<Object[]> findByHql(String hql,final Object...objects) throws Exception{
List<Object[]> list=null;
Session session=null;
try {
session=sessionFactory.openSession();
session.beginTransaction();
Query query = session.createQuery(hql);
for (int i = 0; i < objects.length; i++) {
query.setParameter(i, objects[i]);
}
list = query.list();
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
}finally{
session.close();
}
return list;
}
/**
* SQL查询
*
* @param hql
* @param objects
* @throws HibernateException
*/
@SuppressWarnings("unchecked")
public List<Object[]> findBySql(String sql,final Object...objects){
List<Object[]> list=null;
Session session=null;
try {
session=sessionFactory.openSession();
session.beginTransaction();
Query query = sessionFactory.getCurrentSession().createSQLQuery(sql);
for (int i = 0; i < objects.length; i++) {
query.setParameter(i, objects[i]);
}
list = query.list();
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
}finally{
session.close();
}
return list;
}
}
零配置全JPA注解SH框架整合教程
需积分: 0 42 浏览量
更新于2017-03-16
2
收藏 17.33MB RAR 举报
SSH框架整合,全jpa注解真正的零配置。 struts2.3.8 spring3.2 hibernate4.1.9. 带有分页,全局异常,权限拦截器,session过滤等功能。 内有jar包。导入开发工具后部署既可跑起来。已做了简单的数据库操作功能。供大家参考学习。
![avatar](https://profile-avatar.csdnimg.cn/2e0cd0df5c3a4abba5e16679550ba071_id_rin.jpg!1)
LY文库
- 粉丝: 167
- 资源: 38
最新资源
- GXX-MLSGA40 高新兴国迈视音频一体化管理平台V4.2.0_部署手册.docx
- 智能家居专用-STM32 以太网开发板电路设计(含功能试验源码、原理图、开源带例程)
- 基于MATLAB2020b和Carsim2020的模型预测控制(MPC)与路径跟踪(PTC)结合侧偏角软约束及主动前轮转向仿真研究,基于MATLAB2020b与Carsim2020的模型预测控制(MP
- 基于SHO-CNN-SVM图像识别模型:多层次卷积池化与海马优化算法的深度应用,为口腔溃疡图像数据集带来高精度迁移性优势,支持灵活替换算法体系,基于SHO-CNN-SVM算法的图像识别模型:多元特征提
- 毕设springboot在线拍卖系统
- 基于图卷积神经网络(GCN)的数据分类预测:Matlab 2022A版本及以上的GCN模型实现代码指南,基于图卷积神经网络(GCN)的Matlab代码实现与数据分类预测应用指南(适用于Matlab 2
- 基于魔术公式的非线性七自由度车辆Simulink模型与二、三自由度车辆模型对照研究及动力学模型参考分析,基于魔术公式的非线性七自由度车辆Simulink模型与二、三自由度对照研究,包含驱动力矩、制动力
- 基于Simulink的无线充电仿真:LCC谐振器与磁耦合谐振的恒压恒流输出研究及四套模型解析,基于Simulink的无线充电仿真:探讨LCC谐振器与磁耦合谐振的恒压恒流输出及拓扑补偿技术,无线充电仿真
- 经典Banba低压带隙基准电路,SMIC 130nm工艺,输出890mv,可调整电压值,含完整版图的Bandgap电路与二级密勒补偿运放仿真结果展示,经典Banba低压带隙基准,电流模结构,工艺SMI
- 智能家居系统设计(附智能照明、自动浇花、宠物喂食器功能)【含代码、文档】
- Simulink整车控制器VCU模型:简洁易懂,经过实车验证,展现卓越处理能力与可读性-自动驾驶部分待调试屏蔽状态,Simulink整车控制器VCU模型:简单易懂,经实车验证!适当处理,注重可读性
- 50%占空比振荡器:开关电源核心元件,带修调功能,学习实践之理想选择,50%占空比振荡器:开关电源的理想选择,带修调功能,助力学习与实践,50%占空比振荡器,适用于开关电源,带修调,适合学习 ,50%
- 编队控制中的分布式线性二次离散时间博弈方法:碰撞避免策略的探索与应用,编队控制与博弈的分布式线性二次离散时间方法:碰撞避免策略研究,26.避免碰撞的编队控制分布式线性二次离散时间博弈方法 ,避免碰撞
- 智能家居管理系统设计(原理图+APP+源代码等)
- 基于Dugoff轮胎模型的车辆七自由度模型研究及魔术轮胎公式在路面附着系数估计中的应用-附参考文献与说明文档,基于Dugoff轮胎模型的车辆七自由度模型研究及魔术轮胎公式在路面附着系数估计中的应用说
- 基于博途1200 PLC与HMI的智能花式喷泉控制系统仿真工程:四模式喷水花样实现与优化,基于博途1200 PLC与HMI联合的花式喷泉控制系统仿真研究与实践教程,基于博途1200PLC+HMI花式喷