`

转:有多少人在滥用 service+serviceImpl,又有多少人在误用myBatis

 
阅读更多
被滥用的service+serviceImpl

    JAVA大概是从2003年开始流行,我也是从那时开始学习JAVA。在这十多年中,相关技术推陈出新,我切身感受到这些变化。虽然很多程序员不断追随新技术,但未必领悟到这些变化的推动因素。     最近我看到不少新开工的项目,仍然大量采用 “service+serviceImpl、dao+daoImpl” 的代码结构,说真的,我有点痛心,似乎这种做法是理所当然的,似乎这成了一个技术套路。 今天,我想说的是,这样做是不合理的、没有意义的、过时的。

从代码混战到分层分块

    由于java的流行和互联网的普及,企业网站、企业应用的开发开始从C/S转为B/S, 所以从那时起做好一个WEB应用很重要。     刚开始,也即2002~2003年,大家都是采用jsp+javabean+jdbc的方式,也不知道怎么分层,有的干脆把所有代码放在jsp中。 后来大家发现这样没法玩了,系统根本没法维护,也不安全,于是就有了MVC这样的架构模式。     MVC的理念挽救了这种局面,并且,运用该理念的模块化开发框架Struts出现了。MVC和Struts的广泛使用,使得开发WEB应用在业界达成了一个共识,那就是WEB应用基本可分为表现层、控制层、业务处理层。

    到2004年,对WEB应用进行分层、分模块已是程序员的常识。 但是,有追求有讲究的企业发现了新的问题,那就是如何使自己的应用或产品既可以跑在mysql上,也可以跑在oracle上。 这个问题对程序员来说,就是如何编写业务处理层,使之易于移植到其它数据库。

为解决移植性问题而产生的套路

    2005年以前的大多数项目都是直接在业务处理层的Service类中嵌入JDBC代码,这就使得这个Service类与数据库紧藕合,在换一种数据库的情况下,就要修改Service类中的sql。 根据软件设计的开闭原则,软件应该对修改关闭、对扩展开放。 因此,那时聪明的程序员就把这个Service类设计成一个接口,使控制层只依赖这个接口,于是就有了controller+service+serviceImpl;这样,当某天这个应用要跑在其它数据库上时,就而只需要增加一个serviceImpl类。 这就是service+serviceImpl套路产生的背景。

    在那时service+serviceImpl并非解决这个问题的唯一方案,还有部分项目,他们的团队更有想法,他们把与数据库打交道的代码从service类中提取出来,成为单独的“数据访问层”(也称为“持久层”),于是形成了这样的层次结构 controller+service+dao+daoImpl。 了不起!这样对不同的数据库,可以有对应的daoImpl。 相比前面那种方案,而扩展一个daoImpl比扩展一个serviceImpl省事多了。

数据访问层的解决方案或框架

    由于传统的JDBC代码,繁锁费事,因此不少人或团队尝试将这些代码封装起来,以使程序员不用再编写操作数据库连接、游标、数据集这样的逻辑。这样的工具通常以O/RMapping的思想作为基础,也称为O/RMapping框架。 2006年,hibernate从多种ORMapping框架中脱颖而出,很多项目中的 serviceImpl类开始采用hibernate来实现。hibernate强大,是把双刃剑,易上手但用好难、扩展性好但效率一般。(这也是我曾自研easydb的原因,代码: https://github.com/HuQingmiao/easydb)

    2010年,myBatis诞生,2012年开始流行并讯速得到广泛认可。由于myBatis本身是采用xml文件实现的,因此能极好地融入到项目中,只需要把service+dao+daoImpl 中的daoImpl类去掉,改由其mapp.xml实现即可,即service+dao+mapper.xml。 然而,还有很多人在用myBatis的项目中,采用service+serviceImpl+ dao+daoImpl+ mapper.xml, 真的是浪费青春。所以,我说很多人在误用myBatis。
分享到:
评论

相关推荐

    界面版MyBatis代码生成器:生成entity、dao、service、serviceImpl、Mapper、Assist

    MyBatis-CMEU是一款基于MyBatis框架的代码生成工具,专为提高开发效率而设计。这款界面版的代码生成器允许开发者快速地自动生成常见的Java开发组件,包括Entity对象、DAO接口、Service接口及其实现类、Mapper XML...

    mybatis-generator自动生成代码[增加Service的生成]

    标题 "mybatis-generator自动生成代码[增加Service的生成]" 指的是MyBatis Generator(MBG)这一工具,它能够根据数据库表结构自动产生Java持久层代码,大大减轻了开发人员的手动编码工作。在描述中提到"增加Service...

    mybatis反向生成代码工具(包含service,serviceImpl,dao,entity,daoImpl)

    在开发过程中,我们经常需要编写大量的DAO(数据访问对象)、Service、ServiceImpl、Entity以及DAOImpl等类来完成数据库操作。然而,手动编写这些代码不仅耗时,而且容易出错。为了解决这个问题,"mybatis反向生成...

    springboot+mybatis+mysql自动生成代码

    首先是springboot+mybatis+mysql,然后 运行util包里的CodeGenerator,可以根据表生成类包括 controller mapper mapper.xml service serviceImpl po

    spring+mybatis+cxf框架

    Spring、MyBatis和CXF是Java开发中常用的三大开源框架,它们分别在不同层面上为应用程序提供服务。Spring作为一款全面的后端应用框架,提供了依赖注入(DI)、面向切面编程(AOP)以及丰富的上下文管理功能。MyBatis...

    idea快捷键大全

    在IDEA中,快捷键被分为多个类别,包括代码编辑、导航、版本控制、调试等。例如: 1. **代码编辑**: - `Ctrl + Alt + Insert`:创建新类、方法或字段。 - `Alt + Insert`:生成构造函数、getter/setter、equals...

    JavaBean+MyBatis注解,根据表结构自动生成

    ##### dao.template 数据库接口Dao(mybatis接口方式,在方法上写sql,复杂的使用sqlProvider) ##### daoSqlProvider.template 复杂sql提供者 ##### service.template 对外开放的接口 ##### serviceImpl....

    Spring Boot Mybatis 自动生成Entity,controller、serviceImpl ,Dao,方便开发,无需手写

    在现代的Java开发中,Spring Boot和Mybatis框架的结合为开发者提供了强大的后端开发工具。Spring Boot简化了Spring的应用配置,而Mybatis则是一个轻量级的持久层框架,两者结合可以高效地处理数据库操作。当我们需要...

    mybatis的逆向工程代码

    逆向工程(Reverse Engineering)在MyBatis中的应用主要是指自动生成MyBatis的Mapper接口、Mapper XML配置文件以及对应的实体类,极大地简化了开发过程,减少了手动编写这些重复代码的工作量。 MyBatis逆向工程的...

    SpringBoot+SpringMvc+Mybatis校园理工说

    开发者会在Mybatis的Mapper接口中定义SQL方法,通过XML或注解方式配置SQL语句,然后在Service层调用这些方法进行增删查改操作。 项目中的"news"可能代表新闻相关的模块,包含新闻的CRUD操作。在实际开发中,这可能...

    SpringMybatisSpringMVC:Spring + Mybatis + SpringMVC

    SpringMybatisSpringMVC Spring+Mybatis+...web页面传id -> controller (有注入的service)->service.serviceImpl方法->实现dao.xml中的select语句 ->返回model->controller(model and view) model+jsp->返回响应

    springmvc+spring+mybatis的整合

    <property name="configLocation" value="classpath:mybatis-config.xml" /> ``` - **配置事务管理器**: 用于事务管理。 ```xml ``` 3. **创建MyBatis配置文件`mybatis-config.xml`**: - 设置`...

    Spring + Spring Boot + MyBatis + MongoDB的整合教程

    通常我们会按照约定的目录结构组织代码,如`Controller`目录存放控制器,`Entity`目录存放实体类,`Service`目录存放业务逻辑层,`ServiceImpl`存放服务的实现类。 3. **配置文件**: 在`application.yml`中配置...

    springBoot+Mybatis-plus

    6. **代码生成器**:Mybatis-Plus提供代码生成器,可以根据数据库表结构自动生成Entity、Mapper接口、ServiceImpl和Mapper XML文件,大大节省开发时间。 在这个简单的项目中,我们可以通过访问HTML页面来展示...

    反射生成dto service serviceimpl mapper model类 集成mybatis-plus

    反射生成dto service serviceimpl mapper model类,自动生成代码集成mybats-plus 让开发更高效

    mybatis plus+springboot反向生成代码

    在IT行业中,开发人员经常需要处理大量的数据操作,而Mybatis Plus和SpringBoot的结合则为这一过程提供了极大的便利。本篇文章将详细讲解如何利用Mybatis Plus与SpringBoot进行反向生成代码,以及这一过程中的关键...

    mybatis+Oracle做批量导入时的坑

    在Java开发中,MyBatis框架与Oracle数据库结合进行批量数据导入时,可能会遇到一些问题。本文将详细探讨这些问题,并提供一种可行的解决方案。 首先,批量插入操作在DAO层,我们定义了一个`insertList`方法,它接收...

    PowerfulObject全自动基于Mybatis生成Java代码工具.rar

    1、软件作者:yannannan闫楠... (1)PowerfulObject主要生成节点:(Controller层、entity实体层、Service/ServiceImpl、Mybatis、mybatisXML) (2)支持两种生成方式(全自动一套一体化生成、和灵活单节点功能生成)

    springboot+mybatis代码生成器

    1、springboot+mybatis代码生成器, 支持oracle数据库。 2、可以根据需求简单配置生成entity,dao,mapper.xml, service, serviceimpl, controller 等。

Global site tag (gtag.js) - Google Analytics