- 浏览: 280370 次
- 性别:
- 来自: 湖南
文章分类
- 全部博客 (120)
- Struts 1.框架 (12)
- Spring框架 (9)
- hibernate框架 (6)
- web 综合 (15)
- Dwr (1)
- struts 2 (19)
- 设计模式 (0)
- lucene (6)
- oracle (3)
- linux (10)
- mysql (4)
- jquery (0)
- AJAX (1)
- javaScript (1)
- J2SE (4)
- IBATIS (3)
- JPA (1)
- Compass (3)
- 报表 (1)
- 任务调度 (1)
- tomcat (3)
- RMI (0)
- JMS (2)
- WebService (2)
- SOAP (0)
- XML (1)
- 多线程 (8)
- 缓存 (2)
- nginx (3)
- mongodb (1)
- ant打包 (0)
最新评论
-
iceman1952:
Hi 你觉得很好的那两三篇 百度文库的链接,能贴一下吗?
内网穿透&UDP打洞 -
ice86rain:
里面貌似没有用到Lucene
Struts2+Hibernate3.2+Spring2.5+Compass整合 -
sgq0085:
写得非常详细 好文章
JMS之ActiveMQ Linux下安装与应用实例 -
強顔歓笶:
JMS之ActiveMQ Linux下安装与应用实例 -
yixiandave:
forcer521 写道不指定所有子目录都在一起的话,这样用源 ...
linux下nginx稳定版1.6.2安装
在web项目中 我们可能会针对每一个实体写一个dao 针对每一个dao写一个实现
这样重复的代码很多 ,如果项目中有一千个实体 ,是不是要写一千个dao以及一千个dao的实现
对此本人写了一个basedao 以及他的实现 以后做项目 只要拷贝一份就可以
代码如下
daoSuport是结合ejb3.0写的 用泛型实现
业务层service 只要继承自DaoSupport就能实现所有的方法
这样重复的代码很多 ,如果项目中有一千个实体 ,是不是要写一千个dao以及一千个dao的实现
对此本人写了一个basedao 以及他的实现 以后做项目 只要拷贝一份就可以
代码如下
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); }
daoSuport是结合ejb3.0写的 用泛型实现
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; } }
业务层service 只要继承自DaoSupport就能实现所有的方法
public class BrandServiceBean extends DaoSupport implements BrandService { @Override public void save(Object entity) { ((Brand)entity).setCode(UUID.randomUUID().toString()); super.save(entity); } }
发表评论
-
ANT合并多个第三方包
2015-06-18 16:31 869<project name="cmgr.ivy ... -
jsp国际化处理方式
2014-11-21 10:12 554示例标签: <fmt:message key=&quo ... -
gamecard
2013-07-16 23:37 666的地方的的方式个地方 -
支付
2013-05-06 23:12 629发到飞肥嘟嘟发的发的 -
marven
2013-05-05 23:12 689行业应用管理 -
框架开发
2013-03-21 20:25 729框架开发 版本1.0 -
框架开发
2013-03-21 00:25 0框架开发版本1 -
JavaMail的邮件实例
2011-01-26 16:35 1063简单的邮件实例 package com.wzh.mail ... -
xml解析
2010-11-24 23:32 1156只是供自己参考 import java.io.F ... -
自定义标签的编写
2010-10-20 23:45 1231编写处理类 package com.o ... -
ssh整合的web配置顺序解析
2010-10-20 21:01 2368web.xml的一份模板 整合ssh2+dwr <? ... -
Struts2+Hibernate3.2+Spring2.5+Compass整合
2010-10-10 01:34 2974之前学习了Compass 现在整合下ssh2+Compass ... -
MVC面试题:有了stuts的mvc为什么还要spring的mvc
2010-07-28 19:33 23512今天一同学 去面试 关于mvc的面试题 面试官问道:有了st ... -
ssh2整合问题+ssh2源代码下载
2010-07-13 19:29 3899[/b]整合sreuts2.1.8+hibernate3.2+ ... -
利用组件分页
2010-06-13 14:22 1134. 如何分页? 1.把pager-taglib.jar ...
相关推荐
using System Web UI WebControls WebParts; using System Xml Linq; using Common; using Dao BL; using System Collections Generic; using Dao EntityModel; using Yangqi Dao BL; namespace Yangqi { public ...
分层JavaWeb模板,JavaWeb(四)——分层开发思路。基于maven的WebApp,主要包括:DAO包(数据访问层),Service层(业务逻辑层),Domain(实体类)。完成了对数据库的连接,以及对数据库的增删改查。另外包括在(UI)...
2.ssm模板实现:pojo,dao,daoimpl,service,serviceimpl,controller,各mapper.xml 代码自动生成, 3.配置文件自动生(含:spring,springMVC,mybatis,web.xml); 代码完美运行. 使用: 1.配置generator.xml(key):...
Web应用程序框架这是一个易于使用,支持gradle的纯Java,轻量级和可伸缩性,并且没有繁琐的JEE内容,Web应用程序模板,该模板包含所有主要模块,通常是每个典型项目所需的-后端,带有客户端的REST API,Web用户界面...
Web工程直接将全部的JS脚本和页面文件直接拷贝到项目生成目录中。 存在问题: 生成的web工程不能被打开,需要手动添加到项目工程中。 模板的前端: 暂时添加进了yaml css framework 4.0.1.(*此处不需要可以...
第7章 struts2中应用模板语言 145 7.1模板语言简介 145 7.2应用velocity 146 7.2.1velocity基础 146 7.2.2struts2对velocity的支持 153 7.3应用freemarker 155 7.3.1freemarker基础 155 7.3.2struts2整合...
KOA2快速开发脚手架前述:经过了几个koa2开发的web项目之后,发现有很多造轮子的地方,现在也有很多脚手架工具,但是很多都是前端思想,该模板结合java开发经验,将一些常用工具封装起来,使用注解来导出路由,方便...
同时支持自定义sessionHandler支持静态文件服务提供ini配置文件读取,benchmark,log等辅助方法支持mysql和memcache的dao封装,简化数据操作提供pv、流量的实时统计其它配置文件和预编译模板的实时重新加载提供...
此系统是建立在WEB平台上的,后台数据库使用MYSQL,具有多种查询和统计功能。按照现在理财管理的需求所设计,数据库容量大并且安全可靠。能及时处理家庭的理财信息,且能对家庭的理财信息进行查询和统计,数据备分...
内置 IOC、AOP、ORM、DAO、MVC 等特性 基于 Servlet 3.0 规范 使用 Java 注解取代 XML 配置 使应用充分做到“前后端...面向基于 Web 的中小规模的应用程序 新手能在较短时间内入门 核心具有良好的定制性且插件易于扩展
Web 应用中模板技术与 JSP 技术的对比 输入验证与数据绑定 异常处理 国际化支持 WebWork2 & Spring Quick Start WebWork 高级特性 Action 驱动模式 XWork 拦截器体系 输入校验 国际化支持 Webwork2...
基于SSM搭建的Java后台模板(MyBatis相关代码引入mybatis-generator自动构建,只需要修改jdbc.properties中的数据库连接属性,在generatorConfig.xml中配置相应的table即可),可以直接下载使用。日志框架用的是...
CodeSmith生成Seasar2项目工程模板 在codesmisth 下直接运行Execute.cst。 输入各项参数自动生成VS2010 + Seasar2 + Web项目 1:后台缓存建立。 2:基础映射对象生成。 3:基础Dao对象生成。 4:配置文件自动生成。 ...
一个用java相关技术搭建的后台服务端模板,目前仅仅包括基础模块和权限模块,用户可以结合自身业务进行相应扩展。 技术选型:Spring Data JPA、Hibernate、 Spring MVC、Layer等。 项目结构: tianti-common:...
所以这个修改一下交一般的Web jsp的设计没问题的,里面唯一不足的就是显示分页那一板块,有一个DAO文件,里面弄得差不多了,差一个Servlet调用就行了,其他的都很简单,但是MVC弄得很好的。 因为是便于交作业的参考...
这是一个工作模板项目,它展示了一个示例多层 J2EE Web 应用程序,其中包含Apache Wicket 、 Spring IoC 、 JPA/Hibernate集成和基于Bootstrap的前端。 它演示了MvC 、 SoC 、 IoC 、 DAO 、 Service layer和Open ...
用JSP编写的WEB网页模板以及用MyEclipse6.5、Tomcat6.0S、QLServer2005 Struts2、Spring3.0、Hibernate3.3等技术编写的源代码。 整个项目采用MVC模式,应用Struts Spring Hibernate三个框架实现了一个小区管理系统...
第9章 在Spring中建立契约优先Web服务 9.1 介绍Spring-WS 9.2 定义契约(首先!) 9.3 使用服务端点处理消息 9.3.1 建立基于JDOM消息的端点 9.3.2 序列化消息载荷 9.4 合并在一起 9.4.1 Spring-WS:全景视图 ...
第9章 在Spring中建立契约优先Web服务 9.1 介绍Spring-WS 9.2 定义契约(首先!) 9.3 使用服务端点处理消息 9.3.1 建立基于JDOM消息的端点 9.3.2 序列化消息载荷 9.4 合并在一起 9.4.1 Spring-WS:全景视图 ...