hibernate分页

/**
* DAO操作基类<br>
* 本DAO层实现了通用的数据操作
*
* @author 黄磊
*
* @param <T>
* POJO实体对象
* @param <ID>
* ID
*/
@SuppressWarnings("unchecked")
public class BaseHibernateDAO<T, ID extends Serializable> extends
HibernateDaoSupport {

private static final Logger logger = Logger
.getLogger(BaseHibernateDAO.class);

/**
* 保存指定实体类
*
* @param entityobj
* 实体类
*/
public void save(T entity) {
try {
getHibernateTemplate().save(entity);
if (logger.isDebugEnabled()) {
logger.debug("保存实体类成功," + entity.getClass().getName());
}
} catch (RuntimeException e) {
logger.error("保存实体异常," + entity.getClass().getName(), e);
throw e;
}
}

/**
* 删除指定实体
*
* @param entityobj
* 实体类
*/
public void delete(T entity) {
try {
getHibernateTemplate().delete(entity);
if (logger.isDebugEnabled()) {
logger.debug("删除实体类成功," + entity.getClass().getName());
}
} catch (RuntimeException e) {
logger.error("删除实体异常", e);
throw e;
}
}

/**
* 获取所有实体集合
*
* @param entityClass
* 实体
* @return 集合
*/
public List<T> findAll(Class<T> entityClass) {
try {
if (logger.isDebugEnabled()) {
logger.debug("开始删除实体:" + entityClass.getName());
}
return getHibernateTemplate().find("from " + entityClass.getName());
} catch (RuntimeException e) {
logger.error("查找指定实体集合异常,实体:" + entityClass.getName(), e);
throw e;
}
}

/**
* 更新或保存指定实体
*
* @param entity
* 实体类
*/
public void saveOrUpdate(T entity) {
try {
getHibernateTemplate().saveOrUpdate(entity);
if (logger.isDebugEnabled()) {
logger.debug("更新或者保存实体成功," + entity.getClass().getName());
}
} catch (RuntimeException e) {
logger.error("更新或保存实体异常", e);
throw e;
}
}

/**
* 查找指定ID实体类对象
*
* @param entityClass
* 实体Class
* @param id
* 实体ID
* @return 实体对象
*/
public T findById(Class<T> entityClass, ID id) {
try {
if (logger.isDebugEnabled()) {
logger.debug("开始查找ID为" + id + "的实体:" + entityClass.getName());
}
return (T) getHibernateTemplate().get(entityClass, id);
} catch (RuntimeException e) {
logger.error("查找指定ID实体异常,ID:" + id, e);
throw e;
}
}

/**
* 查询指定HQL,并返回集合
*
* @param hql
* HQL语句
* @param values
* 可变的参数列表
* @return 集合
*/
public List<Object> find(String hql, Object... values) {
try {
if (logger.isDebugEnabled()) {
logger.debug("开始查询指定HQL语句," + hql);
}
return getHibernateTemplate().find(hql, values);
} catch (RuntimeException e) {
logger.error("查询指定HQL异常,HQL:" + hql, e);
throw e;
}
}

/**
* 按照HQL语句查询唯一对象.
*
* @param hql
* HQL语句
* @param values
* 可变参数集合
* @return OBJECT对象
*/
public Object findUnique(final String hql, final Object... values) {
try {
if (logger.isDebugEnabled()) {
logger.debug("开始查询返回唯一结果的HQL语句," + hql);
}
return getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session s)
throws HibernateException, SQLException {
Query query = createQuery(s, hql, values);
return query.uniqueResult();
}
});
} catch (RuntimeException e) {
logger.error("查询指定HQL异常,HQL:" + hql, e);
throw e;
}
}

/**
* 查找指定HQL并返回INT型
*
* @param hql
* HQL语句
* @param values
* 可变参数列表
* @return INT
*/
public int findInt(final String hql, final Object... values) {
return Tools.null2Int(findUnique(hql, values));
}

/**
* 获取指定实体Class指定条件的记录总数
*
* @param entityClass
* 实体Class
* @param where
* HQL的查询条件,支持参数列表
* @param values
* 可变参数列表
* @return 记录总数
*/
public int findTotalCount(Class<T> entityClass, final String where,
final Object... values) {
String hql = "select count(e) from " + entityClass.getName() + " as e "
+ where;
return findInt(hql, values);
}

/**
* 获取指定实体Class的记录总数
*
* @param entityClass
* 实体Class
* @return 记录总数
*/
public int findTotalCount(Class<T> entityClass) {
return findTotalCount(entityClass, "");
}

/**
* 查找指定属性的实体集合
*
* @param entityClass
* 实体
* @param propertyName
* 属性名
* @param value
* 条件
* @return 实体集合
*/
public List<T> findByProperty(Class<T> entityClass, String propertyName,
Object value) {
try {
if (logger.isDebugEnabled()) {
logger.debug("开始查找指定属性:" + propertyName + "为" + value + "的实体"
+ entityClass.getName());
}
String queryStr = "from " + entityClass.getName()
+ " as model where model." + propertyName + "=?";
return getHibernateTemplate().find(queryStr, value);
} catch (RuntimeException e) {
logger.error("查找指定条件实体集合异常,条件:" + propertyName, e);
throw e;
}
}

/**
* 模糊查询指定条件对象集合 <br>
* 用法:可以实例化一个空的T对象,需要查询某个字段,就set该字段的条件然后调用本方法<br>
* 缺点:目前测试貌似只能支持String的模糊查询,虽然有办法重写,但没必要,其他用HQL<br>
*
* @param entity
* 条件实体
* @return 结合
*/
public List<T> findByExample(T entity) {
try {
List<T> results = getHibernateTemplate().findByExample(entity);
return results;
} catch (RuntimeException re) {
logger.error("查找指定条件实体集合异常", re);
throw re;
}
}

/**
* 补充方法(未测) 据说可以无视session的状态持久化对象
*
* @param entity
* 实体类
* @return 持久后的实体类
*/
public T merge(T entity) {
try {
T result = (T) getHibernateTemplate().merge(entity);
return result;
} catch (RuntimeException re) {
logger.error("merge异常", re);
throw re;
}
}

/**
* 清除实体的锁定状态<br>
* 方法未测
*
* @param entity
* 实体
*/
public void attachClean(T entity) {
try {
getHibernateTemplate().lock(entity, LockMode.NONE);
} catch (RuntimeException re) {
logger.error("实体解锁异常", re);
throw re;
}
}

/**
* 按HQL分页查询.
*
* @param page
* 页面对象
* @param hql
* HQL语句
* @param values
* 可变参数列表
* @return 分页数据
*/
public Page<T> findByPage(final Page<T> page, final String hql,
final Object... values) {
try {
if (logger.isDebugEnabled()) {
logger.debug("开始查找指定HQL分页数据," + hql);
}
return (Page<T>) getHibernateTemplate().execute(
new HibernateCallback() {
public Object doInHibernate(Session s)
throws HibernateException, SQLException {
Query query = createQuery(s, hql, values);
if (page.isFirstSetted()) {
query.setFirstResult(page.getFirst());
}
if (page.isPageSizeSetted()) {
query.setMaxResults(page.getPageSize());
}
page.setResult(query.list());
if (logger.isDebugEnabled()) {
logger.debug("查找指定HQL分页数据成功," + hql);
}
return page;
}
});
} catch (RuntimeException e) {
logger.error("分页查询异常,HQL:" + hql, e);
throw e;
}
}

/**
* 根据查询条件与参数列表创建Query对象
*
* @param session
* Hibernate会话
* @param hql
* HQL语句
* @param objects
* 参数列表
* @return Query对象
*/
public Query createQuery(Session session, String hql, Object... objects) {
Query query = session.createQuery(hql);
if (objects != null) {
for (int i = 0; i < objects.length; i++) {
query.setParameter(i, objects[i]);
}
}
return query;
}

/**
* 从Spring上下文中获取本类对象<br>
* 此方法可能存在线程并发问题(待测)
*
* @param context
* Spring上下文
* @return 本类对象
*/
public static BaseHibernateDAO getFromApplicationContext(
WebApplicationContext context) {
return (BaseHibernateDAO) context.getBean("BaseHibernateDAO");
}

}



QueryParameter.java


Java代码 收藏代码

/**
* 本类封装分页和排序查询请求参数.
* 本类参考自springside的ORM封装设计
*
*
*
*/
public class QueryParameter {

public static final String ASC = "asc";
public static final String DESC = "desc";

protected int pageNo = 1;
protected int pageSize = -1;
protected String orderBy = null;
protected String order = ASC;
protected boolean autoCount = false;

/**
* 获得每页的记录数量,无默认值.
*/
public int getPageSize() {
return pageSize;
}

public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}

/**
* 是否已设置每页的记录数量.
*/
public boolean isPageSizeSetted() {
return pageSize > -1;
}

/**
* 获得当前页的页号,序号从1开始,默认为1.
*/
public int getPageNo() {
return pageNo;
}

public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}

/**
* 根据pageNo和pageSize计算当前页第一条记录在总结果集中的位置,序号从0开始.
*/
public int getFirst() {
if (pageNo < 1 || pageSize < 1)
return -1;
else
return ((pageNo - 1) * pageSize);
}

/**
* 是否已设置第一条记录记录在总结果集中的位置.
*/
public boolean isFirstSetted() {
return (pageNo > 0 && pageSize > 0);
}

/**
* 获得排序字段,无默认值.
*/
public String getOrderBy() {
return orderBy;
}

public void setOrderBy(String orderBy) {
this.orderBy = orderBy;
}

/**
* 是否已设置排序字段.
*/
public boolean isOrderBySetted() {
return StringUtils.isNotBlank(orderBy);
}

/**
* 获得排序方向,默认为asc.
*/
public String getOrder() {
return order;
}

/**
* 设置排序方式向.
*
* @param order
* 可选值为desc或asc.
*/
public void setOrder(String order) {
if (ASC.equalsIgnoreCase(order) || DESC.equalsIgnoreCase(order)) {
this.order = order.toLowerCase();
} else
throw new IllegalArgumentException(
"order should be 'desc' or 'asc'");
}

/**
* 是否自动获取总页数,默认为false. 注意本属性仅于query by Criteria时有效,query by HQL时本属性无效.
*/
public boolean isAutoCount() {
return autoCount;
}

public void setAutoCount(boolean autoCount) {
this.autoCount = autoCount;
}
}



Page.java


Java代码 收藏代码

/**
* 封装分页和排序查询的结果,并继承QueryParameter的所有查询请求参数.
*
* @param <T> Page中的记录类型.
*/
public class Page<T> extends QueryParameter {

private List<T> result = null;

private int totalCount = -1;

public Page() {
}

public Page(int pageSize) {
this.pageSize = pageSize;
}

public Page(int pageSize, boolean autoCount) {
this.pageSize = pageSize;
this.autoCount = autoCount;
}

/**
* 取得倒转的排序方向
*/
public String getInverseOrder() {
if (order.endsWith(DESC))
return ASC;
else
return DESC;
}

/**
* 页内的数据列表.
*/
public List<T> getResult() {
return result;
}

public void setResult(List<T> result) {
this.result = result;
}

/**
* 总记录数.
*/
public int getTotalCount() {
return totalCount;
}

public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}

/**
* 计算总页数.
*/
public Integer getTotalPages() {
if (totalCount == -1)
return -1;

int count = totalCount / pageSize;
if (totalCount % pageSize > 0) {
count++;
}
return new Integer(count);
}

/**
* 是否还有下一页.
*/
public boolean isHasNext() {
return (pageNo + 1 <= getTotalPages());
}

/**
* 返回下页的页号,序号从1开始.
*/
public int getNextPage() {
if (isHasNext())
return pageNo + 1;
else
return pageNo;
}

/**
* 是否还有上一页.
*/
public boolean isHasPre() {
return (pageNo - 1 >= 1);
}

/**
* 返回上页的页号,序号从1开始.
*/
public int getPrePage() {
if (isHasPre())
return pageNo - 1;
else
return pageNo;
}
}
标题基于SpringBoot+Vue的学生交流互助平台研究AI更换标题第1章引言介绍学生交流互助平台的研究背景、意义、现状、方法与创新点。1.1研究背景与意义分析学生交流互助平台在当前教育环境下的需求及其重要性。1.2国内外研究现状综述国内外在学生交流互助平台方面的研究进展与实践应用。1.3研究方法与创新点概述本研究采用的方法论、技术路线及预期的创新成果。第2章相关理论阐述SpringBoot与Vue框架的理论基础及在学生交流互助平台中的应用。2.1SpringBoot框架概述介绍SpringBoot框架的核心思想、特点及优势。2.2Vue框架概述阐述Vue框架的基本原理、组件化开发思想及与前端的交互机制。2.3SpringBoot与Vue的整合应用探讨SpringBoot与Vue在学生交流互助平台中的整合方式及优势。第3章平台需求分析深入分析学生交流互助平台的功能需求、非功能需求及用户体验要求。3.1功能需求分析详细阐述平台的各项功能需求,如用户管理、信息交流、互助学习等。3.2非功能需求分析对平台的性能、安全性、可扩展性等非功能需求进行分析。3.3用户体验要求从用户角度出发,提出平台在易用性、美观性等方面的要求。第4章平台设计与实现具体描述学生交流互助平台的架构设计、功能实现及前后端交互细节。4.1平台架构设计给出平台的整体架构设计,包括前后端分离、微服务架构等思想的应用。4.2功能模块实现详细阐述各个功能模块的实现过程,如用户登录注册、信息发布与查看、在线交流等。4.3前后端交互细节介绍前后端数据交互的方式、接口设计及数据传输过程中的安全问题。第5章平台测试与优化对平台进行全面的测试,发现并解决潜在问题,同时进行优化以提高性能。5.1测试环境与方案介绍测试环境的搭建及所采用的测试方案,包括单元测试、集成测试等。5.2测试结果分析对测试结果进行详细分析,找出问题的根源并
内容概要:本文详细介绍了一个基于灰狼优化算法(GWO)优化的卷积双向长短期记忆神经网络(CNN-BiLSTM)融合注意力机制的多变量多步时间序列预测项目。该项目旨在解决传统时序预测方法难以捕捉非线性、复杂时序依赖关系的问题,通过融合CNN的空间特征提取、BiLSTM的时序建模能力及注意力机制的动态权重调节能力,实现对多变量多步时间序列的精准预测。项目不仅涵盖了数据预处理、模型构建与训练、性能评估,还包括了GUI界面的设计与实现。此外,文章还讨论了模型的部署、应用领域及其未来改进方向。 适合人群:具备一定编程基础,特别是对深度学习、时间序列预测及优化算法有一定了解的研发人员和数据科学家。 使用场景及目标:①用于智能电网负荷预测、金融市场多资产价格预测、环境气象多参数预报、智能制造设备状态监测与预测维护、交通流量预测与智慧交通管理、医疗健康多指标预测等领域;②提升多变量多步时间序列预测精度,优化资源调度和风险管控;③实现自动化超参数优化,降低人工调参成本,提高模型训练效率;④增强模型对复杂时序数据特征的学习能力,促进智能决策支持应用。 阅读建议:此资源不仅提供了详细的代码实现和模型架构解析,还深入探讨了模型优化和实际应用中的挑战与解决方案。因此,在学习过程中,建议结合理论与实践,逐步理解各个模块的功能和实现细节,并尝试在自己的项目中应用这些技术和方法。同时,注意数据预处理的重要性,合理设置模型参数与网络结构,控制多步预测误差传播,防范过拟合,规划计算资源与训练时间,关注模型的可解释性和透明度,以及持续更新与迭代模型,以适应数据分布的变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值