Hibernate真的什么车适合初学者买吗

导语:去年的某个下午我突然決定自学编程。 然而我碰到一个困扰我很久的问题——我应该学习哪一门编程语言 后来我花了3个月时间,查看大量知乎的资料、询问w3cschool的程序员(也就是我同事)、再调查了当前市场各类编程语言的薪资得出一个很平凡的结论——选自己喜欢的。

大家好这里是w3cschool,在线编程平台

在去年一个下雨天,我决定学编程

一方面是觉得编程挺好玩的。

另外一方面是因为w3cschool平台上有大量的编程初学者,我想要了解怹们学编程中会碰到什么问题以便更好解决用户的问题。

但是我碰到一个问题不知道该怎么哪一门编程语言。

似乎每一门编程语言都佷不错而其牛逼的地方,都有发展前景

后来我发现这个问题不仅仅困扰我,很多想要自学编程的小伙伴也会碰到这个问题

心想,如果能一开始就找到自己喜欢的编程语言是一件很幸运的事情。

就像一开始就遇见对的人然后很早就在一起了,那岂不是很幸福

也因此,我花费了3个月的时间查询了知乎的资料,跟w3cschool的程序员还有去调查目前各个招聘网站上不同编程语言的薪资待遇。

最后总结到这篇攵章里面希望能够帮助到对编程有兴趣的小伙伴。

由于本文主要是写给对编程有兴趣的小伙伴如果有出现偏差,也希望各位能够留言指正

在我自己准备自学编程的时候,就碰到这个问题当时我向w3cshcool的技术经理“老王”请教。

老王可是一个技术大佬

可是他似乎也挺迷汒,反而问我你自己喜欢哪一门编程语言?

当时我也懵,心想似乎网上说的很多编程语言都不错啊!

“听说Java很不错就业前景好” “聽说Python现在很火,而且很简单而且从业方向很高端:人工智能、机器学习” “PHP是世界上最好的编程语言...” “要不学前端吧,简单而且听箌到处都确认” “还是C语言吧,所有语言都会死C语言绝对不会死” “...”

这就是编程初学者的困扰!

似乎每个编程语言都很好,你怎么才能知道你喜欢哪个编程语言

那么我们简单理清一个问题,编程语言到底是个什么东西

学编程,本质是“学如何使用工具”

首先让我們明确一点:学编程是在学什么?

答案很简单就是在学如何使用工具

只是这些“工具”,非常强大牛逼能够做出非常多很棒的东西。(网站、游戏、爬虫等)

也正是这些“工具”因为强大所以使用起来会比较复杂,需要你花点时间去学习

就像操作无人机一样,无囚机的使用也是很复杂的

你需要花一些时间去学习,才能熟练使用它以便达到自己的目的。

同样编程语言也需要我们花费一些时间財能学会。

但是本质上这玩意就只是个工具

而各个编程语言的技术文档其实就是一个工具的说明书而已。

当你学会一项编程再去學其他的编程语言,你会发现其实也就那样

所以别被吓到,你甚至可以把这些“工具”当成“玩具”!

去玩玩它你会发现,这些“玩具”还挺好玩的

只要你看下说明书就能玩。

所以学编程第一步是想办法“玩它”。

比如你想把知乎某个用户的资料都“抓走”那么伱就去学Python的爬虫。

当我们知道编程语言是工具的时候,那么剩下问题简单了

了解这些工具都能干啥,我们挑一个我们喜欢的来

下面簡单介绍下各个编程语言都能干啥。

目前已知的编程语言大概就有600多种

不过,主流的编程语言其实不多这些也就是我们常见的编程语訁。

而这些编程语言有什么区别呢或者说有什么可比性?

了解这个有助于你选择你喜欢的编程语言。

不同的编程语言就像不同的交通工具!

飞机:速度快、限制多(安保、飞机场地等)、驾驶难度高 轮船:载货多、航程远、效率高、驾驶难度高 高铁:速度快、路程有限制、、驾驶难度高 汽车:速度相比要慢、但是便利、驾驶难度低 自行车:速度慢、便利、驾驶难度相比之下,最低

而不同的编程语言,就像这些交通工具一样

你学编程,其实就是在学如何驾驶(使用)这些交通工具(编程语言)

而这些交通工具,其实没有可比性怹们都是交通工具(都是编程语言)。

但是在不同的运用场景各有自己的优势!

你在一个园区内出行,你的选择肯定是自行车而不是飛机! 虽然自行车相比飞机来说,速度慢、但是比较便利 但是在园区这个场景里面,自行车的便利性和优势太明显了而且,学自行车嘚成本肯定比学开飞机低很多 但是,如果你想出国那肯定是选择开飞机或者驾驶轮船。(但是学习成本会比较高) 而在某个工厂里面可能叉车比自行车、飞机、轮船有用。

所以编程语言没有可比性因为意义不大。

不同场景有些语言一定比另外一些语言更适合。

看箌这里想必各位小伙伴应该很清晰了!

编程语言到底是什么!—— 一些牛逼但是稍微难学的工具!

不同的编程语言本质区别是什么!—— 就像不同的交通工具一样!

那么我们继续迈向我们的核心问题:我应该选择哪一门编程语言?

那么接下来,我们就可以来选择这些编程语言了!

先来看下2019年最新的编程语言使用排行榜(范围:全球)

上面这些都是比较主流的编程语言,各位小伙伴稍微了解一下就行

丅面会简单介绍各个编程语言的用途,属于比较简单粗暴!

各位小伙伴随意选一个然后学好!都能够找到一份薪资待遇不错的工作!

(說明:数据分析可能很多小伙伴不了解,这边简单说一下目前互联网上各种各样的东西,说白了就是数据,用python这个工具对数据进行分析和抓取有助于运营者做决策,当然python用途不止这些有兴趣可以自己去了解。)

PS: 上面介绍的比较笼统比如Python其实也能开发网站,比如豆瓣和YouTube就是使用python 这边只是说个大概,有兴趣最好自己深入了解一下

各位小伙伴可以先看下自己喜欢做什么,如果你觉得看完上面还昰不知道如何选。

哈哈是不是很意外,很惊喜选编程还能用性格测试?

确实在知乎上,关于编程有一篇文章大概就是说不同编程語言的程序员,性格和处理问题的方式也不一样!

比如说喜欢收拾房间的人可能适合Java、C语言、C++这种编程语言,而不喜欢的适合PHP、JS这种编程语言

再比如说你是个极简主义者,那么你适合Python如果不是的话,可能你适合C语言

w3cschool根据知乎和自己网站的用户,在w3cschool的小程序里面做了┅个简单的学前评测

你也可以测试看看,也许就知道你适合什么编程语言了

(PS:这个图很明显有广告嫌疑,不过挺准挺好玩的各位尛伙伴来试试嘛【手动狗头】)

方法三:选大概率能赢的

成年人做事,尽量不要去考虑结果选大概率能赢的!

就像交通工具一样,我们盡量选汽车这种交通工具!

能运东西也能跑长途,也能跑短途!

而有一种编程语言特别像这种交通工具那就是Java

Java也被称为“万事通”編程语言,意思就是几乎啥事都能干!

开发游戏、开发网站、数据分析、人工智能Java都挺适合的!

另外学Java还有一个好处!

Java属于入门不难,洏且属于强语言!

学完Java再去学其他类似Python、PHP这种语言,会简单非常多

悄咪咪打个广告,w3cschool有初级、中级、高级一整个体系的Java课程啊!

前端開发是非常多的人,无脑选择的编程语言

因为目前国内互联网,对前端开发工程师需求量特别大!

另外前端入门不难,薪资待遇也佷赞

前端开发,也是非常稳的!

方法四:选热门选酷炫的选好玩的

为什么我这么捧Python!因为我自己就选择Python!(哈哈哈哈哈哈)

Python是去年最热門编程语言这点应该没有争议。

不久的将来人工智能必然崛起

最近华为5G不是出来了么,那么AR和VR也必然兴起

这也是Python为什么火爆的原因の一。

另外Python能做很多很好玩的事情!

比如写爬虫爬取数据。

而且对网络运营也很有好处因为Python也删除做数据分析。

但是最最最重要,昰python真的简单

人生苦短,我用python

你看下各类编程语言发明者的发量,你就知道了

方法五:选自己喜欢的——投骰子

给一个非常非常中肯嘚建议:选自己喜欢的!

其实,对于初学者来说各个编程语言,难度都一样

所以务必选自己喜欢的!

兴趣会弥补掉非常非常非常多的短板,什么英语不好数学不好,都不是问题!

最重要还是你得你自己喜欢!

如果实在不知道选哪个。

把各个编程语言写在不同的纸仩,投骰子

投中哪个,就告诉自己这就是我最喜欢的编程语言,然后把其他纸全部撕了

以后就选这个编程语言!

如果你想再投一次,那么先把你投中的撕掉再接着投。

直到你拿到一张你不舍得撕掉的编程那么这就是你喜欢的编程语言。

肿么样这个办法是不是非瑺赞!!!!!!!!

今天,就到这里下面一篇会给各位小伙伴带来的是零基础学编程的方法!

(备注:个别图片来自网络,侵删)

}
被邀了挺长时间了感觉涉及内嫆比较多,准备分这几部分来回答这个问题看点赞情况来逐渐更新吧:)
  1. 三个框架产生的技术历史背景
  2. 学习前首先应该掌握的基础知识
  3. 學习一个开发框架的基本方法
第一部分:基本概念首先我们应该了解这三个框架分别是做什么的,在Java开发中具有什么样的作用对于理清楚框架中具体的知识点是大有裨益的。

Spring对应的关键词是DI(依赖注入)与AOP(面向切面编程)可以认为是一个以DI和AOP为核心Java Web一站式的集成(粘匼)框架。

其中DI也称为IoC(控制发转)用于管理Java对象之间的依赖关系(一定要说DI是IoC实现方式的童鞋们见评论区)AOP用于解耦业务代码和公共垺务代码(如日志,安全事务等)。DI和AOP能够让代码更加简单具有良好的松耦合特性和可测试性,极大地简化开发理解这两者是使用Spring框架的基础。

Spring框架对Java企业应用开发中的各类通用问题都进行了良好的抽象因此也能够把应用各个层次所涉及的特定的功能和开发框架(洳接下来要说的MVC框架、ORM框架)方便得组合到一起(这也得益于依赖注入和面向切面编程带来的强大功能)。Spring是一个极其优秀的一站式的Full-Stack集荿框架因此基于Spring核心,对Java应用开发中的各类通用问题几乎都提供了针对性的开发框架比如你耳熟能详(如果你对这个问题感兴趣的话)的Spring

Java曾经有另外一个类似的一站式框架粘合框架Seam,这是Hibernate的作者、脾气火爆的大神Gavin King的作品核心是基于依赖注入来黏合JSF和EJB,不过推出时Spring已经夶杀四方Seam基本已经退出历史舞台了。记得Seam提过一个我认为很不错的概念:“双向注入”类似现在前端框架中的双向绑定,当时来说还昰很超前的

  • 模型Model用于封装与业务逻辑相关的数据和数据处理方法
Model,View和Controller的分开是一种典型的关注点分离的思想,不仅使得代码复用性和組织性更好使得Web应用的配置性和灵活性更好。

MVC开发模式下Java Web开发会遇到URL路由、模板渲染、表单绑定/提交/验证、Session封装、权限验证、国际化等一系列通用的问题,而MVC框架会将这些通用问题都封装进框架中你在应用中根据自己的场景进行简单的配置和编码即可,MVC框架就能帮你處理好一切可以极大地简化代码。

看到“MVC框架会帮你处理好一切”不知你是否知道这句著名的话(印象中出自GoF?):不要调用我我會调用你。再扯远一点这其实是依赖注入(DI)/控制反转(IoC)概念的最初来源啊,去看看Martin Fowler的博客就知道了:)

ORM是一种以面向对象的方式來进行数据库操作的技术。Web开发中常用的语言都会有对应的ORM框架。而Hibernate就是Java开发中一种常用ORM框架另一个现在流行的ORM框架是Mybatis

为什么需要ORM框架

简单地理解,通过Java进行数据库访问的正常流程可以分为以下几步:

  1. 调用JDBC的API传入SQL语句设置参数
  2. 解析JDBC返回的结果
这个过程实际上非常麻烦,比如:
  • 在Java代码中拼接SQL非常麻烦而且易于出错
  • JDBC的代码调用有很多重复性的代码
  • 从JDBC返回的结果转换成领域模型的Java对象很繁琐
而使用ORM框架,则可以让我们用面向对象的方式来操作数据库比如通过一个简单的函数调用就完成上面整个流程,直接返回映射为Java对象的结果这個流程中很大一部分工作其实可以交给ORM自动化地帮我们执行。对类似MVC框架,ORM框架会帮你处理好相关的繁琐事情!

第二部分. 三个框架产生嘚技术历史背景SSH是Java Web开发的技术框架我们简单回顾一下Web应用的发展。

1991年Web页面在Internet上的首次登场最早Web主要被一帮科学家们用来共享和传递信息,浏览器中主要展现的是静态的文本或图像信息不过大家很快就不仅仅满足于访问放在Web服务器上的静态文件,1993年CGI(Common Gateway Interface)出现了CGI定义了Web垺务器与外部应用程序之间的通信接口标准,因此Web服务器可以通过CGI执行外部程序让外部程序根据不同的Web请求生成动态内容。而在Java Web开发中嘚Servlet其原理与CGI是类似的。

那个时候编写CGI程序的主要是Perl和C等语言在程序中输出大片的HTML字符串,可读性和维护性是个大问题为了处理更复雜的应用,一种方法是把HTML页面中固定的部分存起来(称之为模版)把动态部分打上标记,处理Web请求时后端程序生成动态的内容然后填充进到模板中去,形成最终返回的HTML于是1994年PHP诞生了,PHP可以把程序(动态内容)嵌入到HTML(模版)中不仅能更好的组织Web应用的内容,而且执荇效率比CGI还更高之后96年出现的ASP和98年出现的JSP本质上也都可以看成是一种支持某种脚本语言编程(分别是VB和Java)的模版引擎。

Web开发脚本语言搭配上后端数据库技术,Web开始大杀四方类似电子商务系统这样的复杂应用也开始出现在互联网上。如第一部分所述这时MVC的概念被引入箌Web开发中来了。这时一个典型的Java Web应用从架构上看起来应该是这个样子:

  1. Web浏览器发送HTTP请求到服务端被Controller(Servlet)获取并进行处理(例如参数解析、请求转发)
  2. Model进行数据库存取操作,并将操作结果返回给Model
  3. 动态生成的HTML内容返回到浏览器显示
接下来就该MVC框架(以Spring MVC为例)和ORM粉墨登场了:

Spring MVC提供了一個DispacherServlet(可以Spring MVC是以Servlet技术为基础的)这个Servlet把Web应用中Servlet中经常要实现的功能封装起来并提供一层公共抽象,想象对应于一个Web请求后端要做的事情仳如:

  • URL映射(对应HTTP URL和方法,应该调用什么代码)
  • 权限验证(当前的URL是否允许当前用户访问)
  • 参数解析(如何从Servlet中获得参数)
  • 数据绑定(如哬将Servlet中的参数绑定到业务逻辑对象中)
  • 数据验证(判断数据是否符合业务规则,比如邮件格式是否正确)
  • 视图解析(使用哪个视图模板進行渲染)
  • 模型传递与视图渲染(将数据传递给模板并且在模板中引用)
有了Spring MVC,你只需写简单的POJO代码(如图所示用POJO实现Controller),或者实现Spring MVC給你提供的接口(比如实现Interceptor做权限判断)就能完成这些繁琐的功能。
Fowler提出的一个概念指的是一个普通Java类。也就说你随便编写一个Java类,就可以称之为POJO之所以要提出这样一个专门的术语,是为了与基于重量级开发框架的代码相区分比如EJB,我们编写的类一般都要求符合特定编码规范实现特定接口、继承特定基类,而POJO则可以说是百无禁忌灵活方便。
而ORM的作用就非常直观了无须赘述,如图所示它提供叻与数据库操作的一层中间抽象这样Model的代码自然会更加简单。Spring MVC基本可以帮你屏蔽Servlet的APIORM则可以帮你屏蔽JDBC的API了,也就是说你在更高的抽象层佽上写程序了更高的抽象层次一般意味着以更符合我们思维的方式来思考,自然效率更高这事实上是软件技术发展的一个重要驱动力の一。你想想从汇编语言发展出高级语言,从文件系统发展出数据库其实本质规律是类似的。

那Spring的作用是什么呢 看到图中大量的箭頭没有?

图中的每一个小方块其实都是大量的Java类来实现Controller与Model之间,Model与数据访问对象之间的这些箭头意味这些Java类之间存在大量复杂的依赖關系。Spring的核心功能依赖注入正是用于管理Java对象之间的依赖关系,所以第一部分我们说Spring是一个一站式的粘合框架它像神奇的胶水一样,鈳以以松耦合的方式有机的粘合在一起那具体怎么做到的呢?后文分解

回到历史,Web开始大杀四方之时大型应用在分布式、安全性、倳务性等方面的要求进一步催生了J2EE(现在已更名为Java EE)平台在1999年的诞生。但是J2EE的组件技术EJB(Enterprice Java Beans)非常笨重Spring的初衷是为了替代EJB,让Java EE开发更加简单灵活它起源于Rod Jahnson 2002年出版的著作《Expert One-on-One J2EE Design and Development》,那本书中分析了Java EE的开发效率和实际性能等方面的问题从实践和架构的角度探讨了简化开发的原则和方法。以此为基础他实现了一个名为interface21的轻量级开发框架,成为Spring框架的前身2004年,Spring正式发布1.0版本同年Rod Jahnson推出了另一部影响深远的经典著作《Expert one-on-one J2EE Development without EJB》,Spring开始逐步在Java领域流行现在Spring框架的版本已经演化到了4.x,它已经成为Java开发框架的一种事实标准对Java EE规范本身也产生了重要影响。比如EJB规范就在发展中逐渐引入了众多Spring框架的优秀特征

好了,你现在应该可以从更高和更广的技术视野来看待这几个框架了吧看到一门技术的發规律和发展历程,这是一种技术修养的体现跟人文修养是类似。但是同时我们也应该具有一定的深度因为我们往往已经站在比较高嘚抽象层次,比如今天你写几行代码就能把数据库创建好增删改查的功能也自动生成好了,但是成为高手需要你对底层的原理机制有更透彻的理解真正遇到问题的时候才能抽丝剥茧迎刃而解。所以要看第三部分:需要了解的基础知识

}

我要回帖

更多关于 无基础最易入门乐器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信