`
确实比较男
  • 浏览: 115672 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

J2EE开发框架搭建(8) - 实现service层的封装 BaseService和BaseServiceImpl

阅读更多

现在的项目大部分都是基于3层架构的,前面已经实现了BaseRepository,类似的本节继续实现service成的封装

1. 首先查看service的接口BaseService:

 

public interface BaseService<T extends AbstractEntity<ID>, ID extends Serializable> {
	/**
	 ** 保存单个实体
	 * @param m  实体
	 * @return 返回保存的实体
	 */
	public T save(T t);
	public List<T> save(List<T> entities);
	/**
	 * 根据主键删除相应实体
	 * @param id 主键 可以是单个对象id,多个对象id用逗号分隔,数组,list....
	 */
	public void remove(ID... ids);
	/**
	 * 删除实体
	 * @param m  实体
	 */
	public void remove(T t);
	public void remove(List<T> entities);
	public void removeAll();
	/**
	 * 更新单个实体
	 * @param m 实体
	 * @return 返回更新的实体
	 */
	public void update(T t);
	/**
	 * 查询单个对象
	 * @param id
	 * @return
	 */
	public T findObject(ID id);
	/**
	 * 按条件查询对象
	 * @param params
	 * @param page
	 * @return
	 * @throws RuntimeException
	 */
	public T findObject(Searchable searchable) throws RuntimeException;

	/**
	 * 实体是否存在
	 * @param id 主键
	 * @return 存在 返回true,否则false
	 */
	public boolean isExist(ID id);
	/**
	 * 判断是否存在
	 * @return 存在 true 不存在 false
	 */
	public boolean isExist(Searchable searchable);
	/**
	 * 查询出所有的记录
	 * @return
	 */
	public List<T> findAll();
	/**
	 * 按照顺序查询所有实体
	 * @param sort
	 * @return
	 */
	public List<T> findList(Sort sort);
	/**
	 * @param searchable     条件
	 * @return
	 */
	public List<T> findList(Searchable searchable);
	public List<T> findList(List<ID> ids);
	/**
	 * 分页及排序查询实体
	 * @param pageable  分页及排序数据
	 * @return
	 */
	public Page<T> findPage(Pageable pageable);
	/**
	 * 按条件分页并排序查询实体
	 * @param searchable  条件
	 * @return
	 */
	public Page<T> findPage(Searchable searchable);
	/**
	 * 统计实体总数
	 * @return 实体总数
	 */
	public Long count();
	/**
	 * 按条件分页并排序统计实体数量
	 * @param searchable 条件
	 * @return
	 */
	public Long count(Searchable searchable);
	/**
	 * @param hqlKey
	 * @param params 可以使map,数组,list,也可以是以多个参数
	 */
	public void update(String sqlKey, Object... params);
	/**
	 * 自定义hql查询
	 * @param hqlKey
	 * @param params   可以使map,数组,list,也可以是以多个参数
	 * @return
	 */
	public List<T> findList(String sqlKey, Object... params);
	public Page<T> findPage(Pageable pageable, String sqlKey, Object... params);
	/**
	 * 自定义hql删除
	 * @param hqlKey
	 * @param params 可以使map ,数组,list,也可以是以多个参数
	 */
	public void remove(String sqlKey, Object... params);
}

在这个接口中已经包含了常用的方法,增删改查以及分页,统计数量等方法。

 

2. 接着查看service的实现类BaseServiceImpl,实现在BaseService的这些接口都要通过BaseRepository ,所以要给BaseServiceImpl指定当时运行时刻的BaseRepository的实现类,这里自己定义一个注解@Service,代码如下:

 

/**
 *<span style="background-color: rgb(255, 0, 0);"> type必填 ,若type,name两个都填,name有效</span>
 * @author silentwu
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@org.springframework.stereotype.Service
public @interface Service {
	/**
	 * service在spring容器中的名称
	 */
	String value() default "";
	/**
	 * Repository的实例名称
	 * 
	 * @return
	 */
	String name() default "";
	/**
	 * Repository的实例类型
	 * 
	 * @return
	 */
	Class<?> repositoryType();
}

在BaseServiceImpl中,我们获取到这个注解,从而可以获取到repositoryType, 在BaseServiceImpl中的代码:

 

private BaseRepository<T, ID> baseRepository;
@PostConstruct
@SuppressWarnings("unchecked")
public void init() throws Exception {
	Service repository = this.getClass().getAnnotation(Service.class);
	if (Utils.isNotEmpty(repository)) {
		if (<span style="background-color: rgb(255, 0, 0);">Utils.isNotEmpty(repository.name())</span>) {
			baseRepository = SpringUtils.getBean(repository.name());
		} else if <span style="color:#ff0000;">(Utils.isNotEmpty(repository.repositoryType()</span>)) {
			baseRepository = (BaseRepository<T, ID>) SpringUtils.getBean(repository.repositoryType());
		} else {
			throw new Exception("com.hqhop.framework.common.bind.annotation.Repository 注解的name和type必填一个!");
		}
	} else {
		throw new Exception("BaseServiceImpl的实现类必须添加上com.hqhop.framework.common.bind.annotation.Repository这个注解 !");
	}
}

@Service的注解,repositoryType必须指定,若指定了name属性,那么name属性有效

 

其他的接口实现就不多说了,都是通过BaseRepository 对象来实现的

 

 

 

 

 

 

 

 



分享到:
评论
3 楼 确实比较男 2014-11-04  
kolen001 写道
更新方法update  返回是void !

嗯  是void    
2 楼 kolen001 2014-10-30  
更新方法update返回值类型是 void !
1 楼 kolen001 2014-10-30  
更新方法update  返回是void !

相关推荐

    xmljava系统源码-iuap-pap-baseservice:iuap快速开发体系中的后台支持部分,通过与iuap前端开发框架结合,可快速

    iuap-pap-baseservice框架属于iuap快速开发体系中的后台支持部分,通过与iuap前端开发框架结合,可快速的实现一套业务表单系统开发. 特性 集成图形化快速建模工具—— 快速启动业务表单开发 简化单表/主子表CRUD服务...

    java泛型BaseDao与BaseService

    在Java开发中,BaseDao和BaseService是常见的设计模式,用于实现数据访问层(DAO)和业务逻辑层(Service)的抽象基类。通过结合泛型,我们可以创建更通用、灵活的代码,减少冗余并提高代码质量。 首先,我们来理解...

    SSH框架网上商城项目第2战之基本增删查改、Service和Action的抽取

    在本SSH框架网上商城项目的第二阶段,我们将关注的重点放在了基本的数据操作,即增删查改(CRUD),以及业务逻辑层(Service)和控制层(Action)的抽象与抽取。这一过程对于任何基于SSH(Struts2、Hibernate、...

    service层的单体操作抽象设计

    - Spring框架:在Java开发中,Spring框架常用于实现服务层的依赖注入和事务管理。 - MyBatis或JPA:可能用于数据库操作,将服务层与数据访问层解耦。 总之,"service层的单体操作抽象设计"关注的是如何在Java环境...

    数据库框架Mybatis-plus,实现java代码对数据库的增删改查

    这个框架在Mybatis的基础上进行了扩展,添加了许多实用功能,减少了开发时编写重复的SQL和DOM映射代码。 Mybatis-plus的核心概念包括: 1. **实体类(Entity)**:代表数据库中的表,实体类中的属性对应表中的字段...

    springMVC+Mybatis封装整合

    springMVC+Mybatis封装整合:整合搭建已经完成不再述,本框架特色主要针对Mybatis框架BaseDao,BaseService,BaseServiceImpl封装,有点贵,本人也是循序见进到这一步,花了将近一个月时间,之前发布版本可以不下载...

    service业务类

    在软件开发领域,Service业务类是应用程序中一个重要的组成部分,主要负责处理与业务逻辑相关的操作。业务逻辑是指应用的核心功能,...合理设计和实现Service层,能够有效地提升系统的稳定性和可维护性,降低开发成本。

    wind快速开发框架-其他

    wind是一个基于spring-boot的快速开发框架,可与Mybatis/Hibernate共存。 wind特点: 查询支持返回指定列,返回基本类型(Long/BigDecimal等) lambda方式构造条件,支持类型推断 基于jdbc-template service层切入,...

    DWR+JPA DWR直接访问SERVICE层,并直接处理DAO返回的BEAN.doc

    在IT领域,DWR(Direct Web Remoting)是一种JavaScript库,它允许Web应用程序直接调用服务器端的Java方法,从而实现Ajax(异步JavaScript和XML)功能。JPA(Java Persistence API)是Java平台上的一个标准,用于...

    ssh2框架下多表查询的单个模块开发

    在该框架下进行多表查询的单个模块开发时,通常涉及到实体类(Entity)、数据访问对象(DAO)、业务逻辑层(Service)以及控制器(Controller)的设计与实现。本文将详细介绍基于SSH2框架下多表查询单个模块的具体开发流程。...

    java javascript

    综上所述,Java Web应用中,Action层、Service层、DAO层和Domain层通过注解驱动的Spring管理,实现了各层之间的解耦和协同工作。同时,iBatis作为数据访问层的工具,提供了灵活的SQL映射机制,方便数据库操作。...

    SSM代码生成工具/改进版Mybatis代码生成工具

    4.service的实现类中,新增和更新操作已实现字符串解析功能.此类尤其建议使用超类(basic包下)自适应获取数据库的分页方法. 5.controller: 包含add,update,delete,info,list方法,包含try-catch与返回值. 注:超类使用...

    mybatis通用mapper

    MyBatis通用Mapper是一款在MyBatis框架基础上封装的工具,旨在简化开发过程中对数据库 CRUD(创建、读取、更新、删除)操作的繁琐过程。它通过提供预定义的SQL映射方法,使得开发者可以无需编写大量的XML配置文件,...

    zheng企业级开发框架-其他

    zheng项目不仅仅是一个开发架构,而是努力打造一套从前端模板 - 基础框架 - 分布式架构 - 开源项目 - 持续集成 - 自动化部署 - 系统监测 - 无缝升级 的全方位J2EE企业级开发解决方案。 zheng项目是一个基于Spring+...

    XXF.BaseService.DistributedCache-BSF-DistributedCache.zip

    XXF.BaseService.DistributedCache通过将数据分散存储在多个节点上,实现了数据的分布式存储,这不仅提升了缓存的容量,还实现了负载均衡,确保了系统的响应速度。 该中间件的一个关键特性是集群支持。通过构建多...

    单点登录源码

    单点登录, SSM框架公共模块 ├── zheng-admin -- 后台管理模板 ├── zheng-ui -- 前台thymeleaf模板[端口:1000] ...## 环境搭建(QQ群内有“zheng环境搭建和系统部署文档.doc”) #### 开发工具: ...

    整合maven+spring+springmvc+mybatis实现ssm通用增删查改API

    "整合maven+spring+springmvc+mybatis实现ssm通用增删查改API"项目旨在通过搭建SSM框架,利用Maven管理依赖,借助Spring的IoC和AOP特性,结合SpringMVC处理Web请求,以及MyBatis简化数据库操作,最终封装出一套可...

    基于SSHI架构的开发平台技术方案

    - **业务逻辑层(Service)**:包含业务逻辑的具体实现,如数据的处理和业务流程的控制等。 - **数据访问层(DAO)**:负责与数据库交互,实现数据的增删改查操作。 **2. Service实现类继承方式** 为了简化服务层...

    基于JavaWEB+SSM+mysql框架构建的在线商城系统源码+数据库+项目说明(课程设计).zip

    实现了 BaseService 类对 Service 层进行抽象。通过拦截器实现了方法级粒度的鉴权,通过AOP实现了参数校验。 --------------------------- **演示**:[https://small.ડ.com/][1] 可自行注册账号,或使用后台查看...

    报修系统开发文档.docx

    总结,报修系统开发涉及的主要知识点包括:.Net框架、Entity Framework、MVC架构、三层设计、数据库设计、ADO.NET实体模型、数据访问层、业务逻辑层、控制器与视图、Json序列化和前端Ajax交互。通过这些技术的综合...

Global site tag (gtag.js) - Google Analytics