`
周英能
  • 浏览: 187995 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

DAO和Service公共抽象接口

 
阅读更多

1、所有Dao标志接口

 

public interface DataAccessObject {}

 

 2、所有实体标志父类

 

public class DominObject implements Serializable{}

 

 3、DAO基础接口,包括增删改查等

 

public interface BaseDao<Entity, PK extends Serializable> extends
		DataAccessObject {
	/**
	 * 增加实体
	 * 
	 * @param entity
	 * @return
	 */
	public Serializable save(Entity entity);

	/**
	 * 更新实体
	 */
	public void update(Entity entity);
	/**
	 * 根据ID判断保存或者更新
	 * 
	 */
	public void saveOrUpdate(Entity entity);
	/**
	 * 合并实体
	 */
	public void merge(Entity entity);

	/**
	 * 更新实体
	 */
	public void refresh(Entity entity);

	/**
	 * 删除实体
	 * 
	 * @param entity
	 */
	public void delete(Entity entity);

	/**
	 * 按ID删除对象
	 * 
	 * @param id
	 */
	public void delete(final PK id);

	/**
	 * 按ID查询对象
	 * 
	 * @param id
	 * @return
	 */
	public Entity findById(final PK id);

	/**
	 * 按ID查询多个对象
	 * 
	 * @param ids
	 * @return
	 */
	public List<Entity> findByIds(final Collection<PK> ids);

	/**
	 * 查询全部对象
	 * 
	 * @return
	 */
	public List<Entity> getAll();

	/**
	 * 获取全部对象, 支持按属性行序.
	 */
	public List<Entity> getAll(String orderByProperty, boolean isAsc);

	/**
	 * 按属性查找对象列表, 匹配方式为相等.
	 */
	public List<Entity> findByProperty(final String propertyName,
			final Object value);

	/**
	 * 按属性查找唯一对象, 匹配方式为相等.
	 */
	public Entity findUniqueByProperty(final String propertyName,
			final Object value);

	/**
	 * 判断对象的属性值在数据库内是否唯一.
	 * 
	 * 在修改对象的情景下,如果属性新修改的值(value)等于属性原来的值(orgValue)则不作比较.
	 */
	public boolean isPropertyUnique(final String propertyName,
			final Object newValue, final Object oldValue);

	/**
	 * 初始化对象. 使用load()方法得到的仅是对象Proxy, 在传到View层前需要进行初始化. 如果传入entity,
	 * 则只初始化entity的直接属性,但不会初始化延迟加载的关联集合和属性. 如需初始化关联属性,需执行:
	 * Hibernate.initialize(user.getRoles()),初始化User的直接属性和关联集合.
	 * Hibernate.initialize
	 * (user.getDescription()),初始化User的直接属性和延迟加载的Description属性.
	 */
	public void initProxyObject(Object proxy);
}

 

 4、DAO分页查询,复杂条件查询接口

 

public interface BaseEntityDao<Entity,PK extends Serializable> extends BaseDao<Entity,PK>{
	/**
	 * 分页获取全部对象.
	 */
	public Page<Entity> findAllByPage(final Page<Entity> page);
}

 5、service基础接口,返回值封装类,主要针对提供webservice接口

 

public class RetdObj<RealObj> implements Serializable {

    private static final long serialVersionUID = 132984918234911234L;

    public static final int PASSCODE_MIN = 200;
    
    public static final int PASSCODE_MAX = 299;

    private RealObj realObj;

    private RetdCodeType retdCodeType;
    
    public RetdObj(){
        this.setCode(RetdCodeType.NODEFINE);
    }

    public RetdObj(RealObj realObj) {
        this.setCode(RetdCodeType.NODEFINE);
        this.realObj = realObj;
    }

    /**
     * service layer set retdCodeType
     * 
     * @param retdCodeType
     */
    public void setCode(RetdCodeType retdCodeType) {
        this.retdCodeType = retdCodeType;
    }

    /**
     * the page or action use this method
     * 
     * @return
     */
    public int getCode() {
        return retdCodeType.getCode();
    }
    
    public void setRealObj(RealObj realObj) {
        this.realObj = realObj;
    }

    /**
     * the page or action use this method get the real object
     * @return
     */
    public RealObj getRealObj() {
        int retdCode = retdCodeType.getCode();
        if(retdCode>=PASSCODE_MIN&&retdCode<=PASSCODE_MAX)return realObj;
        else return null;
    }

}

 6、状态码封装类

 

/**
 *
 * 
 * 0--未定义--初始化
 * 200--成功
 * 201--成功,但是realobj无内容
 * 500--参数异常
 * 501--应用异常
 * 502--无权限
 * 600--未知异常
 */

public enum RetdCodeType {
    
    NODEFINE(0), PASS_OK(200), PASS_NODATA(201), EX_PARAM(500),EX_APP(501), EX_AUTH(502),EX_UNKNOWN(600);
    private int code;

    RetdCodeType(int code) {
        this.code = code;
    }

    public int getCode() {
        return this.code;
    }
    
    public static RetdCodeType valueOf(int code) {
    	switch(code) {
    	case 0 :
    		return NODEFINE;
    	case 200 :
    		return PASS_OK;
    	case 201 :
    		return PASS_NODATA;
    	case 500 :
    		return EX_PARAM;
    	case 501 :
    		return EX_APP;
    	case 502 :
    		return EX_AUTH;
    	case 600 :
    		return EX_UNKNOWN;
    	default :
    		return null;
    	}
    }
    
}

 7、service基础增删改查接口,针对webservice

 

public interface BaseService<Entity, PK extends Serializable> {
	/**
	 * 增加实体
	 * 
	 * @param entity
	 * @return
	 */
	public RetdObj<PK> save(Entity entity);

	/**
	 * 更新实体
	 */
	public RetdObj<PK> update(Entity entity);

	/**
	 * 合并实体
	 */
	public RetdObj<PK> merge(Entity entity);

	/**
	 * 更新实体
	 */
	public RetdObj<PK> refresh(Entity entity);

	/**
	 * 按ID删除对象
	 * 
	 * @param id
	 */
	public RetdObj<PK> delete(final PK id);

	/**
	 * 按ID查询对象
	 * 
	 * @param id
	 * @return
	 */
	public RetdObj<Entity> findById(final PK id);

	/**
	 * 按ID查询多个对象
	 * 
	 * @param ids
	 * @return
	 */
	public RetdObj<List<Entity>> findByIds(final Collection<PK> ids);

	/**
	 * 查询全部对象
	 * 
	 * @return
	 */
	public RetdObj<List<Entity>> getAll();

	/**
	 * 分页获取全部对象.
	 */
	public RetdObj<Page<Entity>> findAllByPage(final Page<Entity> page);
}

 8、对mvc前台提供的service基础接口

 

public interface FrontBaseService<Entity, PK extends Serializable> {
	/**
	 * 增加实体
	 * 
	 * @param entity
	 * @return
	 */
	public PK save(Entity entity);

	/**
	 * 更新实体
	 */
	public void update(Entity entity);
	public void saveOrUpdate(Entity entity);
	/**
	 * 合并实体
	 */
	public void merge(Entity entity);

	/**
	 * 更新实体
	 */
	public void refresh(Entity entity);

	/**
	 * 按ID删除对象
	 * 
	 * @param id
	 */
	public void delete(final PK id);

	/**
	 * 按ID查询对象
	 * 
	 * @param id
	 * @return
	 */
	public Entity findById(final PK id);

	/**
	 * 按ID查询多个对象
	 * 
	 * @param ids
	 * @return
	 */
	public List<Entity> findByIds(final Collection<PK> ids);

	/**
	 * 查询全部对象
	 * 
	 * @return
	 */
	public List<Entity> getAll();

	/**
	 * 分页获取全部对象.
	 */
	public Page<Entity> findAllByPage(final Page<Entity> page);

	/**
	 * 批量删除
	 */
	public void delete(PK[] ids);
}
分享到:
评论

相关推荐

    hibenate 对DAO的封装

    在Hibernate中,每个实体类通常对应一个DAO接口和其实现类。传统的做法是为每个实体类编写一套完整的CRUD方法,这无疑增加了大量重复的代码。为了解决这个问题,我们可以创建一个泛型DAO模板,该模板接受一个泛型...

    dao模式搭建过程

    - 为每个属性提供公共的setter和getter方法,以封装访问 - 添加适当的构造函数,方便实例化对象 2. 创建DAO接口: DAO接口定义了对数据库的基本操作,如增、删、改、查。步骤如下: - 创建新的包,如`cn.公司名...

    JSP,SSH框架学习日志3,DAO层.pdf

    首先,定义了一个公共接口`ICommonDAO`,它包含了一组通用的方法,如`save()`, `delete()`, `update()`, `findById()`, `findAll()`, `findByQuery()`以及分页查询的`queryForPage()`。这些方法涵盖了基本的数据操作...

    java后端开发规范.docx

    - Service/DAO 层方法命名遵循特定模式,如 `get`、`list`、`count`、`save`、`remove` 和 `update`。 7. **变量定义**: - 常量按功能分类,如 `CacheConsts` 和 `ConfigConsts` 分别存储缓存和配置相关常量。 ...

    Spring+Hibernate实现)Hibernate公用类

    在IT行业中,Spring和Hibernate是两个非常重要的框架,它们分别在...它通过泛化的DAO接口和实现,减少了重复代码,增强了项目的结构化和模块化。这种设计模式在实际项目中非常常见,也是Java企业级开发的最佳实践之一。

    java代码命名规范.doc

    - `service`层处理业务逻辑,对应服务接口和实现。 - `web`层处理前端交互,如JSP页面。 - `util`层包含通用工具类。 - `test`层包含单元测试代码,主要测试`service`层。 以上规范旨在提升代码质量和团队协作...

    技术笔记(第一部分整理)

    通过实体类、DAO接口和服务接口等组件,可以实现对员工表的增删改查等操作。 ##### 测试代码 测试代码验证了对部门表和员工表的操作是否符合预期,确保了应用的正确性。 #### 条件查询+分页查询 条件查询指的是...

    2022最新java面试题..对java面向对象得理解;面向对象得程序设计很接近于我们人类自然得思维,相对于面向过程得程序设计

    1. 获取WSDL文件,理解服务的接口和消息格式。 2. 构造符合WSDL定义的SOAP请求消息。 3. 发送SOAP消息到服务端口。 4. 接收并处理服务返回的SOAP响应。 在Java中,可以使用JAX-WS(Java API for XML Web Services)...

    2012最新java面试题.doc

    - **抽象**:抽象是提取现实世界中的实体的共同特征,创建抽象类或接口。这使得代码更易于理解和维护。 - **继承**:继承允许一个类(子类)继承另一个类(父类)的属性和方法,实现了代码的重用,同时也支持多态...

    java开发规范.pdf

    1. 对于Service和DAO类,基于SOA的理念,公共接口应该是抽象的。 2. 枚举类名应添加Enum后缀,枚举成员名称全大写,单词间用下划线隔开。 3. 避免使用不规范缩写,以免降低代码可读性。 代码风格规约: 1. 虽然Java...

    Spring Boot中Controller间的调用

    如果Controller间有共享逻辑,可以考虑提取至公共服务或抽象类。通过解耦和模块化设计,可以避免直接的Controller间调用,提高代码的可测试性和可维护性。 总之,虽然Spring Boot提供了Controller间调用的手段,但...

    代码编写规范

    12. 类名后缀:根据分层架构,Action 类以 `Action` 结尾,实体类以 `Entity` 结尾,Service 接口以 `Service` 结尾,Dao 接口以 `Dao` 结尾,以明确其所属的层次和作用。 13. 事务处理:对于需要事务管理的方法,...

    JavaEE初级笔试题.doc

    18. Java项目5层结构:通常包括表现层(Presentation Layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data Access Layer)、服务层(Service Layer)和持久层(Persistence Layer)。 19. JDBC:Java ...

    基于Dubbo的分布式系统架构-简易版支付系统源码

    8. **pay-common-web**:公共Web模块,可能包含了一些共用的Controller、Service或DAO,提供跨模块的通用功能。 9. **pay-service-notify**:通知服务模块,负责向用户发送支付成功或失败的通知,可以是短信、邮件...

    通用查询,保存方法

    首先,通用查询的设计往往基于面向对象编程的原则,通过抽象出一个公共的查询接口,实现对不同数据源的统一访问。这种设计可以极大地提高代码的复用性和可维护性。在实现时,可能会涉及到SQL语句的动态生成,根据...

    Struts2+Spring+Hibernate整合的例子.doc

    在Action类中,通过调用Service层的方法来处理业务,而Service层又会调用DAO层的方法来操作数据库。DAO层通常会使用Hibernate的Session接口进行数据库交互。 在Struts2的配置文件(struts.xml)中,需要定义Action...

    SSH笔记-整合Spring2、Struts2、Hibernate4

    在SSH整合中,Spring主要负责管理Bean的生命周期和事务控制,以及提供数据访问接口(DAO)的抽象。 1. **依赖注入**:Spring通过XML配置或注解方式实现对象间的依赖关系,降低耦合度。 2. **AOP**:Spring的AOP模块...

    org.greenscape.site.service:Site的服务层模块

    1. **接口**: 定义了服务层所提供的公共业务方法,比如创建新站点、更新现有站点信息、删除站点、查询站点列表等。 2. **实现类**: 实现了接口中的抽象方法,提供了具体的业务逻辑。这些实现类可能会依赖于数据访问...

    java编码规范

    - `com.google.service`:业务接口外部调用类。 - `com.google.common`:基本配置类。 - `com.google.excel`:生成 Excel 的操作类。 2. **文件名** - 公共类的文件名应当与类名完全相同,包括大小写。 3. **...

Global site tag (gtag.js) - Google Analytics