- 浏览: 285289 次
- 性别:
- 来自: 湖南
文章分类
- 全部博客 (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 915<project name="cmgr.ivy ... -
jsp国际化处理方式
2014-11-21 10:12 583示例标签: <fmt:message key=&quo ... -
gamecard
2013-07-16 23:37 692的地方的的方式个地方 -
支付
2013-05-06 23:12 674发到飞肥嘟嘟发的发的 -
marven
2013-05-05 23:12 730行业应用管理 -
框架开发
2013-03-21 20:25 758框架开发 版本1.0 -
框架开发
2013-03-21 00:25 0框架开发版本1 -
JavaMail的邮件实例
2011-01-26 16:35 1089简单的邮件实例 package com.wzh.mail ... -
xml解析
2010-11-24 23:32 1207只是供自己参考 import java.io.F ... -
自定义标签的编写
2010-10-20 23:45 1270编写处理类 package com.o ... -
ssh整合的web配置顺序解析
2010-10-20 21:01 2410web.xml的一份模板 整合ssh2+dwr <? ... -
Struts2+Hibernate3.2+Spring2.5+Compass整合
2010-10-10 01:34 3016之前学习了Compass 现在整合下ssh2+Compass ... -
MVC面试题:有了stuts的mvc为什么还要spring的mvc
2010-07-28 19:33 23598今天一同学 去面试 关于mvc的面试题 面试官问道:有了st ... -
ssh2整合问题+ssh2源代码下载
2010-07-13 19:29 3934[/b]整合sreuts2.1.8+hibernate3.2+ ... -
利用组件分页
2010-06-13 14:22 1166. 如何分页? 1.把pager-taglib.jar ...
相关推荐
在自定义模板中,你可以添加类似`${base_dao}`的变量,表示BaseDao类。 4. **保存并应用**:完成模板编辑后,记得保存并应用更改。这样,当你下次在MyEclipse中新建DAO类时,自定义模板就会生效,生成符合你需求的...
### WEB项目:导入数据到Word模板中并下载 在现代企业应用开发中,经常需要将数据库中的数据导出为各种格式的文件供用户下载或打印使用。本篇内容主要介绍如何在Java Web项目中实现将数据导入Word文档,并提供下载...
Freemarker是一个强大的模板引擎,常用于Web应用中的动态页面生成。在Java世界里,它被广泛应用在代码生成器中,以实现自动生成常见的后台代码,如控制层、业务层和持久层。这个压缩包提供的就是一套基于Freemarker...
在Java企业级开发中,SSH(Struts2、Spring、Hibernate)是一个常见的开源框架组合,用于构建高效、灵活且可扩展的Web应用程序。SSH框架整合了MVC模式、依赖注入和对象关系映射,大大简化了后端开发。在这个场景中,...
在JavaWeb开发中,DAO(Data Access Object)设计模式是一种常用的设计模式,它主要用于数据库操作,将业务逻辑层与数据访问层分离,提高代码的可重用性和可维护性。这个"JavaWeb DAO设计模式DEMO"是一个示例项目,...
在实际的Java Web应用中,我们可以结合Spring框架的Hibernate或JPA支持,进一步简化泛型DAO的实现,利用Spring的模板类如JdbcTemplate、HibernateTemplate等,自动处理SQL执行和结果映射。 总的来说,泛型DAO在Java...
2. **数据库支持**:PHPWeb通常集成了对常见数据库(如MySQL、PostgreSQL等)的支持,方便进行数据存储和查询,同时提供数据访问对象(DAO)和数据访问层(DAL)等工具,使得数据库操作更加简洁。 3. **模板引擎**...
在Java Web开发中,MVC(Model-View-Controller)设计模式和DAO(Data Access Object)模式是两个核心概念,广泛应用于构建高效、可维护的Web应用程序。本篇将深入探讨这两个框架及其在实际开发中的应用。 MVC模式...
在这个实验报告中,学生周媛娣通过Java Web开发实践,使用DAO模式实现了对数据库的操作,包括增加、查询等基本功能。 1. **DAO模式的理解**: DAO模式的核心思想是创建一个对象(DAO),该对象封装了对数据库的...
在开发过程中,会涉及到类的设计,如数据访问对象(DAO)类、业务逻辑服务类等。最后,进行系统测试,确保所有功能正常运作,并对性能进行评估。 通过这个实训项目,学生们能够深入理解JavaWeb开发流程,掌握JSP、...
在Java Web开发中,DAO层通常用于与数据库进行交互,包括CRUD(创建、读取、更新和删除)操作。Service层则负责业务逻辑,它调用DAO层的方法并进行必要的事务管理和业务规则处理。自动生成这些层的代码可以帮助...
在使用这些模板时,开发者需要根据实际项目需求修改路径、数据库连接信息、服务和DAO层的Bean定义等。此外,还可以根据项目特点添加自定义配置,如拦截器、过滤器、消息源、邮件服务等。这些基础配置文件的使用大大...
**MVC(Model-View-Controller)模式**是一种在软件工程中广泛应用的设计...通过这个例子,开发者可以学习如何在实际项目中运用MVC+DAO模式,理解它们之间的协作关系,以及如何组织代码以实现高效、可维护的Web应用。
DAO模式的应用可以将JSP从繁重的数据处理中解放出来,使其专注于HTML模板和用户交互,提高了代码的可读性和可维护性。 **DAO接口与实现** 在实际应用中,我们首先定义一个DAO接口,例如`UserDAO`,它包含增删改查...
在SSM模板中,Maven负责管理项目的构建过程,通过POM.xml文件定义项目的依赖关系,自动下载并管理所需的库文件,同时提供了一套标准的目录结构,方便团队协作和持续集成。 5. **模板工程**:这个模板工程包含了SSM...
模板中可能包含了一些预定义的Servlet和JSP页面,以便开发者快速构建用户界面。 2. **MVC框架**:Model-View-Controller(模型-视图-控制器)模式是JavaWeb开发中的常见设计模式。如Spring MVC、Struts2等,这些...
【Java Web开发简历知识点】 Java Web开发是一种基于Java技术的Web应用程序开发方式,它结合了Java语言的强大功能和Web的动态交互性。...这样的开发者在企业中通常能够承担复杂的Web应用程序开发任务。
本主题聚焦于Java Web开发中的分页技术,主要涉及两个方面:JSP(JavaServer Pages)结合DAO(Data Access Object)模式以及MVC(Model-View-Controller)框架下的DAO实现,两者均与MySQL数据库进行交互,实现数据的...
在这个"最基本的 Java Web 项目模板"中,我们看到几个关键元素,它们对于理解Java Web开发的基础至关重要。 1. **项目结构**: - `.classpath`:这是Eclipse IDE(集成开发环境)的一个配置文件,它定义了项目的类...
Struts和DAO是Java Web开发中的两个重要组件。Struts是一种基于MVC(Model-View-Controller)设计模式的框架,用于构建企业级的Web应用程序,而DAO(Data Access Object)模式则是为了解耦业务逻辑层和数据访问层,...