- 浏览: 24940 次
- 性别:
- 来自: 广州
文章分类
最新评论
被滥用的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。
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。
发表评论
-
Spring Junit 读取WEB-INF下的配置文件
2018-01-25 10:31 601测试环境:Spring3.0.5 + Junit4.8.1 ... -
@Autowired和new的区别
2018-01-25 10:35 2763@Autowired相当于setter,在注入之前,对象已经实 ... -
Spring、使用注解方式装配对象(@Resource、@Autowired)
2018-01-25 10:33 621首先,引入注解所使用的Jar包 :common-anno ... -
阿里巴巴java开发手册 1.2
2017-07-07 20:28 619前言 《阿里巴巴 Java 开 ... -
转: Java之CountDownLatch使用
2017-07-04 16:23 3561、类介绍 一个同步辅助类,在完成一组正在其他线程中执行 ... -
SimpleDateFormat线程安全重现与解决
2017-07-04 14:59 653一. 为什么SimpleDateFormat不是线程安全的 ... -
Thread.join()方法详解
2017-07-04 11:15 810API: join public final ... -
hashMap优化
2017-06-30 15:51 4451 集合初始化时,指定集合初始值大小。 说明:Ha ... -
jdk7 Collections.sort()引发的IllegalArgumentException
2017-06-30 15:26 1571一 IllegalArgumentException的重 ... -
java内部类:如何使用
2017-06-29 16:57 483一 定义:放在一个类的内部的类我们就叫内部类。 二、 ... -
ArrayList循环遍历并删除元素的常见陷阱
2017-06-29 11:22 319在工作和学习中,经常碰到删除ArrayList里面的某个元 ... -
转: Eclipse中使用github
2017-06-28 14:24 3451.安装egit插件 在Eclipse中选择help-& ... -
github的注册添加删除
2017-06-28 14:07 4381 官网地址:https://github.com,进行注 ... -
eclipse快速创建标准maven管理的javaEE、web项目
2017-06-28 11:10 3791 先安装 eclipse maven 插件的安 ... -
翻译: 深入理解Java Integer的缓存策略
2017-06-26 17:49 389本文将介绍 Java 中 Intege ... -
@WebServlet注解配置问题记录
2017-06-23 10:34 2251@WebServlet 该注解用于在Web应用中定义Serv ... -
性能优化之ArrayList
2017-06-22 14:25 378ArrayListTest 写道 package cn.c ... -
LinkedList和ArrayList的使用及性能分析
2017-06-22 10:54 378转自http://www.jb51.net/arti ... -
ArrayList源码分析
2017-06-22 10:36 442ArrayList就是传说中的动态数组,就是Array的 ...
相关推荐
界面版MyBatis代码生成器,运行要求安装jdk1.8,自动生成entity、dao、service、serviceImpl、Mapper、Assist等。包含工具、文档、源码。
首先是springboot+mybatis+mysql,然后 运行util包里的CodeGenerator,可以根据表生成类包括 controller mapper mapper.xml service serviceImpl po
##### dao.template 数据库接口Dao(mybatis接口方式,在方法上写sql,复杂的使用sqlProvider) ##### daoSqlProvider.template 复杂sql提供者 ##### service.template 对外开放的接口 ##### serviceImpl....
SpringMybatisSpringMVC Spring+Mybatis+...web页面传id -> controller (有注入的service)->service.serviceImpl方法->实现dao.xml中的select语句 ->返回model->controller(model and view) model+jsp->返回响应
mybatis的逆向工程代码 mybatis的逆向工程代码 mybatis的逆向工程代码
反射生成dto service serviceimpl mapper model类,自动生成代码集成mybats-plus 让开发更高效
因为这是本人亲自试用过的工具,自己感觉好牛逼啊,绝对的货真价实,mybatis反向生成工具,不会用的话本人可以教授使用,所以资源分偏高
1、软件作者:yannannan闫楠... (1)PowerfulObject主要生成节点:(Controller层、entity实体层、Service/ServiceImpl、Mybatis、mybatisXML) (2)支持两种生成方式(全自动一套一体化生成、和灵活单节点功能生成)
1、springboot+mybatis代码生成器, 支持oracle数据库。 2、可以根据需求简单配置生成entity,dao,mapper.xml, service, serviceimpl, controller 等。
SpringBoot+MyBatis-Plus代码生成器,生成Controller,POJO,Dao,Mapper.xml,Service,ServiceImpl等等,IDEA直接运行就可以,运行输入数据库表名,如果多个表(,)号区分。(修改数据库地址)
项目为springBoot三层架构(controller+service/serviceImpl+Dao)+myBatis+thymeleaf开发模式完整的整合方案,可供初学者参考学习~ 通过项目可了解依赖包引入,数据源设置,controller+service/serviceImpl+Dao相互...
javaWeb 工具,根据entity自动生成实体类的Controller, Service, ServiceImpl, Repository。并拥有基本的增删改查,是快速搭建网站的工具类
Spring Boot基于 Mybatis 自动生成Entity,controller、serviceImpl ,Dao,方便开发,无需手写
build-SSM-FrameworkThis project is the SSM(Spring+Spring MVC+Mybatis) build for the java web project.工程目录src/main/java下为工程的源码,其中:com.shenqingtong.certification.controller为controller层...
mybatis 代码生成器,可以直接生成 entity 、xml、mapper 、 service、serviceImpl、controller 文件,节省开发时间。
根据表,自动生成实体及map
自定义mybatis-generator自动生成controller、service、serviceImpl、dao、entity、mapperXml文件
服务层:Service接口和ServiceImpl接口实现类 控制层:页面功能代码Controller 前端视图层 2.Mybatis逆向工程工作流程 MyBatis官方为我们提供了一个逆向工程,通过这个逆向工程,只需要建立好数据表,MyBatis就会...
mybatis plus easycode controller,entity,mapper,service,serviceimpl模板,感兴趣的可以参考一下,谢谢!
postgresql\mysql 的逆向工程(生成的代码含:controller、service、serviceImpl、entity、mapper、mapper.xml)