import java.util.List; public interface BaseService<M extends java.io.Serializable, PK extends java.io.Serializable> { public M findById(PK id); public List<M> findByHQL(String hql, Object... params); public void update(M entity); public PK save(M entity); public void saveOrUpdate(M entity); public void delete(M entity); public void deleteById(PK id); } import java.util.List; import org.springframework.transaction.annotation.Transactional; @Transactional public abstract class BaseServiceImpl<M extends java.io.Serializable, PK extends java.io.Serializable> implements BaseService<M, PK> { //这里不能使用spring3的ioc注入,泛型只在编译期间有效,所以必须在编译时决定类型。 //@Autowired spring4新特性泛型注入可以实现 //protected BaseDao<M, PK> dao; /*public void setDao(BaseDao<M, PK> dao) { this.dao = dao; }*/ protected BaseDao<M, PK> dao; @Override public M findById(PK id) { return this.dao.findById(id); } @Override public List<M> findByHQL(String hql, Object... params) { return this.dao.findByHQL(hql, params); } @Override public void update(M entity) { this.dao.update(entity); } @Override public PK save(M entity) { PK id = this.dao.save(entity); /* test rollback if (id != null) throw new RuntimeException("runtime exception throw from " + this.getClass().getSimpleName() + ".save()"); */ return id; } @Override public void saveOrUpdate(M entity) { this.dao.saveOrUpdate(entity); } @Override public void delete(M entity) { this.dao.delete(entity); } @Override public void deleteById(PK id) { this.dao.delete(this.findById(id)); } } /////////////////////////////////////////////////////////////// public interface StudentService extends BaseService<Student, String> { /** * 添加 IBaseService 没有定义的方法 */ public void serviceMethod(); } import javax.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service("studentService") @Transactional public class StudentServiceImpl extends BaseServiceImpl<Student, String> implements StudentService { protected StudentDao studentDao; @Resource(name = "studentDao") public void setStudentDao(StudentDao dao) { super.dao = dao; this.studentDao = dao; } @Override public void serviceMethod() { this.studentDao.studentMethod(); } }
相关推荐
这个项目"springboot-web-jsp01:mybatis通用servicev.1.0"提供了一个基础的Spring Boot Web应用,结合了MyBatis和通用Service设计,对于初学者或开发者来说,是一个很好的学习和实践案例,帮助理解如何在实际项目中...
标题中的“hibernate4 通用dao,service”指的是在Java开发中使用Hibernate框架实现的通用数据访问对象(DAO)和业务服务层(Service)。Hibernate是一个流行的对象关系映射(ORM)工具,它允许开发者使用面向对象的...
Mybatis通用DAO设计封装主要涉及的是在Java开发中如何高效地使用Mybatis框架进行数据库操作。Mybatis是一款轻量级的持久层框架,它避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。通过提供自定义SQL、存储...
"service层的单体操作抽象设计"这个主题着重于如何在服务层进行高效且可复用的代码组织。这篇博文通过给出的具体文件名,我们可以推测博主可能在讨论如何在Java环境下构建一个服务层的抽象模型。 1. **接口定义** ...
本文将详细探讨基于Java的两个通用安全模块的设计与实现,旨在提供一套适用于多种应用场景的安全解决方案。 首先,我们来了解一下Java语言在安全方面的优势。Java作为一种面向对象的语言,其设计时就考虑到了安全性...
在本项目中,我们主要探讨了两个基于Java的通用安全模块的设计与实现,这些模块对于保护软件系统免受潜在威胁至关重要。Java作为一种广泛使用的编程语言,具有跨平台、安全性强的特点,因此,构建在Java上的安全模块...
通用权限管理系统概要设计说明书 通用权限管理系统是指管理和维护系统内所有资源的权限控制系统。该系统的设计目标是对应用系统的所有资源进行权限控制,例如应用系统的功能菜单、各个界面的按钮控件等进行权限的...
在MyBatis框架中,Mapper是SQL操作的接口,而逆向工程(Reverse Engineering)则是一种通过分析现有系统来创建新设计或改进现有设计的方法。通用Mapper逆向工程就是利用这一概念,通过解析数据库的表结构信息,自动...
RESTful Web Service是一种遵循REST(Representational State Transfer,表述性状态转移)架构约束的Web服务设计风格。它强调资源的表示和通过HTTP方法(GET、POST、PUT、DELETE等)进行操作。在SSM框架中,可以通过...
**基于DDD领域驱动设计通用后台权限系统开发** 领域驱动设计(Domain-Driven Design,简称DDD)是一种软件开发方法,强调以业务领域为中心进行系统设计,将复杂的业务逻辑转化为清晰的模型。在“基于DDD领域驱动...
以"base"命名的压缩包文件可能包含了Service层的基础组件或者基类,这些基类通常会提供一些通用的方法,如日志记录、异常处理、事务管理等。开发者可以通过继承这些基类来快速构建自己的Service类,避免重复编写相同...
`moffice-service-base` 则是基础服务包,它提供了一些通用的服务和基础类,为`moffice-service` 提供支持。这个库可能包括了数据模型、异常处理、日志记录、配置管理等方面的基础组件,帮助开发者更好地管理和组织...
Web Service客户端请求具备UDDI(通用描述、发现与集成)功能的服务中心提供查找服务,从而获取相应的WSDL(Web服务描述语言)的网络链接地址。WSDL是XML格式的一种,用于描述网络服务和绑定机制,定义了端点组、...
它强调服务的通用性,以及设计新服务时要考虑用户体验、服务流程、员工培训和客户关系管理。早期的市场调查和客户互动对于确保服务的成功至关重要。 6. 营销与产品开发的协同: 营销部门提供市场需求信息,为新...
《通用机器学习平台的架构设计》 在当前大数据与人工智能技术快速发展的时代,构建一个高效、灵活且可扩展的通用机器学习平台至关重要。星环科技作为行业内的领先者,提出了其通用机器学习平台的架构设计,旨在解决...
4. 统一接口:REST通过通用的接口(如HTTP方法)来操作资源,简化了客户端和服务器的实现。 在实际开发中,采用REST架构设计Web服务,开发者需要关注以下几点: 1. 设计清晰的资源模型:根据业务需求,定义具有...
ServiceTool V1.0.5.0 是一款专为佳能(Canon)多款打印机型号设计的维护工具,包括MP198、MP258、MP276、MP496、MP558、MP568以及MP648。这款软件旨在帮助用户解决与这些打印机相关的各种问题,提供诊断、修复、...
QT是一个强大的、跨平台的应用程序开发框架,而C++则是一种通用的、面向对象的编程语言,两者的结合为开发高效且可移植的服务提供了可能。 首先,了解服务和守护进程的概念是必要的。在操作系统中,服务是一种在...
- **后端服务设计**:采用轻量级3S(Simple Storage Service)方案作为数据存储与管理的核心组件。 - **通信机制**:前后端之间的数据交互采用HTTP/HTTPS协议,确保数据传输的安全性。 4. **关键技术和工具**: ...