`
guduxing890
  • 浏览: 5498 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Hibernate 通用接口设计

阅读更多

 

public interface CommonMng {

    /**
     * 根据主键进行单个对象查询
     * 
     * @author guduxing890
     * @param clazz
     *            EntityClass
     * @param pk
     *            主键
     * @return
     * @see [类、类#方法、类#成员]
     */
    public <T> T findEntityById(Class<T> clazz, Serializable pk);

    /**
     * 根据主键和 属性参数进行单个对象查询
     * 
     * @author guduxing890
     * @param clazz
     *            EntityClass
     * @param pk
     *            主键
     * @param properties
     *            属性
     * @param param
     *            参数
     * @return
     * @see [类、类#方法、类#成员]
     */
    public <T> T findByProperty(Class<T> clazz, Serializable pk,
	    String properties, Object param);

    /**
     * 查询实体所有记录
     * 
     * @author guduxing890
     * @param clazz
     *            EntityClass
     * @return
     * @see [类、类#方法、类#成员]
     */
    public <T> List<T> findByClass(Class<T> clazz);

    /**
     * 根据属性和参数,查询实体记录
     * 
     * @author guduxing890
     * @param clazz
     *            EntityClass
     * @param properties
     *            属性数组
     * @param params
     *            参数数组
     * @return
     * @see [类、类#方法、类#成员]
     */
    public <T> List<T> findByProperties(Class<T> clazz, String[] properties,
	    Object[] params);

    /**
     * 根据属性和参数, 查询实例记录,增加排序字段和排序方式 <br/>
     * 备注:如果排序字段和排序方式不对等,多余的排序字段自动使用 升序排列
     * 
     * @author guduxing890
     * @param clazz
     *            实体类
     * @param properties
     *            属性数组
     * @param params
     *            参数数组
     * @param orderProperty
     *            排序字段数组
     * @param sort
     *            排序方式
     * @return
     * @see [类、类#方法、类#成员]
     */
    public <T> List<T> findByProperties(Class<T> clazz, String[] properties,
	    Object[] params, String[] orderProperty, String[] sort);

    /**
     * 根据参数,查询数量
     * 
     * @author guduxing890
     * @param clazz
     * @param properties
     * @param params
     * @return
     * @see [类、类#方法、类#成员]
     */
    public <T> int count(Class<T> clazz, String[] properties, Object[] params);

    /**
     * 根据属性和参数, 查询实例记录,增加排序字段和排序方式 ,和返回最大记录数<br/>
     * 备注:如果排序字段和排序方式不对等,多余的排序字段自动使用 升序排列
     * 
     * @author guduxing890
     * @param clazz
     *            实体类
     * @param properties
     *            属性
     * @param params
     *            参数
     * @param orderProperty
     *            排序字段
     * @param sort
     *            排序方式
     * @param count
     *            最大返回数量
     * @return
     * @see [类、类#方法、类#成员]
     */
    public <T> List<T> findByProperties(Class<T> clazz, String[] properties,
	    Object[] params, String[] orderProperty, String[] sort, int count);

    /**
     * 根据属性和参数, 查询分页,增加排序字段和排序方式 ,和返回最大记录数<br/>
     * 备注:如果排序字段和排序方式不对等,多余的排序字段自动使用 升序排列
     * 
     * @author guduxing890
     * @param clazz
     *            实体类
     * @param properties
     *            属性
     * @param params
     *            参数
     * @param orderProperty
     *            排序字段
     * @param sort
     *            排序方式
     * @param pageNo
     *            页码
     * @param count
     *            最大返回数量
     * @return
     * @see [类、类#方法、类#成员]
     */
    public <T> Pagination<T> findPager(Class<T> clazz, String[] properties,
	    Object[] params, String[] orderProperty, String[] sort, int pageNo,
	    int count);

    /**
     * 根据条件查询对象
     * 
     * @author guduxing890
     * @param clazz
     *            实体类
     * @param properties
     *            属性
     * @param params
     *            参数
     * @param count
     *            最大返回数量
     * @return
     * @see [类、类#方法、类#成员]
     */
    public <T> List<T> findByProperties(Class<T> clazz, String[] properties,
	    Object[] params, int count);

    /**
     * 更新或修改对象
     * 
     * @author guduxing890
     * @param t
     *            实例对象
     * @see [类、类#方法、类#成员]
     */
    public <T> void saveOrUpdate(T t);

    /**
     * 新增对象
     * 
     * @author guduxing890
     * @param t
     *            实例对象
     * @see [类、类#方法、类#成员]
     */
    public <T> void save(T t);

    /**
     * 保存所有对象
     * 
     * @author guduxing890
     * @param t
     * @see [类、类#方法、类#成员]
     */
    <T> void saveAll(T... t);

    /**
     * 根据属性查询实体
     * 
     * @author guduxing890
     * @param clazz
     *            Hibernate映射实体
     * @param properties
     *            属性数组
     * @param params
     *            参数数组
     * @param orderProperty
     *            排序属性数组
     * @param sort
     *            排序方式
     * @param firstResult
     *            起始行
     * @param count
     *            最大返回结果数
     * @return
     * @see [类、类#方法、类#成员]
     */
    <T> List<T> findByProperties(Class<T> clazz, String[] properties,
	    Object[] params, String[] orderProperty, String[] sort,
	    int firstResult, int count);

    /**
     * 删除对象
     * 
     * @author guduxing890
     * @param t
     * @see [类、类#方法、类#成员]
     */
    <T> void delete(T t);

 

 

 

以上为Services 层

 

 dao 层代码实现

 

/*
 * 文 件 名:  CommonDaoImpl.java
 * 版    权:  XX Technologies Co., Ltd. Copyright YYYY-YYYY,  All rights reserved
 * 描    述:  <描述>
 * 修 改 人:  guduxing890
 * 修改时间:  2013-3-22
 * 跟踪单号:  <跟踪单号>
 * 修改单号:  <修改单号>
 * 修改内容:  <修改内容>
 */
package com.xxx.web.dao.impl;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.hibernate.Criteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Repository;

import com.xxx.common.Constants;
import com.xxx.common.dao.HibernateSimpleDao;
import com.xxx.web.dao.CommonDao;
/**
 * 
 * @author guduxing890
 * @version [版本号, 2013-3-22]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
@Repository
@SuppressWarnings("rawtypes")
public class CommonDaoImpl extends HibernateSimpleDao implements CommonDao {

    private static final String OBJECT_SEP = ".";

    /**
     * 重载方法
     * 
     * @param clazz
     * @param pk
     * @return
     */
    @SuppressWarnings("unchecked")
    @Override
    public <T> T getEntityById(Class<T> clazz, Serializable pk) {
	return (T) getSession().get(clazz, pk);
    }

    @SuppressWarnings("unchecked")
    @Override
    public <T> T findByProperty(Class<T> clazz, Serializable pk,
	    String properties, Object param) {
	Criteria criteria = getSession().createCriteria(clazz);
	criteria.add(Restrictions.eq(properties, param));
	criteria.add(Restrictions.idEq(pk));
	return (T) criteria.uniqueResult();
    }

    @Override
    public <T> List<T> findByClass(Class<T> clazz) {
	return findByProperties(clazz, null, null, null, null);
    }

    @Override
    public <T> List<T> findByProperties(Class<T> clazz, String[] properties,
	    Object[] params) {
	return findByProperties(clazz, properties, params, null, null);
    }

    @Override
    public <T> void saveOrUpdateAll(T... t) {
	for (T a : t) {
	    this.saveOrUpdate(a);
	}
    }

    /**
     * 重载方法
     * 
     * @param clazz
     * @param properties
     * @param params
     * @param orderProperty
     * @param sort
     * @param count
     * @return
     */
    @Override
    public <T> List<T> findByProperties(Class<T> clazz, String[] properties,
	    Object[] params, String[] orderProperty, String[] sort,
	    Integer count) {
	return this.findByProperties(clazz, properties, params, orderProperty,
		sort, null, count);

    }

    /**
     * 重载方法
     * 
     * @param clazz
     * @param properties
     * @param params
     * @return
     */
    @Override
    public <T> List<T> findByProperties(Class<T> clazz, String[] properties,
	    Object[] params, String[] orderProperty, String[] sort) {
	return findByProperties(clazz, properties, params, null, null, null);
    }

    /**
     * 保存对象
     * 
     * @author guduxing890
     * @param t
     * @see [类、类#方法、类#成员]
     */
    public <T> void save(T t) {
	if (t instanceof Collection) {
	    Collection c = (Collection) t;
	    this.getHibernateTemplate().saveOrUpdateAll(c);
	} else {
	    this.getSession().save(t);
	}
    }

    /**
     * 保存或更新对象
     * 
     * @author guduxing890
     * @param t
     * @see [类、类#方法、类#成员]
     */
    public <T> void saveOrUpdate(T t) {
	this.getSession().saveOrUpdate(t);
    }

    /**
     * 重载方法
     * 
     * @param clazz
     * @param properties
     * @param params
     * @return
     */
    @Override
    public <T> int count(Class<T> clazz, String[] properties, Object[] params) {

	Criteria criteria = getSession().createCriteria(clazz);
	if (null != properties) {
	    int paramLen = properties.length;
	    for (int i = 0; i < paramLen; i++) {
		// 进行属性处理
		String property = properties[i];

		// 把属性进行用 . 分割。 取出里面的每一个子对象。作为一个子 Criteria.进行关联查询
		if (property.indexOf(OBJECT_SEP) != -1) {
		    String[] props = StringUtils.split(property, OBJECT_SEP);

		    Criteria propertyCriteria = null;
		    for (int y = 0; y < props.length - 1; y++) {
			if (y == 0) {
			    propertyCriteria = criteria
				    .createCriteria(props[y]);
			} else {
			    propertyCriteria = propertyCriteria
				    .createCriteria(props[y]);
			}
		    }
		    propertyCriteria.add(Restrictions.eq(
			    props[props.length - 1], params[i]));
		} else {
		    criteria.add(Restrictions.eq(properties[i], params[i]));
		}

	    }
	}
	// 查询记录条数
	criteria.setProjection(Projections.rowCount());

	return Integer.parseInt(criteria.uniqueResult().toString());
    }

    /**
     * 重载方法
     * 
     * @param clazz
     * @param properties
     * @param params
     * @param orderProperty
     * @param sort
     * @param firstResult
     * @param count
     * @return
     */
    @SuppressWarnings("unchecked")
    @Override
    public <T> List<T> findByProperties(Class<T> clazz, String[] properties,
	    Object[] params, String[] orderProperty, String[] sort,
	    Integer firstResult, Integer count) {
	Criteria criteria = getSession().createCriteria(clazz);
	if (null != properties) {
	    int paramLen = properties.length;
	    for (int i = 0; i < paramLen; i++) {
		// 进行属性处理
		String property = properties[i];

		// 把属性进行用 . 分割。 取出里面的每一个子对象。作为一个子 Criteria.进行关联查询
		if (property.indexOf(OBJECT_SEP) != -1) {
		    String[] props = StringUtils.split(property, OBJECT_SEP);

		    Criteria propertyCriteria = null;
		    for (int y = 0; y < props.length - 1; y++) {
			if (y == 0) {
			    propertyCriteria = criteria
				    .createCriteria(props[y]);
			} else {
			    propertyCriteria = propertyCriteria
				    .createCriteria(props[y]);
			}
		    }
		    propertyCriteria.add(Restrictions.eq(
			    props[props.length - 1], params[i]));
		} else {
		    criteria.add(Restrictions.eq(properties[i], params[i]));
		}

	    }
	}
	// 增加排序字段
	if (null != orderProperty) {
	    int length = orderProperty.length;

	    for (int i = 0; i < length; i++) {
		Order order = null;
		if (null != sort && i < sort.length) {
		    order = Constants.SORT_TYPE_ASC.equalsIgnoreCase(sort[i]) ? Order
			    .asc(orderProperty[i]) : Order
			    .desc(orderProperty[i]);
		} else {
		    order = Order.asc(orderProperty[i]);
		}
		criteria.addOrder(order);

	    }
	}
	if (count == null) {
	    count = 5000;
	}
	if (null != firstResult) {
	    criteria.setFirstResult(firstResult);
	}
	criteria.setMaxResults(count);
	return (List<T>) criteria.list();
    }

    /**
     * 重载方法
     * 
     * @param t
     */
    @Override
    public <T> void delete(T t) {
	this.getSession().delete(t);
    }

}

 

 

分享到:
评论

相关推荐

    hibernate 通用接口架构

    使用hibernate框架,面向接口进行dao层的设计,是通用的底层架构.

    一个很好的通用泛型dao(含源码)

    为什么我们要使用通用DAO接口呢,因为我们的数据库操作无非是增删改查,CRUD操作,我们不需要为每个实体去编写一个dao接口,对于相似的实体操作可以只编写一个通用接口,然后采用不同的实现! DAO已经成为持久层...

    虚拟数据层 Struts2、Hibernate、Spring整合的泛型DAO Version 2010.9.27

    泛型dao接口 :GenericDao, ID extends Serializable&gt; 泛型作为DAO的通用接口 CRUD方法 dao接口 : PersonDAO extends GenericDao, Integer&gt; 可以不写代码,方法已经在父类泛型dao里了,这里为了说明:可扩展添加 ...

    低清版 大型门户网站是这样炼成的.pdf

    6.1.5 spring 2.5圣经——面向接口编程 358 6.1.6 开始spring 2.5旅程—hello world 359 6.2 spring 2.5核心技术 364 6.2.1 bean工厂之beanfactory介绍 364 6.2.2 实用的bean工厂applicationcontext 365 6.2.3 ...

    毕业设计-基于Java的分布式软件测试管理系统的设计与实现.zip

    common 通用依赖、接口等 provide 服务提供方,依赖common web 服务消费方,依赖common,web-ui web-ui vue+webpack前端项目 cloud-config-repo 配置信息 cloud-config-server 配置服务端 2设计方案 采用dubbo实现...

    分布式软件测试管理系统的设计与实现

    common 通用依赖、接口等 provide 服务提供方,依赖common web 服务消费方,依赖common,web-ui web-ui vue+webpack前端项目 cloud-config-repo 配置信息 cloud-config-server 配置服务端 2设计方案 采用dubbo实现...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    丰富的编程接口工具,为用户进行程序设计提供了更大的选择余地。  4.SQL Server与Windows NT完全集成,利用了NT的许多功能,如发送和接受消息,管理登录安全性等。SQL Server也可以很好地与Microsoft BackOffice...

    avalon-framework-impl-4.2.0.jar

    这个库对于使用Avalon Framework构建的项目来说非常关键,因为它包含了许多基础的、通用的功能,例如事件处理、依赖注入和视图模型等。 Avalon Framework是一个模块化且可扩展的框架,其核心是定义接口和契约,然后...

    Spring面试题

    下一个最高级抽象是 BeanFactory 接口,它是工厂设计模式的实现,允许通过名称创建和检索对象。BeanFactory 也可以管理对象之间的关系。 BeanFactory 支持两个对象模型。 □ 单态 模型提供了具有特定名称的对象的...

    泛型dao 泛型dao 泛型dao

    泛型dao接口 :GenericDao, ID extends Serializable&gt; 泛型作为DAO的通用接口 CRUD方法 dao接口 : PersonDAO extends GenericDao, Integer&gt; 可以不写代码,方法已经在父类泛型dao里了,这里为了说明:可扩展添加 ...

    java学习重点

    JAVA学习要点 一、关于Java ...多态性就是“一种接口,多种方法”,可以为一组相关的动作设计一个通用的接口,其实类的函数的重载就是一种多态的体现; 4 引入抽象编程的思想; 类的封装就是一种抽象思想

    Spring.3.x企业应用开发实战(完整版).part2

    12.5.3 分页查询接口设计 12.6 小结 第4篇 业务层及Web层技术 第13章 任务调度和异步执行器 13.1 任务调度概述 13.2 Quartz快速进阶 13.2.1 Quartz基础结构 13.2.2 使用SimpleTrigger 13.2.3 使用CronTrigger ...

    Spring3.x企业应用开发实战(完整版) part1

    12.5.3 分页查询接口设计 12.6 小结 第4篇 业务层及Web层技术 第13章 任务调度和异步执行器 13.1 任务调度概述 13.2 Quartz快速进阶 13.2.1 Quartz基础结构 13.2.2 使用SimpleTrigger 13.2.3 使用CronTrigger ...

    java面试题

    答:CTS 通用类型系统、CLS 通用语言规范、CLR 公共语言运行时。 Struts1和Struts2原理和区别? 答:Struts1和Struts2是两个完全不同的框架,Struts1以ActionServlet作为核心控制器,由ActionServlet负责拦截用户的...

    boot-walk:学习SpringBoot,整合项目实战

    前端页面采用freemarker,模板化引擎设计,页面采用bootstrap-table灵活强大的表格插件。前端采用vkbeautify格式化JSON,XML,CSS,SQL显示。后端配置swagger在线文档,方便编写API接口文档。引入druib,fastjson,cors,xss...

    Spring Framework 5.3.6

    开发者通过策略接口将拥有对该框架的高度控制,因而该框架将适应于多种呈现(View)技术,例如JSP,FreeMarker,Velocity,Tiles,iText以及POI。值得注意的是,Spring中间层可以轻易地结合于任何基于 MVC 框架的网页...

    java开源包1

    JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接...

    学生成绩信息管理系统论文 JSP 完整版

    Java语言其实最早诞生于1991年,起初被称为OAK语言,是SUN公司为一些消费性电子产品而设计的一个通用环境。他们最初的目的只是为了开发一种独立于平台的软件技术,而且在网络出现之前,OAK可以说是默默无闻,甚至...

    IEP课程管理系统需求文档.docx

    要基于目前流行的,扩展性、兼容性强的 SSH(Struts+Spring+Hibernate)通用开发框架;系统全面支持B/S结构,客户端支持IE6.0/7.0/8.0。 系统可靠性 系统部署时应充分考虑关键内容数据的冗余备份,保证系统在发生...

Global site tag (gtag.js) - Google Analytics