不可以!
数据库连接池是需要实例化的,而在java中静态方法是不能访问非静态对象的,这是其一,但不重要,重要的一点是,如果你想到办法让DAO中的方法都变成了静态的,你就会失去对事务控制,因为事务肯定是基于实例的。
我估计题主提这个问题,应该是因为每个对象都对应着一类DAO操作,相对繁琐,有这种想法是好的,但目前JAVA体系的架构在这里摆着吧,暂时还挣脱不了这个束缚,有可能到了JAVA V20可能实现(纯属玩笑)。
好啦,这里是TechStar,做过几年的java开发,略知一二,有什么说的不对的地方还请各位海涵~~~
Service层和Dao层真的有必要每个类都加上接口吗?
近在尝试写一个基于spring mvc的基础框架,这个问题想了很久了,有接口的时候我维护起来并没有感觉会有多方便。请各位解答一下谢谢!
简单来说就是看情況。
主要看你项目:
- 变动情况
- 以及架构
- 人员
- 项目情况
比如,项目原来使用的hibernate,后续可能要切换为mybatis,那么dao就需要使用接口。这就不会影响上层代码的修改。
再比如,项目是个单体应用,任何代码的修改都需要重新编译整个项目,那可以不用接口。而如果项目是分模块编译部署的,那就可以使用接口解耦,假设dao有修改,只需要重新编译部署dao模块即可,不影响上层模块。
再来,如果项目组新手较多,可能简单的代码结构更适合。复杂项目结构的学习成本要高。
假如,项目进度很急,可以使用简单粗暴的方式先撸~
可以用经济学上的成本来解释原因。
经济学上的成本定义是:你做一件事,所放弃的其它事情中,价值最大的那件事的价值就是你做这件事的成本。
你使用接口的成本就是你不使用接口所花费的成本(包括后续的维护成本)。
如果项目变动多、模块部署、项目不急,那使用接口的成本就低于不使用接口的成本,虽然早期可能不用接口看起来更简单;反之,则不用接口的成本低,甚至框架都可以不使用~
毕竟工具是为了提高效率的,何必和自己过不去呢!
如何更好的学习android开发?
!
作为一名IT行业的从业者,同时也是一名教育工作者,我来回答一下这个问题。
首先,Android开发在学习难度上并不算大,如果具备一定的计算机基础知识,完全可以通过自学来掌握基本的Android开发知识。
从整体的Android开发流程上来看,Android开发涉及到三块技术,第一块是Android客户端开发;第二块是Android服务端开发;第三块是前端开发,主要是进行Android端的管理,这三块开发也涉及到不同的知识结构,在开发团队中往往也需要有多个开发角色进行协调开发。对于初学者来说,要想更好的学习Android开发,同时未来想具有更强的岗位竞争力,那么这三块技术都应该有一定的掌握。
目前Android客户端开发可以采用Java或者是kotlin,由于目前Java的应用范围比较广泛,同时后端开发也经常采用Java开发,所以建议选择学习Java语言。在学习规划上,可以按照以下的学习步骤:
第一:Java基础开发部分。Java基础开发部分涉及到三大块内容,其一是Java的面向对象基本编程语法,重点在于对各种“抽象”的理解,这部分也是学习的难点之一。具体内容包括类、接口、对象、封装、继承、多态、集合、多线程等内容。
第二:JavaWeb开发。JavaWeb开发涉及到前端开发(Html、CSS、JavaScript)、数据库开发(Sql、JDBC)和框架开发(SpringBoot、SpringCloud)三大块内容,这部分内容相对比较多,需要完成大量的实验。
第三:Android开发。Android开发涉及到具体的Android开发细节,这部分内容相对还是比较简单的,涉及到Activity、Fragment、Service、ContentProvider等内容。
我从事互联网行业多年,目前也在带计算机专业的研究生,主要的研究方向集中在大数据和人工智能领域,我会陆续写一些关于互联网技术方面的文章,感兴趣的朋友可以关注我,相信一定会有所收获。
如果有互联网、大数据、人工智能等方面的问题,或者是考研方面的问题,都可以在评论区留言!
初学java的小白接到了项目:JSP页面与MySQL数据库连接、MVC模式等。怎么做才能体现项目需求呢?
本人初学java一年。现在到了做项目了。项目需求:JSP页面与MySQL数据库连接、MVC模式等。现在很迷茫。不知道要做啥项目才能体现需求
!
JSP是Java Web开发的传统技术之一,虽然弊端比较多,比如业务逻辑与显示逻辑耦合、无法分别部署、开发角色分工不清等问题,但是JSP对于初学者来说还是有一定的学习必要性,有不少遗留项目依然需要采用JSP技术。
MySQL数据库是目前使用比较多的数据库之一,尤其在Web开发领域。MySQL数据库简单易学且功能强大,Java程序员往往都对MySQL数据库比较熟悉。虽然通过JSP直接连接MySQL数据库是可以做到的,但是这种做法显然是有很多问题的,恰好通过MVC结构是可以基本解决这些问题的。
MVC是一个软件开发领域的经典结构,采用MVC进行Web开发也就是所谓的Model2开发方式,这种开发方式用JavaBean来描述M(模型),采用JSP来描述V(视图),采用Servlet来描述C(控制器)。MVC最大的好处是实现了不同部分的解耦,提升了Web程序的模块化程度,使得多角色协作开发有了重要的基础,也为日后的优化打下来基础。
要想利用MVC结构完成一个传统Java Web开发,需要综合使用Servlet、JSP、JavaBean、JDBC、MVC、DAO等一系列传统技术,而通过一个模拟银行“存取转”业务的Web应用是一个不错的选择。
存取转业务的基础是账户,所以可以先写一个Account类作为M部分,然后为M定义一个映射表格。以DAO的方式完成数据库与Account类的映射,需要定义接口、实现类和工厂类。接着定义控制器Servlet,在Servlet中完成用户请求的各种“导航”,最终通过JSP完成呈现。
这个过程只是一个基本的模拟,而且并没有采用任何开源框架,对于Java学习者来说,学习开源框架是必要的。在掌握了MVC和DAO之后,再学习SpringMVC和Mybatis会更容易理解。
作者简介:中国科学院大学计算机专业研究生导师,从事IT行业多年,研究方向包括动态软件体系结构、大数据、人工智能相关领域,有多年的一线研发经验。
欢迎关注作者,欢迎咨询计算机相关问题。
为什么几乎所有的开源数据库中间件都是国内公司开源的?并且几乎都停止了更新?
国外一般喜欢将分布式能力作为enterprise功能,即付费部分。国外的所有公司主导的开源都是有套路的,分为社区版和企业版,基础功能是社区版,高级功能是企业版,这样靠程序员个人使用开源来扩大用户群,然后大企业跟进,但是大企业的高级需求就需要付费,这样公司才有生意做。
中国的开源,这两年开始爆发,但是,这种开源更多的是大企业提高名声,或者某些个人发扬互联网精神,不走国外的(高级功能enterprise)套路,所以分布式能力,也直接开源出去,比如mycat算是个人项目社区化;腾讯tbase直接开源了(但是基本不会有人自建tbase,都是在腾讯云上用现成的);sharding-sphere是京东开源的这个和mycat类似;还有TiDB这个是目前国产的最好最彻底的分布式库之一盈利思路大概像redhat,我的产品都开源,如果你感觉自己弄麻烦,那么可以买我的人力服务支持,我靠这个赚钱。还有巨杉数据库,主打金融级,也开源,但是它的开源更新做样子,去github上看看就明白了,目前开源出的部分基本不满足你完全自己玩,想用,还是去购买企业服务吧。
其实国外也有分布式数据库的开源,最出名的就是 【小强DB】英文名cockroachdb,和TiDB类似,主要区别是小强主要支持pg语法,tidb主要支持MySQL语法。
国外在分布式中间价和原生库方面的开源不足,还有一点就是主流的云平台都没有分布式数据库服务,只有云数据库(基本意思是只有主从,没有分片),在aws上就找不到分布式数据库服务,可能国外用很少用到10亿以上的数据吧,能用到10亿以上,就是大公司了,不差钱,不像国内,随便一家公司就有10亿数据的需求。我做金融的,深有体会,国外一个金融系统,支持个2000-3000万数据就够了,国内上来就要求2亿。
1.自用且能力精力有限:建议使用mycat或sharding-sphere,
2.自用且能力精力充足:tidb 或 小强DB。。。
3.使用云平台:3.1 去购买腾讯云的tbase,3.2 其次购买tidb的云托管,3.3 阿里云目前(2020-06)没有成熟的HTAP库,后续应该会跟进。
(我说的所有的,都是关系型数据库,且不包括Hadoop系列)
原生分布式库,其实原理和中间件差不多,只是会对MySQL和pg本身做了修改,并对中间件和单库做了更强融合。。
中间件关注部分问题(比如主从负责不管,高可用不管,但是管读写分离),原生分布式库关注所有问题。