大家好,今天小编来为大家解答以下的问题,关于SpringData JPA也能写sql,为什么还要用mybatis,为什么不建议使用mybatis这个很多人还不知道,现在让我们一起来看看吧!
本文目录
- jpa和mybatis项目的区别
- SpringData JPA也能写sql,为什么还要用mybatis
- 为什么springMVC和Mybatis逐渐流行起来了
- Java开发如果不让使用spring框架,会有多大影响
jpa和mybatis项目的区别
区别主要有以下几点
1、jpa和mybatis的反映对象不同
GPA是javapersistenceapi的缩写,它的中文翻译就是指程序JAVA持久层API,Mybatis相对来说比较实用的持久层框架。首先,两者最大的不同就在于内部的反应对象,JPA的操作是在对象与对象之间的反射,而mybatis的处理对象是在对象和结果集合之间的反射。虽然其最终的持久层框架结果是一样的,但是却在操作过程中有千差万别。
2.jpa和mybatis的功能性质不同
从整体的移植性来看,GPA的一致性相对较好,他在数据库的兼容性基本都是相同的,所以不用担心其他问题。一般来说springdatajpa都知道当一个接口继承了GPA,接口之后便会自动具备数据移植的良好性质。由于mybatis是使用SQL语句,所以在移植时必须将数据库的类型改为sql了。从这一点上来看,GPA更具优势,其次在操作层面修改字段的时候,mybatis也相对操作步骤比较多。
3.jpa和mybatis操作流程不同
如果是学习操作持久层的话,用hibernate会比较麻烦,所以从具体学习操作来看,mybatis具有更强烈的优势,同时也可以使用springdatajpa,但是这一种方式更适合于单表。但在这里可以发现这一篇a的妥协性,为了支持这一特性,但在实际操作起来,并不推荐荐使用,因为这种操作方式并不符合领域驱动设计的目标和理念。
SpringData JPA也能写sql,为什么还要用mybatis
头条上问这种问题也是醉了。。看到了顺便答一波,瞎扯的人太多。
国内的设计思路是tabledriven的,简单来说,用数据表定逻辑,用模型做实现,实际这是和面向对象相反的思路。mybatis所谓的灵活性在大多数工程师手里就是不用考虑模型如何设计,“反正我用原生sql都能解决”,模型设计的烂的一逼,全靠sql去修修补补。而jpa是完全objectdriven的思路,前期设计的缺陷会很制约后续开发,并且不同的数据库可做不同的实现(实际是哪怕是redis也是一样的)。回答几个常见sb问题。
1.jpa表连接行为不确定,难以控制。
你确定你用过springdatajpa?不知道有EntityGraph?傻瓜到这种程度了还能咋的。
2.jpa子查询不好实现。
我估计你都没用过吧?springdatajpa的子查询既可以单独定义视图,也可以做subquery,甚至直接用jpql。
3.jpa不好优化。
我真不信99%得优化能超过springdatajpa的优化,尤其是一般般的程序员能别把优化放嘴上么,连mysql的锁都搞不清楚,表设计的跟坨屎一样还天天原生sql,觉得自己很牛逼么?jpa是可以把表属性反应到对象的,天然就有运行时优化的底子在,ORM能发展的空间太大了,稍微有点技术认知的都知道ORM会优势越来越大。稍微有些经历的程序员都知道现在是先说好维护才说其他的,能解决性能的方法太多了好么。
最后,难道不知道现在提倡ORM+CQRS么?请问,有啥复杂的解决不了,都不需要nativesql介入好么。
为什么springMVC和Mybatis逐渐流行起来了
这个是我程序员生涯和架构师生涯中,主要搞的东西。就我个人10年开发经验谈谈自己的想法。
springMVC对比的常用技术是struts、portal和各个公司自己开发等前端框架。其优势在于代码异常简洁,同时可自动将request中请求的参数封装到对象当中,还支持注解方式映射URL。简直就是程序员的最爱,更不要提他和springsecurity是完美匹配的好基友了。
至于mybatis流不流行还不好说,但是可以肯定的是一定比hibernate要好用,而且好用的多。这里我只想吐槽一下hibernate的缺点,首先太耗费内存了,随便一个小系统就得500MB。其次奇葩的配合JPA,从事物管理到注解完全不清晰很难分层。但是有几个系统需要分布式事物呢?更不要提HSQL这朵奇葩。
所以在我被坑了多年后,我的建议是springMVC+数据库连接池比较好。mybatis可以试试,但就我个人觉得spring自带的DAO套件就很好用。
Java开发如果不让使用spring框架,会有多大影响
这个想法不错!如果没有spring,我们正常的一个项目应该怎么搭建和开发?
不允许使用Spring框架意味着搭建的项目不允许使用SpringBoot、SpringMVC、Spring这些Spring家族的框架,既然如此ORM框架我们也不要使用,在这样的限制条件下,项目应该如何搭建?日常CRUD应该如何开发?
心动不如行动,开始搭建,先创建一个简单的maven项目no_spring_example:
这个项目我们需要它具备如下的几个能力:
1、能够提供http接口访问能力;
2、能够操作MySQL数据库,支持事务,支持连接池;
3、能够操作redis;
4、可以部署在tomcat容器。
开始搭建中。。。
竟然花了我将近2个小时的时间,终于跑起来了,先看看项目整体架子:
相关包介绍:
org.example.conf:
DruidUtil:数据源配置,采用的是阿里巴巴开源的druid;MysqlBaseUtil:Mysql数据库的增、删、改、查基本操作,支持单次和批量;RedisUtil:redis操作工具类,采用的是JedisPool。org.example.dao:
Test1Dao:这个就是对数据库里test1表的操作。org.example.dispatcher:
StartupServlet:启动类Servlet,利用loda-on-startup来初始化加载WEB-INF/config目录的一些配置文件;Config:即加载servlet.conf文件中的配置信息,比如MySQL连接信息、redis连接信息org.example.filter:
GolbalFilter:全局过滤器,web三大组件之一;org.example.servlet:
Test1AddServlet:新增数据api;让我们把它运行到tomcat容器中,然后访问接口:http://localhost:8080/no_spring_example_war/test1/add.do
返回成功了,查看数据库表数据:
这样我们的数据库操作就通了,一个完全没有Spring相关框架参与的小架子就搭建完毕!
由于篇幅原因,涉及到redis操作、数据库事务并没有展现,感兴趣的同学可以私信我获取该项目源代码,让我们一起回忆青春~
回到问题本身,没有spring框架,对我们开发有什么影响?
结合上面这个项目来看,确实需要我们自己做的事情比较多,比如:
参数的获取、校验、序列化成对象;数据的返回,反序列化成json;数据库的操作需要我们手写sql;连接池需要我们自己初始化,事务需要我们自己回滚;只能使用Filter、Interceptor,不再有强大的AOP,这个也需要你自己去实现;随着业务的复杂,我们需要集成其他功能,例如异步、中间件等都需要我们自己去开发;用惯了Spring框架的我们,或许这个时候才知道它的好吧~
不过话说回来,如果真的在实际工作中不用Spring框架完成一个项目的话,你的基础能力一定会有很大的提升,包括工具类的抽取、对象的封装,基础组件的使用以及理解等,只要你是一个有追求的程序员~
框架虽好用,但是却容易蒙住我们的双眼。
最后,给你们再看一眼曾经多么熟悉的web.xml:
关于SpringData JPA也能写sql,为什么还要用mybatis的内容到此结束,希望对大家有所帮助。
声明:本文内容来自互联网不代表本站观点,转载请注明出处:https://bk.77788889.com/12/119403.html