学代码最大的烦恼就是记性不好——Spring,SpringMvc,Jpa与SpringdataJpa的简单认识

什么是Spring
解释:Spring是一个轻量级的DI(Ioc)和AOP的容器框架
存在的目的:创建轻量级的J2EE应用
注:这是轻量级的J2EE应用,标准的J2EE是EJB(难,代码多,调试麻烦)那一套东西。

轻量级:轻量级框架一般由struts,spring组成,侧重于减小开发的复杂度,相应的它的处理能力便有所减弱(如事务功能弱、不具备分布式处理能力)。
DI(IOC):Spring通过一种称作控制反转(IoC)的技术促进了低耦合
AOP:切面编程将业务逻辑从应用服务中分离
容器:包含并管理应用对象的生命周期和配置
框架:使用组件配置组合成复杂的应用,并提供很多基础功能

Spring致力于J2EE应用的各层的解决方案,而不是仅仅专注于某一层的方案。可以说Spring是企业应用开发的“一站式”选择,并贯穿表现层、业务层及持久层。然而,Spring并不想取代那些已有的框架,而是与它们无缝地整合。

Spring提供了对开源社区中很多框架及JavaEE中很多技术的支持,让程序员很轻松能整合及使用这些框架技术。
Spring以一种非侵入式的方式来管理你的代码,Spring提倡”最少侵入”,这也就意味着你可以适当的时候安装或卸载Spring。

面向对象(对象更适合人的思想-依赖类) -> 面对接口(解耦-依赖接口) -> 面向工厂(再解耦-依赖工厂) -> Spring(随时可以卸载)

Spring核心与模块化
依赖注入(DI)/控制反转(IOC)
我们前面说过,Spring是一个DI(Ioc)和AOP的容器框架
IOC与DI 对应着Spring的容器,而这两个概念是一回事
IOC(Inverse of control):控制反转 (Rod Johnson)
以前service需要一个dao,需要自己去控制整dao的生命周期(自己创建,销毁等),但是现在service依赖于dao,但是它不负责去管理这个dao的生命周期(不是自己创建,销毁)。相于把以前自己对dao的控制权反转到了容器中(Spring)—以前自己需要new对象,但是现在自己不new了,交给spring的管理了
DI(Dependence inject):依赖注入
依赖关系由容器注入

总结:对象的关系由容器注入,由容器管理,对象自己不需要管理

AOP(面向切面编程)
我们前面说过,Spring是一个DI(Ioc)和AOP的容器框架
AOP即面向切面

在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

可以用于:日志记录,性能统计,安全控制,事务处理,异常处理等等

Spring使用AOP的功能完成各种共用的模板功能,使得我们的业务代码与其它代码分开

什么是SpringMvc

Servlet三大职责
接收参数 处理业务 负责跳转

Spring MVC是一个基于MVC(Model view Controller)模式的WEB后台框架,它解决WEB开发中常见的问题(参数接收、文件上传、表单验证、国际化、等等),使用非常简单,SpringMvc作为Spring中的一个模块,可以与Spring无缝集成。

为什么要用SpringMvc
Spring是一个轻量级的Java 开发框架,为了解决企业应用开发的复杂性而创建。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。SpringMvc以Spring框架为核心,为应用程序中的Web层(MVC)(表现层)提出的一套优秀的解决方案。Controller层(控制层)
目前很多公司都使用Spring MVC,90%的招聘单位要求熟悉使用Spring MVC。
MVC框架思想-核心控制器(前端控制器)
顾名思义核心控制器用于Web层核心功能的处理以及在所有控制器执行的。所有的WebMvc框架都采用了这种方式。
DispatcherServlet核心控制器会拦截匹配的请求,把拦截下来的请求,依据相应的规则分发到目标Controller来处理。

什么是JPA
1.JPA是Java Persistence API的简称。
2.JPA作为 Java EE 5.0 平台标准的 对象关系映射(ORM) 规范
将得到所有 Java EE 服务器的支持。 Sun 这次吸取了之前 EJB 规范惨痛失败的经历,在充分吸收现有 ORM 框架(如Hibernate)的基础上,得到了一个易于使用、伸缩性强的 ORM 规范。
3.从目前的开发社区的反应上看
JPA 受到了极大的支持和赞扬, JPA 作为 ORM 领域标准化整合者的目标已经实现。
2.2.为什么需要JPA
1.这个需要从Hibernate的起源说起。 Hibernate作者Gavin King发现以前写JDBC的开发效率太低,特别在Java这种面向对象的语言在与关系型数据库之间的数据转换太麻烦了。
2.于是开发出了Hibernate,他当时的目标是,只要是Java程序员,就算不懂SQL语句,也可以来操作数据库。
2.3.Hibernate和JPA的关系
Hibernate是一个开放源代码的对象关系映射(ORM)框架,它对JDBC进行了非常轻量级(相对于EJB这一套)的对象封装,它将POJO(就是咱们的domain)与数据库表建立映射关系,是一个全自动的orm框架,Hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
JPA是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据。他的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate、TopLink(现在叫EclipseLink)等ORM框架各自为营的局面。
值得注意的是,JPA是在充分吸收了现有Hibernate、TopLink等ORM框架的基础上发展而来的,具有易于使用、伸缩性强等优点。

目标:
简化现有Java EE和Java SE应用的对象持久化的开发工作;
Sun希望整合ORM技术,实现一统江湖。
简单一句话:JPA是持久化规范,而Hibernate是其实现。
2.4.JPA的优缺点
优点与缺点都是相对的,那么讲一个东西的优缺点我们都需要一个参数对比,而咱们要来进行对比的咱们操作数据原生的JDBC:
2.4.1.JDBC的优缺点
如果说JDBC与JPA优能更高:你必需会使用缓存,必需是一个SQL高手
本质:处理Java对象和关系型数据库表之间的转换
优点:操作数据库最底层,性能最高(前提是你要有相应的经验,并且是一个数据库高手)
缺点:
1.使用复杂(重复代码太多)
2.移植数据库很麻烦,改动比较多
主键的生成方式不同(mysql使用自增,oracle使用序列)
分页的sql语句也是不同(mysql使用limit,oracle使用ROWNUM)
3.性能优化得自己处理,没有提供数据的缓存,需要自己实现
4.面向sql语句操作,不是面向对象的
2.4.2.JPA的优缺点
本质:处理Java对象和关系型数据库表之间的转换,只是对JDBC再次做了一层封装
优点:
1.程序员操作很简单,代码简单 entityManager.persist(employee);
2.直接面向持久对象操作
3.提供世界级数据缓存(现在几乎所有的ORM框架的缓存都是学的Hibernate)
一级缓存,二级缓存,查询缓存(空间换速度)
4.数据库移植性很强,很少的修改(通过配置方言搞定)
把各种数据库抽取了一个方言接口
不同数据库实现一个方言接口,如果换了数据库,必须修改方言实现,驱动jar文件,连接数据库信息。
缺点:
1.不能干预sql语句的生成
entityManager.find(User.class, 1L);
find方法默认查询t_user表的所有字段
自动生成select user0_.id,user0_.name,user0_.age from t_user user0_ where user0_.id=?
2.一个项目中,如果对sql语句的优化要求比较高,不适合用JPA(不过可以使用JPA对原生sql的支持来解决)
3.如果一张表中有上亿级别的数据量,也不适合用JPA,其实也不适合用jdbc(可以使用数据库读写分离,分库分表方案解决)。
2.4.3.JPA适用项目规模
现在JPA一般用于中小型项目,如果是一个超大型项目,不建议使用JPA(性能影响) -> 需要自己去完成性能上的优化.有的优化,JPA真的是做不了. 一般会使用MyBatis

什么是SpringdataJpa
这个超厉害,SpringdataJpa是Spring对jpa的再次封装,它的本质还是jpa,不过交给了spring管理,减少了我们自己手写事务代码的时间,且与spring无缝衔接,很好的用于项目中(因为现在大部分非超大型项目都使用的spring,所以在使用jpa时都使用的springdatajpa对其再次封装)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值