- 浏览: 140418 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
jonesmillera:
Good article! Thank you for sha ...
好用的dao(spring+jpa) -
Luob.:
里面一个类都没有,有反应才怪呢
多文件上传组件SWFUpload java环境小例子 -
seaie:
谢谢博主的分享。
下载测试了下,跑起来ok,不过有3个可改进 ...
java图片压缩处理 支持gif -
angangJonny:
没法反应怎么解决的啊!
多文件上传组件SWFUpload java环境小例子 -
nookiehuihui:
点上传没反应,什么情况
多文件上传组件SWFUpload java环境小例子
package com.itcast.service.base; import java.util.LinkedHashMap; import com.itcast.bean.QueryResult; public interface DAO { /** * 获取记录总数 * @param entityClass 实体类 * @return */ public <T> long getCount(Class<T> entityClass); /** * 清除一级缓存的数据 */ public void clear(); /** * 保存实体 * @param entity 实体id */ public void save(Object entity); /** * 更新实体 * @param entity 实体id */ public void update(Object entity); /** * 删除实体 * @param entityClass 实体类 * @param entityid 实体id */ public <T> void delete(Class<T> entityClass, Object entityid); /** * 删除实体 * @param entityClass 实体类 * @param entityids 实体id数组 */ public <T> void delete(Class<T> entityClass, Object[] entityids); /** * 获取实体 * @param <T> * @param entityClass 实体类 * @param entityId 实体id * @return */ public <T> T find(Class<T> entityClass, Object entityId); /** * 获取分页数据 * @param <T> * @param entityClass 实体类 * @param firstindex 开始索引 * @param maxresult 需要获取的记录数 * @return */ public <T> QueryResult<T> getScrollData(Class<T> entityClass, int firstindex, int maxresult , String wherejpql, Object[] queryParams,LinkedHashMap<String, String> orderby); public <T> QueryResult<T> getScrollData(Class<T> entityClass, int firstindex, int maxresult , String wherejpql, Object[] queryParams); public <T> QueryResult<T> getScrollData(Class<T> entityClass, int firstindex, int maxresult , LinkedHashMap<String, String> orderby); public <T> QueryResult<T> getScrollData(Class<T> entityClass, int firstindex, int maxresult); public <T> QueryResult<T> getScrollData(Class<T> entityClass); }
package com.itcast.service.base; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import java.util.LinkedHashMap; import javax.persistence.EmbeddedId; import javax.persistence.Entity; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Query; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import com.itcast.bean.QueryResult; @Transactional public abstract class DaoSupport implements DAO{ @PersistenceContext protected EntityManager em; public void clear(){ em.clear(); } public <T> void delete(Class<T> entityClass,Object entityid) { delete(entityClass, new Object[]{entityid}); } public <T> void delete(Class<T> entityClass,Object[] entityids) { for(Object id : entityids){ em.remove(em.getReference(entityClass, id)); } } @Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED) public <T> T find(Class<T> entityClass, Object entityId) { return em.find(entityClass, entityId); } public void save(Object entity) { em.persist(entity); } @Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED) public <T> long getCount(Class<T> entityClass) { return (Long)em.createQuery("select count("+ getCountField(entityClass) +") from "+ getEntityName(entityClass)+ " o").getSingleResult(); } public void update(Object entity) { em.merge(entity); } @Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED) public <T> QueryResult<T> getScrollData(Class<T> entityClass, int firstindex, int maxresult, LinkedHashMap<String, String> orderby) { return getScrollData(entityClass,firstindex,maxresult,null,null,orderby); } @Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED) public <T> QueryResult<T> getScrollData(Class<T> entityClass, int firstindex, int maxresult, String wherejpql, Object[] queryParams) { return getScrollData(entityClass,firstindex,maxresult,wherejpql,queryParams,null); } @Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED) public <T> QueryResult<T> getScrollData(Class<T> entityClass, int firstindex, int maxresult) { return getScrollData(entityClass,firstindex,maxresult,null,null,null); } @Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED) public <T> QueryResult<T> getScrollData(Class<T> entityClass) { return getScrollData(entityClass, -1, -1); } @SuppressWarnings("unchecked") @Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED) public <T> QueryResult<T> getScrollData(Class<T> entityClass, int firstindex, int maxresult , String wherejpql, Object[] queryParams,LinkedHashMap<String, String> orderby) { QueryResult qr = new QueryResult<T>(); String entityname = getEntityName(entityClass); Query query = em.createQuery("select o from "+ entityname+ " o "+(wherejpql==null? "": "where "+ wherejpql)+ buildOrderby(orderby)); setQueryParams(query, queryParams); if(firstindex!=-1 && maxresult!=-1) query.setFirstResult(firstindex).setMaxResults(maxresult); qr.setResultlist(query.getResultList()); query = em.createQuery("select count("+ getCountField(entityClass)+ ") from "+ entityname+ " o "+(wherejpql==null? "": "where "+ wherejpql)); setQueryParams(query, queryParams); qr.setTotalrecord((Long)query.getSingleResult()); return qr; } protected void setQueryParams(Query query, Object[] queryParams){ if(queryParams!=null && queryParams.length>0){ for(int i=0; i<queryParams.length; i++){ query.setParameter(i+1, queryParams[i]); } } } /** * 组装order by语句 * @param orderby * @return */ protected String buildOrderby(LinkedHashMap<String, String> orderby){ StringBuffer orderbyql = new StringBuffer(""); if(orderby!=null && orderby.size()>0){ orderbyql.append(" order by "); for(String key : orderby.keySet()){ orderbyql.append("o.").append(key).append(" ").append(orderby.get(key)).append(","); } orderbyql.deleteCharAt(orderbyql.length()-1); } return orderbyql.toString(); } /** * 获取实体的名称 * @param <T> * @param entityClass 实体类 * @return */ protected <T> String getEntityName(Class<T> entityClass){ String entityname = entityClass.getSimpleName(); Entity entity = entityClass.getAnnotation(Entity.class); if(entity.name()!=null && !"".equals(entity.name())){ entityname = entity.name(); } return entityname; } protected <T> String getCountField(Class<T> clazz){ String out = "o"; try { PropertyDescriptor[] propertyDescriptors = Introspector.getBeanInfo(clazz).getPropertyDescriptors(); for(PropertyDescriptor propertydesc : propertyDescriptors){ Method method = propertydesc.getReadMethod(); if(method!=null && method.isAnnotationPresent(EmbeddedId.class)){ PropertyDescriptor[] ps = Introspector.getBeanInfo(propertydesc.getPropertyType()).getPropertyDescriptors(); out = "o."+ propertydesc.getName()+ "." + (!ps[1].getName().equals("class")? ps[1].getName(): ps[0].getName()); break; } } } catch (Exception e) { e.printStackTrace(); } return out; } }
beans.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <context:component-scan base-package="com.itcast"/> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean"> <property name="persistenceUnitName" value="itcast"/> </bean> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory"/> </bean> <!-- Activates @Transactional for DefaultImageDatabase --> <tx:annotation-driven transaction-manager="transactionManager"/> </beans>
其他的只需要继承这个DaoSupport 就可以了,有其他的方法再添加或重写
评论
1 楼
jonesmillera
2014-10-27
Good article! Thank you for sharing such a sample about .net java beans.
发表评论
-
java web 文件文件上传
2009-12-10 12:29 12960今日学习的主要内容是——文件的上传与下载,下载我们在之前的学 ... -
中文句子相似度判断源码探讨
2009-11-04 15:59 2927在我们日常的开发中, ... -
通用各类文档读写的设计与实现
2009-11-04 15:35 1032在我们日常的项目开发中,经常碰到需要读取word等文档的需求, ... -
抓取百度Top500歌曲以及地址源码
2009-11-04 15:33 1499在我整理完在线听歌(http://ting.faqee.c ... -
Apache 2.2.x+Tomcat6集群配置备忘
2009-11-04 15:28 1554在我们部署Web应用时,不可避免大多都会涉及到集群问题,此文作 ... -
多文件上传组件SWFUpload java环境小例子
2009-10-16 14:16 6563包结构如下: index.jsp upload.jsp ... -
工具类
2009-07-23 17:42 1216import java.util.HashMap; impo ... -
spring+JPA的注解(自己使用)
2009-06-10 00:48 1547依赖注入的手工装配的两种方式注解 @Resource 一般 ... -
spring的优缺点
2009-06-08 10:06 3178它是一个开源的项目,而且目前非常活跃;它基于IoC(Inver ... -
Struts优缺点
2009-06-08 09:51 1490跟Tomcat、Turbine等诸多Apa ... -
struts1与struts2的比较
2009-06-08 09:33 951特性 Struts 1 ... -
struts2+hibernate+spring分页方法
2009-05-27 13:16 3428import java.util.List; ... -
struts2+spring2+hibernate3.1应用实例
2009-05-22 18:24 12751. 组合Hibernate 与Spring ...
相关推荐
Java web service 入门示例,使用 JAX_WS API 开发,使用 CXF 发布,集成 Spring ,Spring orm 基于 JPA 开发 DAO, 并使用 Spring data jpa 简化 DAO 实现。
使用Spring MVC3.0+Spring+Spring data JPA 参照springside的一个小Demo
spring3.1+hibernate4+jpa框架集成Dao部分,并且已经写好测试类,dao已经封装完毕,已经配置好事务。dao采用泛型。
此项目为一个空结构的完整框架,还做了底层DAO和简单的分层。 其中SPINRG的数据连接池是配置在当前系统用户根目录下eg:C:\Users\Administrator\DBInfo\application.properties 具体配置如下:(如果使用别的数据库只...
该框架是SSH2框架搭建,Spring3+hibernate3+JPA2,全注解实现。使用oracle数据库(包中包含创建语句),数据库访问层dao使用hibernate+jpa和jdbctemplate两种方式实现。并包括log4j,filter拦截器等技术。
适合新手 学习IDEA
该案例使用SpringBoot 整合了SPringData JPA,使用SpringData 开发简化了Dao层的开发量,简化了数据访问,使得持久化更加简单 !
基于SpringBoot/WebFlux+Shiro+JPA+Java/Scala,实现的数据库细粒度动态权限管理系统(源码),项目经过严格测试,确保可以运行! 环境 SpringBoot 2.0.3.RELEASE SpringBoot WebFlux SpringBoot Data Jpa Apache ...
spring Data家族给我们提供了一个现成的dao层框架,这里面有不同的项目,如Spring Data JPA, Spring Data Neo4j and Spring Data MongoDB,他们的共同特点是他们给我们提供了框架代码,不再需要我们自己去实现了。
基于springboot最新版本2.1.4.RELEASE,采用jpa为dao层框架,配置redis(redisson)为hibernate的二级缓存。
#Spring + SpringMVC + Spring数据JPA构建快速开发环境### Spring数据JPA压缩数据JPA提供了一个完整的数据访问层(DAO)的解决方案,致力于减少数据访问层的开发量,并支持云服务的开源框架。 Spring Data作为...
数据库采用了mysql 以及 JPA 实现对数据库的链接 前端采用thymeleaf模板引擎+semantic框架开发 集成了markdown编辑器,markdown内容转化器,中文排版 项目框架: 前端 static :为js,css,images以及一些集成工具...
使用 SpringData 可以大幅减少数据访问层 (DAO) 的开发量. 开发者要做的,就是声明持久层接口,其他都交给 Spring Data JPA 来帮你完成!本套课程从最基础JPA到SpringData JPA面面俱到!一共有106讲, 本系列课程会...
style一、框架使用:1、后台框架:使用spring+...):1、对spring data jpa做二次封装生成公共Dao。2、自定义jsp标签。3、树插件zTree的运用。4、异步上传插件uploadify的运用。5、前台验证框架jquery.validate的使用。
SpringBoot天猫商城整站 基于前后端分离+SpringBoot+BootStrap、Vue.js、JQuery+JPA+Redis 天猫整站 基于前后端分离+SpringBoot+BootStrap、Vue.js、JQuery+JPA+Redis 一、项目介绍和演示 SPRINGBOOT天猫整站,基于 ...
logging.jar log4j-1.2.14.jar spring-dao.jar spring-hibernate3.jar spring-ibatis.jar spring-jdbc.jar spring-jdo.jar spring-jpa.jar spring-toplink.jar persistence.jar ...
技术选型:Spring Data JPA、Hibernate、 Spring MVC、Layer等。 项目结构: tianti-common:系统基础服务抽象,包括entity、dao和service的基础抽象; tianti-org:用户权限模块服务实现; tianti-module-...
目录 企业级应用的特点 JPA及JPA使用技巧 使用泛型DAO来简化DAO层的开发 IOC容器、AOP及Spring2 EasyJWeb如何实现快速开发 小结
Spring Hibernate整合要点之JPA 1 依赖包 2 注解实体 3 DAO实现 4 JPA配置 5 spring配置 6 修改web.xml
带有AngularJS前端的简单Spring Rest API项目。...模型实体spring.mvc.repository-DAO存储库spring.mvc.service-服务测试: spring.mvc.service.BankEntityServiceTest spring.mvc.service.ClientEntityServiceTest