`

web中的dao模板

阅读更多
在web项目中  我们可能会针对每一个实体写一个dao    针对每一个dao写一个实现 


这样重复的代码很多 ,如果项目中有一千个实体 ,是不是要写一千个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);
	}
	
}


3
3
分享到:
评论

相关推荐

    MyEclipse自定义模板生成dao

    在自定义模板中,你可以添加类似`${base_dao}`的变量,表示BaseDao类。 4. **保存并应用**:完成模板编辑后,记得保存并应用更改。这样,当你下次在MyEclipse中新建DAO类时,自定义模板就会生效,生成符合你需求的...

    WEB项目,导入数据到word模板中并下载

    ### WEB项目:导入数据到Word模板中并下载 在现代企业应用开发中,经常需要将数据库中的数据导出为各种格式的文件供用户下载或打印使用。本篇内容主要介绍如何在Java Web项目中实现将数据导入Word文档,并提供下载...

    基于Freemarker模板的代码生成器后台代码(controller,service,dao)模板文件

    Freemarker是一个强大的模板引擎,常用于Web应用中的动态页面生成。在Java世界里,它被广泛应用在代码生成器中,以实现自动生成常见的后台代码,如控制层、业务层和持久层。这个压缩包提供的就是一套基于Freemarker...

    SSH中通用dao类

    在Java企业级开发中,SSH(Struts2、Spring、Hibernate)是一个常见的开源框架组合,用于构建高效、灵活且可扩展的Web应用程序。SSH框架整合了MVC模式、依赖注入和对象关系映射,大大简化了后端开发。在这个场景中,...

    JavaWeb DAO设计模式DEMO

    在JavaWeb开发中,DAO(Data Access Object)设计模式是一种常用的设计模式,它主要用于数据库操作,将业务逻辑层与数据访问层分离,提高代码的可重用性和可维护性。这个"JavaWeb DAO设计模式DEMO"是一个示例项目,...

    Java Web程序运用中泛型DAO的作用.zip

    在实际的Java Web应用中,我们可以结合Spring框架的Hibernate或JPA支持,进一步简化泛型DAO的实现,利用Spring的模板类如JdbcTemplate、HibernateTemplate等,自动处理SQL执行和结果映射。 总的来说,泛型DAO在Java...

    phpweb模板

    2. **数据库支持**:PHPWeb通常集成了对常见数据库(如MySQL、PostgreSQL等)的支持,方便进行数据存储和查询,同时提供数据访问对象(DAO)和数据访问层(DAL)等工具,使得数据库操作更加简洁。 3. **模板引擎**...

    java web开发框架 MVC+DAO实现

    在Java Web开发中,MVC(Model-View-Controller)设计模式和DAO(Data Access Object)模式是两个核心概念,广泛应用于构建高效、可维护的Web应用程序。本篇将深入探讨这两个框架及其在实际开发中的应用。 MVC模式...

    一个dao模式的实验报告

    在这个实验报告中,学生周媛娣通过Java Web开发实践,使用DAO模式实现了对数据库的操作,包括增加、查询等基本功能。 1. **DAO模式的理解**: DAO模式的核心思想是创建一个对象(DAO),该对象封装了对数据库的...

    界面模板 web 系统

    在开发过程中,会涉及到类的设计,如数据访问对象(DAO)类、业务逻辑服务类等。最后,进行系统测试,确保所有功能正常运作,并对性能进行评估。 通过这个实训项目,学生们能够深入理解JavaWeb开发流程,掌握JSP、...

    JSP+DAO和MVC+DAO(基于MySQL数据库分页)

    本主题聚焦于Java Web开发中的分页技术,主要涉及两个方面:JSP(JavaServer Pages)结合DAO(Data Access Object)模式以及MVC(Model-View-Controller)框架下的DAO实现,两者均与MySQL数据库进行交互,实现数据的...

    自动生成dao,service

    在Java Web开发中,DAO层通常用于与数据库进行交互,包括CRUD(创建、读取、更新和删除)操作。Service层则负责业务逻辑,它调用DAO层的方法并进行必要的事务管理和业务规则处理。自动生成这些层的代码可以帮助...

    ssm框架基础配置文件web.xml模板springmvc.xml模板applicationContext.xml模板拿来即用

    在使用这些模板时,开发者需要根据实际项目需求修改路径、数据库连接信息、服务和DAO层的Bean定义等。此外,还可以根据项目特点添加自定义配置,如拦截器、过滤器、消息源、邮件服务等。这些基础配置文件的使用大大...

    MVC+DAO例子

    **MVC(Model-View-Controller)模式**是一种在软件工程中广泛应用的设计...通过这个例子,开发者可以学习如何在实际项目中运用MVC+DAO模式,理解它们之间的协作关系,以及如何组织代码以实现高效、可维护的Web应用。

    JSP+DAO.rar_dao_dao java_java dao_jsp DAO_设计模式

    DAO模式的应用可以将JSP从繁重的数据处理中解放出来,使其专注于HTML模板和用户交互,提高了代码的可读性和可维护性。 **DAO接口与实现** 在实际应用中,我们首先定义一个DAO接口,例如`UserDAO`,它包含增删改查...

    Maven搭建的SSM框架模板,通用任何类型的web项目

    在SSM模板中,Maven负责管理项目的构建过程,通过POM.xml文件定义项目的依赖关系,自动下载并管理所需的库文件,同时提供了一套标准的目录结构,方便团队协作和持续集成。 5. **模板工程**:这个模板工程包含了SSM...

    JavaWeb后台模板

    模板中可能包含了一些预定义的Servlet和JSP页面,以便开发者快速构建用户界面。 2. **MVC框架**:Model-View-Controller(模型-视图-控制器)模式是JavaWeb开发中的常见设计模式。如Spring MVC、Struts2等,这些...

    java web开发简历模板.docx

    【Java Web开发简历知识点】 Java Web开发是一种基于Java技术的Web应用程序开发方式,它结合了Java语言的强大功能和Web的动态交互性。...这样的开发者在企业中通常能够承担复杂的Web应用程序开发任务。

    最基本的 Java Web 项目模板,无需 J2EE 环境

    在这个"最基本的 Java Web 项目模板"中,我们看到几个关键元素,它们对于理解Java Web开发的基础至关重要。 1. **项目结构**: - `.classpath`:这是Eclipse IDE(集成开发环境)的一个配置文件,它定义了项目的类...

    Struts + DAO实现基本分页

    Struts和DAO是Java Web开发中的两个重要组件。Struts是一种基于MVC(Model-View-Controller)设计模式的框架,用于构建企业级的Web应用程序,而DAO(Data Access Object)模式则是为了解耦业务逻辑层和数据访问层,...

Global site tag (gtag.js) - Google Analytics