DAO泛型:
package com.dao;
import java.io.Serializable;
import java.util.List;
import com.domain.Attend;
import com.utils.Pagination;
//泛型的接口
/*泛型真正要做的事情就是找到具体的实体类是哪个
* <T>:占位符,代表真正在运行时候的实体类(Employee,Manager,Application....)
* <PK>:主键类,必须实现Serializable接口
*/
public interface GenerateDao<T,PK extends Serializable> {
public Integer save(T entity);
public void update(T entity);
public void delete(T entity);
public void delete(PK id);
public List<T> findAll();
public T get(PK id);
// 在工具类中定义2个基本方法
// 1.通过HQL和参数返回一个对象
public Object queryObject(final String hql,final Object[] values);
// 2.通过HQL和参数返回一个List
public List query(final String hql,final Object[] values);
// 3.实现分页的一个公共方法
public Pagination<T> getPagination(final String hql,final Object[] values,final int pageNow,final int rowCount,final int pageSize);
}
实现以上接口:
package com.dao.impl;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.sql.SQLException;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.dao.GenerateDao;
import com.domain.Attend;
import com.utils.Pagination;
/*
* 泛型DAO的实现
* (1)继承泛型接口
* (2)HiberanteDaoSupport
* (3)得到使用这个方法的实体类
* (4)实现具体的数据操作方法
*/
public class GenerateDaoImpl<T,PK extends Serializable> extends HibernateDaoSupport implements GenerateDao<T, PK>{
private final Class<T> clazz;
public GenerateDaoImpl(){
// 通过java反射机制,得到在运行时的具体的实体类
clazz = (Class<T>)((ParameterizedType)getClass()
.getGenericSuperclass())
.getActualTypeArguments()[0];
}
public void delete(T entity) {
this.getHibernateTemplate().delete(entity);
}
public void delete(PK id) {
this.getHibernateTemplate().delete(get(id));
}
public List<T> findAll() {
return this.getHibernateTemplate().find("from "+clazz.getName());
}
public Integer save(T entity) {
return (Integer)this.getHibernateTemplate().save(entity);
}
public void update(T entity) {
this.getHibernateTemplate().update(entity);
}
public T get(PK id) {
return this.getHibernateTemplate().get(clazz, id);
}
public List query(final String hql, final Object[] values) {
return this.getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session arg0)
throws HibernateException, SQLException {
Query q = arg0.createQuery(hql);
if(values != null){
for(int i=0;i<values.length;i++){
q.setParameter(i, values[i]);
}
}
return q.list();
}
});
}
public Object queryObject(final String hql, final Object[] values) {
return this.getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session arg0)
throws HibernateException, SQLException {
Query q = arg0.createQuery(hql);
if(values != null){
for(int i=0;i<values.length;i++){
q.setParameter(i, values[i]);
}
}
return q.list();
}
});
}
public Pagination<T> getPagination(final String hql, final Object[] values,
final int pageNow, final int rowCount, final int pageSize) {
return (Pagination<T>) this.getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session arg0)
throws HibernateException, SQLException {
Pagination pagination = new Pagination<T>(pageSize, pageNow, rowCount);
Query q = arg0.createQuery(hql);
if(values != null){
for(int i=0;i<values.length;i++){
q.setParameter(i, values[i]);
}
}
q.setFirstResult(pageSize*(pageNow-1));
q.setMaxResults(pageSize);
List list = q.list();
pagination.setPageList(list);
return pagination;
}
});
}
}
分享到:
相关推荐
技术选型 【后端】:Java 【框架】:ssm 【前端】:vue/jsp 【JDK版本】:JDK1.8 【服务器】:tomcat7+ 【数据库】:mysql 5.7+ 包含:项目源码、数据库脚本、项目功能介绍文档等,该项目源码可作为毕设使用。 项目都经过严格调试,确保可以运行! 具体项目介绍可查看博主文章
该源码是一款基于SpringBoot和Vue构建的青锋后台管理系统,集成了371个文件,涵盖148个Java源文件、85个Vue组件、58个JavaScript脚本、23个XML配置、12个FTL模板、7个XLS表格、5个属性文件、3个JSON配置、3个HTML页面和3个LESS样式表。系统以SpringBoot为核心框架,结合layui和Activiti工作流,具备代码生成器、自定义表单和拖拽可视化报表大屏等功能,为用户提供了一个功能齐全、易于扩展的脚手架平台。尽管开源代码可能存在不足,但欢迎广大开发者提出宝贵意见。
本设计由STC89C52单片机+LCD1602液晶显示电路+A/D转换芯片PCF8591电路+电压检测电路+电流检测电路ACS712-5A+继电器控制电路+电源电路设计而成。 功能描述: 1、通过太阳能电池板给锂电池充电,通过单片机检测太阳能给电池的充电电压和充电电流,并在1602液晶上显示出来! 2、通过继电器,有过压保护,当锂电池充电电压超过了4.5V或者充电电流超过1A,继电器断开,充电停止。 资料包含: 程序源码 电路图 任务书 答辩技巧 开题报告 参考论文 系统框图 程序流程图 使用到的芯片资料 器件清单 中期报告 等等资料
外鼻梁条超声焊接机_三维3D设计图纸.zip
本项目是一款基于PHP、JavaScript和CSS的爱宠狼人杀后台服务设计源码,总文件量为176个,其中包括124个PHP文件、12个Git忽略文件、5个JSON文件、4个JavaScript文件以及各类字体和图标文件。该系统专为爱宠狼人杀游戏的后台管理设计,旨在提供高效便捷的管理服务。
本项目为Java编写的Spring Security基础教程源码,包含85个文件,其中包括52个Java源文件、17个XML配置文件、13个YAML文件、1个Git忽略文件、1个Markdown文件和1个Word文档,旨在为开发者提供Spring Security框架的学习与实践基础。
Nacos持久化SQL脚本-nacos.sql
该项目为黔染出山记蜡染非遗融合现代设计的源码,总计包含145个文件,涵盖76个PNG图片文件、31个JPG图片文件、10个CSS样式文件、10个HTML文件、9个JavaScript文件、2个XML和JSON文件、1个IML文件、1个LICENSE文件以及1个字体文件。该项目旨在将黔染蜡染这一传统技艺与现代设计理念相融合,创新性地推动贵州蜡染手工艺的振兴,使这一文化遗产焕发新活力,融入现代生活,助力非遗传承与发展,同时促进贵州地区的经济增长。
该项目是一款基于Vue框架的连锁店点餐系统源码,包含282个文件,涵盖134个Vue组件、57个JavaScript文件、40个PNG图片、9个Markdown文档、9个JSON配置文件、8个SCSS样式表、7个映射文件、4个TypeScript文件以及少量其他辅助文件。该系统以uniDrink命名,模仿麦当劳、肯德基、喜茶和奈雪的茶等知名品牌的连锁店模式,适用于多连锁店场景的点餐服务。
本项目是一款基于Java技术的汽车配件信息管理系统源码,由137个文件组成,其中包括103个XML配置文件、24个Java源文件、2个Git忽略文件、2个属性文件、1个JAR包文件以及相关的其他文件类型。系统专注于汽车配件信息的管理与维护,适用于汽车维修与配件销售行业的信息化建设。
python直接能用的小游戏项目源码,含有代码注释,满分大作业资源,新手也可看懂,期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。该项目可以作为课程设计期末大作业使用,该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 python直接能用的小游戏项目源码,含有代码注释,满分大作业资源,新手也可看懂,期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。该项目可以作为课程设计期末大作业使用,该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 python直接能用的小游戏项目源码,含有代码注释,满分大作业资源,新手也可看懂,期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。该项目可以作为课程设计期末大作业使用,该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。python直接能用的小游戏项目源码,含有代码注释,满分大作业资源,新手也可看懂,期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。该项目可以作为课程设计期末大作业使用,该系统功能完善。
基于IPv6的智能机器人园区异常情况监测系统,包括无线传感器网络、智能巡检机器人、监控数据服务器、主_ipv6intellmonitrsystem
本项目是一款基于JavaScript及多语言融合的勤工俭学平台设计源码,共计367个文件,涵盖231个Java源代码文件、27个XML配置文件、23个JavaScript文件、19个CSS文件、8个PNG图像文件以及少量其他类型文件。该平台旨在为勤工俭学活动提供高效便捷的解决方案,支持多种语言的交互,满足不同用户的需求。
KarelDB 是一款采用Java语言开发的全方位关系型数据库,其核心采用Apache Calcite作为SQL引擎,辅以Apache Omid提供事务及控制功能。项目源码包含155个文件,涵盖了106个Java源文件、9个属性文件等多种类型,展示了其在数据库领域的技术实力和开源组件的集成能力。
该项目是一款基于Thinkphp 5.1.12框架开发的EasyAdmin管理后台源码,包含6729个文件,涵盖JavaScript、PHP、CSS、HTML、微信小程序及Shell等多种编程语言。文件类型丰富,包括3909个JavaScript文件、1307个PHP文件、265个GIF图片文件等,适用于构建高效的后台管理系统。
215kWh~2150kWh工商业储能典型图集(2023年).pdf
该项目是一款基于Taro框架的微信菜谱小程序设计源码,采用TypeScript语言开发,文件总数达87个,涵盖22个SCSS样式文件、17个TSX组件文件、16个TS类型定义文件、6个PNG图片文件、5个JSON配置文件、2个HTML和CSS文件、以及2个字体文件。该源码仅供个人学习使用,若涉及侵权,请联系作者。
托辊自动生产线_三维3D设计图纸.zip
该智能计量APP源代码基于Kotlin语言开发,包含697个文件,涵盖273个Kotlin源文件、166个XML布局文件、120个PNG图像资源、61个Java辅助文件、17个SO库文件、15个Gradle构建脚本、12个JAR库文件、7个项目配置文件、4个AIDL接口定义文件、4个属性文件以及4个其他文件。
数据治理是确保数据准确性、可靠性、安全性、可用性和完整性的体系和框架。它定义了组织内部如何使用、存储、保护和共享数据的规则和流程。数据治理的重要性随着数字化转型的加速而日益凸显,它能够提高决策效率、增强业务竞争力、降低风险,并促进业务创新。有效的数据治理体系可以确保数据在采集、存储、处理、共享和保护等环节的合规性和有效性。 数据质量管理是数据治理中的关键环节,它涉及数据质量评估、数据清洗、标准化和监控。高质量的数据能够提升业务决策的准确性,优化业务流程,并挖掘潜在的商业价值。随着大数据和人工智能技术的发展,数据质量管理在确保数据准确性和可靠性方面的作用愈发重要。企业需要建立完善的数据质量管理和校验机制,并通过数据清洗和标准化提高数据质量。 数据安全与隐私保护是数据治理中的另一个重要领域。随着数据量的快速增长和互联网技术的迅速发展,数据安全与隐私保护面临前所未有的挑战。企业需要加强数据安全与隐私保护的法律法规和技术手段,采用数据加密、脱敏和备份恢复等技术手段,以及加强培训和教育,提高安全意识和技能水平。 数据流程管理与监控是确保数据质量、提高数据利用率、保护数据安全的重要环节。有效的数据流程管理可以确保数据流程的合规性和高效性,而实时监控则有助于及时发现并解决潜在问题。企业需要设计合理的数据流程架构,制定详细的数据管理流程规范,并运用数据审计和可视化技术手段进行监控。 数据资产管理是将数据视为组织的重要资产,通过有效的管理和利用,为组织带来经济价值。数据资产管理涵盖数据的整个生命周期,包括数据的创建、存储、处理、共享、使用和保护。它面临的挑战包括数据量的快速增长、数据类型的多样化和数据更新的迅速性。组织需要建立完善的数据管理体系,提高数据处理和分析能力,以应对这些挑战。同时,数据资产的分类与评估、共享与使用规范也是数据资产管理的重要组成部分,需要制定合理的标准和规范,确保数据共享的安全性和隐私保护,以及建立合理的利益分配和权益保障机制。