Java Web开发中,业务逻辑写在SQL里好还是代码里好呢有什么建议吗

互联网- 2023-08-20 17:47:12

零基础java入门学习路线

这篇文章给大家聊聊关于Java Web开发中,业务逻辑写在SQL里好还是代码里好呢有什么建议吗,以及不建议把业务逻辑写在sql上对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

本文目录

  1. SpringData JPA也能写sql,为什么还要用mybatis
  2. sql语言的主要功能是什么
  3. Java Web开发中,业务逻辑写在SQL里好还是代码里好呢有什么建议吗
  4. sql逻辑读高是什么意思

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介入好么。

sql语言的主要功能是什么

喜欢SQL。因为它有我喜欢的语言的几个要素:

1.扎实的数学基础SQL的数学基础是关系代数,你所编写的SQL语句最终都可以翻译为关系代数上的运算。这种扎实的数学基础可以使语言具有良好而自洽的表达能力,同时不会因为一些不合理的Adhoc设计而处处留坑。(数学基础不强的语言基本上都有很多坑,比如早期的PHP)另外,你可以重新发明很多种SQL的方言(真的,Google里面就有好几种)但万变不离其宗,毕竟你不能重新发明关系代数。具有类似性质的好几门语言,我都挺喜欢,比如:LISP,背后是λ演算,这个数学基础给了LISP非常强大的表达能力;(虽然多数人不直接用LISP,但挺值得了解一下)至少,LISP给现在各种支持函数式编程的语言提供了借鉴;正则表达式。背后是正则文法。凡是可以使用正则文法定义的语言,都可以使用正则表达式定义。当然,可能因为正则表达式太成功,经常有人试图用它来匹配各种编程语言的代码,这基本上是肯定要出bug的。原因很简单,多数主流编程语言都是『上下文无关语言』,它是正则语言的超集;BNF,背后是上下文无关文法。这也是为什么各种编程语言(即使复杂如C++或C#,还包括SQL和正则表达式)的spec,甚至不少『标准格式』(如JSON,URI等)的spec都喜欢用BNF或EBNF定义。更好玩的是,当你用BNF定义好一门语言时,还可以使用一种称为编译器之编译器(Compiler'sCompiler)的程序(如YACC及各语言上的移植,ANTLR等)来生成这门语言的解析程序!为什么能做到这么利害的功能?这涉及到编译原理的很多知识,但归根到底,就是上下文无关文法的数学基础。

2.平易近人的语法糖衣SQL以自然语言英语为蓝本设计,易学易记,很多非专业编程人员也能很快掌握。(不会编程但会写SQL的,我们把他们称为数据分析师(逃))不要当作这点是理所当然的。同样基于关系代数,你可以基于LISP采用的S-expression来设计一门有与SQL同样表达能力的语言,还可以基于JSON来设计一门有与SQL同样表达能力的语言(比如MongoDB的JSONAPI,如果你把它看作一门语言的话)但非专业编程人员可能就没有那么容易上手了。

3.解决了重要的问题SQL解决了结构化数据的查询和更新问题。这种能力使得它在编程界几乎无处不在。你的手机上可能跑着很多个SQLlite的数据库;你访问的很多中小型网站,可能跑着很多MySQL数据库。你存钱的银行,很可能跑着许多Oracle的数据库。这些数据库都主要以SQL作为查询和操作数据的语言。就算强如Google,能够设计出有全球扩展性和异地容灾的分布式数据库F1(见https://research.google.com/pubs/pub38125.html),也得乖乖地提供SQL语言的支持。

4.高级声明式语言SQL通常被j认为是第四代编程语言,语言每过一代通过意味着它有高一个层次的抽象(抽象层次:机器语言<汇编语言<多数高级编程语言<SQL)注意抽象的层次和语言是否优秀并没有必然关系,也不意味着高抽象层次的语言可以完全替代低抽象层次的语言。但是高级的抽象往往意味着编程人员可以更少地关心实现细节,更多地关心业务逻辑的表达。使用SQL时,普通用户主要关心的是如何表达查询的逻辑,也就等价于关系代数上的运算。至于这种运算如何翻译成具体的执行计划(ExecutionPlan),使用哪些算法和数据结构进行高效存取和运算则交给了数据库去完成。当然,高级用户也可以通过各种手段去优化SQL的执行(比如表设计、建立合适的索引、改写优化器无法良好优化的查询等)。-------------------------(现在是我这边深夜了,下次再更)

Java Web开发中,业务逻辑写在SQL里好还是代码里好呢有什么建议吗

目前大部分研发团队都要求业务逻辑用代码来实现,SQL操作往往都是基本操作。用SQL来表现业务逻辑,也就是通过存储过程的方式来表现业务逻辑是比较传统的开发方案。

在C/S时代很多逻辑的实现都是通过SQL来实现的,主要原因是业务规模和部署方式决定的。早期的C/S编程时代往往都是非分布式环境下的开发,而且大多数情况下并不需要考虑移植性问题,此时采用SQL来完成业务逻辑是比较方便的处理方式。

采用存储过程来完成业务逻辑最大的好处是性能会比较好,但是这也取决于业务规模的大小,如果业务规模过大,那么性能会下降的比较厉害。而早期的数据存储规模比较小,所以采用存储过程的方式是比较方便的。

目前的Web开发已经到了大数据时代、云计算时代,业务类型和业务规模都有了较大的变化,尤其是大数据时代下NoSql数据库的广泛采用,使用SQL语句来完成业务逻辑的情景就更少了。而且,目前的程序大部分都是分布式方式,采用Sql存储过程的方式来处理业务逻辑会非常麻烦,而且会导致整个项目的移植性和可读性都严重下降。

目前在传统企业的开发团队中采用Sql来处理业务逻辑的情况比较常见,因为大部分传统企业的数据库还依然是关系型数据库,而且不存在移植性要求,这种固定场景下的开发是完全可以使用Sql来处理业务逻辑的。未来使用Sql处理业务逻辑的情况也有一定的应用场景,所以学习存储过程的编写还是有一定必要的。

我的研究方向是大数据和人工智能,目前也在带大数据方向的研究生,我会陆续在头条上写一些关于大数据方面的文章,感兴趣的朋友可以关注我的头条号,相信一定会有所收获。

如果有大数据方面的问题,也可以咨询我。

谢谢!

sql逻辑读高是什么意思

意思是指sql逻辑读数数值很高,会消耗CPU缩短使用寿命。

OK,本文到此结束,希望对大家有所帮助。

Java中吃香的十大岗位,有你吗
  • 声明:本文内容来自互联网不代表本站观点,转载请注明出处:bk.66688897.com/12/100962.html
上一篇:京东保底盲盒靠谱吗
下一篇:jeep公路车能买吗(jeep公路自行车)
相关文章
返回顶部小火箭