`

JAP实现方法

    博客分类:
  • Java
阅读更多
package cn.itcast.service.base;

import java.io.Serializable;
import java.util.LinkedHashMap;

import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.springframework.transaction.annotation.Transactional;

import cn.itcast.bean.QueryResult;

import cn.itcast.utils.GenericsUtils;

/*
* 在抽象类中实现该基本功能。
*/
@SuppressWarnings("unchecked")
@Transactional
public abstract class DaoSupport<T> implements DAO<T> {
//反射得到实体
private Class<T> entityClass = GenericsUtils.getSuperClassGenricType(this.getClass());

@PersistenceContext protected EntityManager em;

public void Save(T entity) {
// TODO Auto-generated method stub
em.persist(entity);
}

public void delete(java.io.Serializable... ids) {
// TODO Auto-generated method stub
for (Serializable serializable : ids) {
em.remove(em.getReference(this.entityClass, serializable));
}
}

public T find(java.io.Serializable entityId) {
// TODO Auto-generated method stub
return em.find(this.entityClass, entityId);
}

public void update(T entity) {
// TODO Auto-generated method stub
em.merge(entity);
}

public QueryResult<T> getScrollData(int startIndex, int maxResult, String whereJPQL, Object[] params, LinkedHashMap<String, String> orderby) {
QueryResult<T> qr = new QueryResult<T>();
String entityName= getEntityName(this.entityClass);
System.out.println(entityName);

// 一些细节问题真的很重要........
// 这个地方搞的头都大了,就是少了一个空格的问题

String where = whereJPQL !=null && !"".equals(whereJPQL.trim()) ? "where "+ whereJPQL : "";

Query query = em.createQuery("select o from "+ entityName+ " o "+ where + buildOrderBy(orderby));

setParameters(query, params);

////兩參熟都不為-1情況才分页
if(startIndex!=-1 && maxResult!=-1){
//设置查询记录的起始位置和查询的最大记录数
query.setFirstResult(startIndex).setMaxResults(maxResult);
}

//设置查询的记录
qr.setResultlist(query.getResultList());

//**達到總記錄數**
query = em.createQuery("select count(o) from "+ entityName+" o "+where );

//這個地方出錯了......

setParameters(query, params);

//设置查询记录总数
qr.setTotalrecord((Long)query.getSingleResult());
      
//返回查询记录结果
return qr;
}

public QueryResult<T> getScrollData(){
return getScrollData(-1, -1, null, null, null);
}

public QueryResult<T> getScrollData(int startIndex,int maxResult,String whereJPQL, Object[] params){
return getScrollData(startIndex, maxResult, whereJPQL, params, null);
}

public QueryResult<T> getScrollData(int startIndex,int maxResult,LinkedHashMap<String, String>orderby){
return getScrollData(startIndex, maxResult, null, null, orderby);
}  

public QueryResult<T> getScrollData(int startIndex,int maxResult){
/*QueryResult<T> qr = new QueryResult<T>();
String entityName = getEntityName(this.entityClass);
Query query = em.createQuery("select o from "+ entityName + " o" );
query.setFirstResult(startIndex).setMaxResults(maxResult);
qr.setResultlist(query.getResultList());
query = em.createQuery("select count(o) from "+ entityName+" o ");
qr.setTotalrecord((Long)query.getSingleResult());
return qr;*/
return getScrollData(startIndex, maxResult);
}
/*
* 为Query对象设置查询參數
* @params query 查詢對象
* @param params 查詢參數
*/
private static void setParameters(Query query, Object[] params) {
// TODO Auto-generated method stub
if(params !=null){
for (int i = 0; i < params.length; i++) {
query.setParameter(i+1, params[i]);
}
}

}

//構造排序方法
private static String buildOrderBy(LinkedHashMap<String, String> orderby) {
// TODO Auto-generated method stub
StringBuilder sb = new StringBuilder();
if(orderby !=null && orderby.size()>0){
sb.append(" order by ");
for (String key : orderby.keySet()) {
sb.append("o.").append(key).append(" ").append(orderby.get(key)).append(",");
}
sb.deleteCharAt(sb.length()-1);
}
return sb.toString();
}

/*
* 获得实体名称
*/
//在方法上聲明環形
private static <E> String getEntityName(Class<E> entityClass){
String entityname = entityClass.getSimpleName();
//获得注解Entity的name的实体名称
Entity entity = entityClass.getAnnotation(Entity.class);

if(entity.name()!=null && !"".equals(entity.name())){
entityname = entity .name();
}

return entityname;

}
}
分享到:
评论

相关推荐

    JAVA JAP分页写法大全

    在Java编程语言中,"JAP分页"通常指的是Java应用程序中的分页查询技术,用于在大量数据中实现高效的检索和展示。这个压缩包文件名"JAVA JAP分页写法大全"暗示了它可能包含各种不同的分页实现示例,这对于初学者来说...

    jap调用应用程序

    ### jap调用应用程序 #### 一、引言 在现代软件开发中,特别是在Web应用领域,JSP(Java Server Pages)技术被广泛应用于构建动态网页。然而,在某些情况下,Java程序可能需要与其他非Java应用程序进行交互,以...

    jap页面jap页面

    它的属性通过公共方法暴露,这些方法遵循JavaBean的约定,如getter和setter方法,使得其他组件可以访问和修改内部状态。 JavaBean有两种主要类型:具有用户界面(UI)的JavaBean,以及没有UI但专注于处理事务(如...

    jap入门到精通

    - **建立JDBC连接**:使用`DriverManager.getConnection(url, username, password)`方法。 - **发送SQL语句**:通过`Statement`或`PreparedStatement`对象。 - **获取执行结果**:使用`ResultSet`对象来读取查询结果...

    JAP编程学习100例

    顺序如下: 1、多种字体大小显示 2、c:out标记输出 3、获取当前时间 4、include包含语句 5、建立错误处理页面的范例程序 ...98、实现基于数据库的站内搜索 99、DOM读取XML文档 100、SAX读取XML文档

    jap+sturs教材管理系统

    系统提供的论文资料可能涵盖了系统的设计理念、架构、实现细节以及使用方法,这对于学习和理解系统的工作原理非常有帮助。此外,数据库文件可能包含了初始化脚本,用于在首次运行时设置好必要的表结构和初始数据。 ...

    JAP2.0 WebLogic10.3.3不兼容的解决方法

    这可以通过在`CLASSPATH`变量的值中加入`${JAP_PATH}/javax.persistence_2.0.0.jar`来实现。 完成这些修改后,保存并关闭`startWebLogic.sh`文件。为了确认更改是否生效,可以使用`nohup`命令非交互式地启动...

    JS+CSS实现实用的单击输入框弹出选择框的方法.docx

    下面是实现方法的详细介绍: 首先,我们需要在 HTML 文件中添加一个输入框和一个选择框,输入框用于输入值,选择框用于显示选择结果。然后,我们需要使用 JavaScript 实现选择框的弹出效果。 在 CSS 文件中,我们...

    jap wap 开发实例

    6. **源码分析**:压缩包中的"wap实例jsp"很可能包含了上述概念的实际代码示例,可以用于学习和理解WML与jsp的集成方法。 通过深入研究这个实例,开发者可以了解如何在早期的移动环境下构建功能丰富的Web应用,这对...

    JPA环境支持(JAP的环境配置)

    它为对象关系映射(ORM)提供了一种标准方法,允许开发人员将 Java 对象映射到关系型数据库中的表。JPA 的出现极大地简化了数据持久化逻辑的开发过程,并且提供了高度可移植性和灵活性。 #### 二、JPA环境支持解析 ...

    jap/java图片上传ueditor编辑工具

    在JAVA中,我们可以使用`Part`接口来处理HTTP请求中的多部分数据,它提供了读取文件内容、获取文件名和类型等方法。例如: ```java request.getParts().stream() .filter(part -&gt; "upfile".equals(part.getName())...

    java实现图片下载和上传.zip

    Apache Commons-IO是另一个非常实用的Java库,它提供了大量与I/O相关的辅助方法。在图片下载场景中, Commons-IO可以帮助我们读取服务器上的文件,然后通过HTTP响应将文件内容流式传输到客户端,完成图片的下载。 ...

    SSJ.rar_Jap spring_ssj

    SSJ.rar_Jap_spring_ssj 是一个与Java应用程序开发相关的压缩包,它结合了Struts、Spring和JAP(可能是Java应用平台)这三种技术。这个项目可能是一个示例或者教程,展示了如何将这三个框架集成在一起以实现特定的...

    springMVC+JAP整合出去persistence.xml配置文件

    `dataSource()`方法创建了一个DBCP数据源,`entityManagerFactory()`方法则创建了`EntityManagerFactory`,并指定了实体扫描的包和持久化提供者。 使用DBCP作为数据源是因为其简单易用,且具有良好的性能。它支持...

    JAP注解参考

    **JPA注解详解** ...通过这些注解,开发者可以灵活地控制JPA实体的生命周期、持久化行为以及与数据库的交互,从而实现高效且可移植的对象关系映射。了解和熟练掌握这些注解是使用JPA进行ORM开发的关键。

    jap帮助文档

    JPA的主要目标是简化持久化逻辑,减少开发工作量,并提供了一种对象关系映射(Object-Relational Mapping, ORM)的方法。 #### 二、JPA的关键特性 - **简化EJB持久性**: JPA简化了EJB持久性的实现过程,不再需要繁琐...

    基于javabean+jap的网上售书系统

    通过定义私有属性和公共的getter与setter方法,实现了数据的封装和访问控制。 2. **JSP(JavaServer Pages)**:JSP是Java Web开发中的视图层技术,用于生成动态网页内容。在本系统中,JSP页面负责展示用户界面,如...

    投票系统 java jsp struts javabean 源代码

    这些JavaBeans可以通过属性、构造函数和方法暴露其功能,便于在JSP和Struts之间传递数据。 SQL Server 2005是微软公司的一款关系型数据库管理系统,用于存储和管理投票系统中的数据。在投票系统中,数据库可能包含...

    springMVC+JAP整合彻底摆脱persistence.xml配置文件

    - 创建Repository接口继承自Spring Data JPA提供的`JpaRepository`或`CrudRepository`,Spring会自动实现接口中的方法。 - 在Controller中注入Repository,通过其方法进行数据操作。 通过以上步骤,我们可以构建...

Global site tag (gtag.js) - Google Analytics