java框架 订阅
Java,是由Sun公司于1995年推出的编程语言。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器均支持Java applet。Java集合框架(Java Collections Framework,JCF)是为表示和操作集合而规定的一种统一的标准的体系结构。 [1]  任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。 展开全文
Java,是由Sun公司于1995年推出的编程语言。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器均支持Java applet。Java集合框架(Java Collections Framework,JCF)是为表示和操作集合而规定的一种统一的标准的体系结构。 [1]  任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。
信息
主要内容
对外的接口、接口的实现和对集合运算的算法
外文名
Java Collections Framework
时    间
1995年
中文名
JAVA集合框架
简    介
Java程序设计语言和Java平台总称
公    司
Sun Microsystems
JAVA集合框架集合论引
集合论是现代数学中重要的基础理论。它的概念和方法已经渗透到代数、拓扑和分析等许多数学分支以及物理学和质点力学等一些自然科学部门,为这些学科提供了奠基的方法,改变了这些学科的面貌。计算机科学作为一门现代科学因其与数学的缘源,自然其中的许多概念也来自数学,集合是其中之一。如果说集合论的产生给数学注入了新的生机与活力,那么计算机科学中的集合概念给程序员的生活也注入了新的生机与活力。很难给集合下一个精确的定义,通常情况下,把具有相同性质的一类东西,汇聚成一个整体,就可以称为集合。比如,用Java编程的所有程序员,全体中国人等。通常集合有两种表示法,一种是列举法,比如集合A={1,2,3,4},另一种是性质描述法,比如集合B={X|0
收起全文
精华内容
下载资源
问答
  • Java框架总结

    万次阅读 多人点赞 2020-01-17 14:14:13
    本系列用来记录常用java框架的基本概念、区别及联系,也记录了在使用过程中,遇到的一些问题的解决方法,方便自己查看,也方便大家查阅。 欲速则不达,欲达则欲速! 一、SSH 1、基本概念 SSH框架是JAVA EE中三种...

    🍅 Java基础教程系列: Java基础教程系列

    🍅 Java学习路线总结:搬砖工逆袭Java架构师

    🍅 Java经典面试题大全:10万字208道Java经典面试题总结(附答案)

    🍅 简介:Java领域优质创作者🏆、CSDN哪吒公众号作者✌ 、Java架构师奋斗者💪

    🍅 扫描主页左侧二维码,加入群聊,一起学习、一起进步 

    🍅 欢迎点赞 👍 收藏 ⭐留言 📝   

    本系列用来记录常用java框架的基本概念、区别及联系,也记录了在使用过程中,遇到的一些问题的解决方法,方便自己查看,也方便大家查阅。

    一、SSH

    1、基本概念

    SSH框架是JAVA EE中三种框架所集成,分别是Struts,Spring,Hibernate框架所组成,是当前比较流行的java web开源框架。

    集成SSH框架的系统从职责上分为(Struts2--控制;spring--解耦;hibernate--操作数据库),以帮助开发人员在短期内搭建结构清晰、可服用好、维护方便的web应用程序。使用Struts作为系统的整体基础框架,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用hibernate框架对持久层提供支持,spring做管理,管理Struts和hibernate。

    2、Struts2

    (1)基本概念

    Struts2是一个基于MVC设计模式的web应用框架,相当于一个servlet,在MVC设计模式中,Struts2作为控制器(controller)来建立模型与视图的数据交互。Struts2在Struts1融合webwork。struts2以webwork为核心,采用拦截器的机制来处理用户的请求,这样的设计使得业务逻辑控制器能够与servletAPI完全脱离。

    (2)Struts2框架的运行结构

    解析:客户端发送请求(HttpServletRequest)到服务器,服务器接收到请求就先进入web.xml配置文件看看有没有配置过滤器,发现有有Struts2的过滤器,然后找到struts.xml配置文件,struts.xml配置文件里定义一个action,然后就去找到action类,此类继承ActionSupport接口,并且实现了execute()方法,返回一个字符串“success”给struts.xml配置文件,struts.xml配置文件的action会默认调用action类的execute()方法,result接收到返回的字符串,result就会调用你指定的jsp页面将结果呈现,最后响应给客户端。

    (3)Struts2的优势

    • 实现了MVC模式,层次结构清晰,使程序员只需要关注业务逻辑的实现。
    • 丰富的标签库,大大提高了开发的效率。
    • Struts2提供丰富的拦截器实现。
    • 通过配置文件,就可以掌握整个系统各个部分之间的关系。
    • 异常处理机制,只需在配置文件中配置异常的映射,即可对异常做响应的处理。
    • Struts2的可扩展性高。
    • 面向切面编程的思想在Struts2中也有了很好的体现。
    • 体现了拦截器的使用,拦截器是一个一个的小功能模块,用户可以将这些拦截器合并成一个大的拦截器,这个合成的拦截器就像单独的拦截器一样,只要将它配置到一个Action中就可以。

    (4)Struts2的缺点:

    • 校验较繁琐,多字段出错返回不同。
    • 安全性太低
    • 获取传参时较麻烦

    2、Spring

    (1)基本概念

    spring是一个开源开发框架,是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。

    spring主要用来开发java应用,构建J2EE平台的web应用。其核心就是提供一种新的机制管理业务对象及其依赖关系。

    (2)spring的流程图

    解析:上面是在Struts结构图的基础上加入了spring流程图,在web.xml配置文件中加入了spring的监听器,在struts.xml配置文件中添加

    “<constant name="struts.objectFactory" value="spring" />”

    是告知Struts2运行时使用spring来管理对象,spring在其中主要做的就是注入实例,所有需要类的实例都由spring管理。

    (3)spring的优点

    • 容器:spring是一个容器,包含并管理对象的生命周期和配置。可以配置每个bean如何被创建,基于一个可配置原型prototype,你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例。
    • 支持AOP:spring提供对AOP的支持,它允许将一些通用任务,如安全、事物、日志等进行集中式处理,从而提高了程序的复用性。
    • 轻量级框架:spring是轻量级框架,其基本的版本大约2M。
    • 控制反转:spring通过控制反转实现松耦合。对象们给他们依赖,而不是对象本身,方便解耦,简化开发。
    • 方便程序测试:spring提供了Junit4的支持,可以通过注解方便的测试spring程序。
    • 降低java EE API的使用难度:spring对java EE开发中非常难用的一些API(比如JDBC),都提供了封装,使这些API应用难度大大降低。
    • 方便集成各种优秀框架:spring内部提供了对各种优秀框架(如Struts、mybatis)的直接支持。
    • 支持声明式事务处理:只需要通过配置就可以完成对事务的管理,而无须手动编程。

    (4)spring的缺点

    • 依赖反射,反射影响进程。
    • 太过于依赖设计模式。
    • 控制器过于灵活。
    • 不支持分布式应用。

    Spring常用注解(绝对经典)

    Spring视频教程--颜群

    3、hibernate

    (1)基本概念

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

    (2)hibernate的核心构成和执行流程图

    (3)hibernate的优点

    • 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
    • Hibernate是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作,将软件开发人员从大量相同的数据持久层相关编程工作中解放出来,使开发更对象化了。
    • 透明持久化(persistent)带有持久化状态的、具有业务功能的单线程对象,此对象生存期很短。这些对象可能是普通的javabeans/POJO,(POJO概念,plain ordinary java object,简单的java对象,可以简单理解为简单的实体类entity。)这个对象没有实现第三方框架或接口,唯一特殊的是他们正与session关联。一旦这个session被关闭,这些对象就会脱离持久化状态,这样就可被应用程序的任何层自由使用。
    • 事务transaction应用程序用来指定原子操作单元范围的对象,它是单线程的,生命周期很短。它通过抽象将应用从底层具体的JDBC、JTA(java transaction API,JTA允许应用程序执行分布式事务处理,在两个或多个网络计算机资源访问并且更新数据,JDBC驱动程序的JTA支持极大地增强了数据访问能力)以及CORBA(公用对象请求代理程序体系结构,common object request broker architecture,简而言之,CORB允许应用程序和其它的应用程序通讯)事务隔离开。某些情况下,一个session之内可能包含多个transaction对象,事务边界的开启与关闭时必不可少的。
    • 它没有侵入性,是轻量级框架。
    • 移植性好,支持各种数据库,如果换个数据库只要在配置文件中变换配置就可以了,不用改变hibernate代码。
    • 缓存机制,提供一级缓存和二级缓存。

    一级缓存:是session级别的缓存,一个session做了一个查询操作,它会把这个操作的结果放到一级缓存中,如果短时间内这个session又做了同一个操作,那么hibernate直接从一级缓存中拿出,而不会去连数据库取数据。

    二级缓存:是sessionFactory级别的缓存,就是查询的时候会把结果缓存到二级缓存中,如果同一个sessionFactory创建的某个session执行了相同的操作,hibernate就会从二级缓存中拿出结果,而不会再去连接数据库。

    (4)hibernate的缺点

    • 持久层封装过于完整,导致开发人员无法对SQL进行优化,无法灵活应用原生SQL。
    • 批量数据处理的时候较为弱势。
    • 框架中使用ORM原则,导致配置过于复杂,遇到大项目,维护问题不断。

    Hibernate实现CRUD(附项目源码)

    为什么很多人不愿意用hibernate了?

    尚硅谷Java视频_SSH整合&综合案例 视频教程

    手动实现教程源码:

    链接: https://pan.baidu.com/s/1BK0V1wxA-GQrWco10WEzeg 提取码: 2e3e 

    二、SSM

    SSM架构,是三层结合所成的框架,分别是Spring、SpringMVC、MyBatis所组成。Spring依赖注入来管理各层,面向切面编程管理事务,日志和权限。SpringMVC代表了model、view、controller接收外部请求,进行开发和处理。mybatis是基于jdbc的框架,主要用来操作数据库,并且将业务实体和数据表联系起来。

    1、spring

    详细介绍见SSH中spring。

    2、SpringMVC

    (1)基本概念

    属于spring框架的一部分,用来简化MVC架构的web应用程序开发。

    (2)SpringMVC的优点

    • 拥有强大的灵活性,非侵入性和可配置性
    • 提供了一个前端控制器dispatcherServlet,开发者无需额外开发控制器对象
    • 分工明确,包括控制器、验证器、命令对象、模型对象、处理程序映射视图解析器,每一个功能实现由一个专门的对象负责完成
    • 可以自动绑定用户输入,并正确的转换数据类型
    • 可重用的业务代码:可以使用现有的业务对象作为命令或表单对象,而不需要去扩展某个特定框架的基类。

    (3)SpringMVC的缺点

    • servlet API耦合难以脱离容器独立运行
    • 太过于细分,开发效率低

    SpringMVC中put和post如何选择

    GET和POST的区别

    @RequestParam、@ModelAttribute、@RequestBody的区别

    HttpServletResponse response实现文件上传、下载

    3、mybatis

    (1)基本概念

    mybatis是一个简化和实现了java数据持久层的开源框架,它抽象了大量的JDBC冗余代码,并提供了一个简单易用的API和数据库交互。

    (2)mybatis的优点

    • 与JDBC相比,减少了50%以上的代码量。
    • mybatis是最简单的持久化框架,小巧并且简单易学。
    • mybatis灵活,不会对应用程序或者数据库的限售设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,可重用。
    • 提供XML标签,支持编写动态SQL语句(XML中使用if,else)。
    • 提供映射标签,支持对象与数据库的ORM字段关系映射(在XML中配置映射关系,也可以使用注解)

    (3)mybatis的缺点

    • SQL语句的编写工作量较大,对开发人员的SQL语句编写有一定的水平要求。
    • SQL语句过于依赖数据库,不能随意更换数据库。
    • 拼接复杂SQL语句时不灵活。

    【MyBatis 基础知识总结 1】SQL注入

    【MyBatis 基础知识总结 2】MyBatis-Plus

    MyBatis常用标签和注解(绝对经典)

    MyBatis事务管理

    MyBatis逆向工程(Example + Criteria简介)

    MyBatis xml配置文件详解

    Spring JdbcTemplate简介

    纯干货,Spring-data-jpa详解,全方位介绍。

    尚硅谷SSM整合视频教程雷丰阳雷大神讲解

    SpringMVC视频教程--颜群

    颜群版SSM整合示例

    示例源码:

    链接:https://pan.baidu.com/s/1NIDjQ5wRBN9hNc_4G1Nhng 
    提取码:18vi

    三、Springboot

    1、springboot基本概念

    springboot是一个全新的框架,简化Spring的初始搭建和开发过程,使用了特定的方式来进行配置,让开发人员不再需要定义样板化的配置。此框架不需要配置xml,依赖于maven这样的构建系统。

    2、Springboot的优点

    (1)减少了大量的开发时间并提高了生产力

    (2)避免了编写大量的样板代码,注释和XML配置

    (3)解决了spring的弊端

    (4)代码少了、配置文件少了、不需要对第三方框架烦恼了、项目精简了,对整个团队的开发和维护来说,更大的节约了成本。

    3、springboot的缺点

    (1)修复bug较慢,报错时难以定位。

    (2)集成度较高,不易于了解底层。

    4、springboot总结

    简单、快速、方便的搭建项目;对主流开发框架的无配置集成;极大提高了开发、部署效率。

    5、springboot和spring的区别

    (1)springboot可以建立独立的spring应用程序。

    (2)内嵌了如tomcat,Jetty和Undertow这样的容器,也就是说可以直接跑起来,用不着再做部署工作。

    (3)无需再像spring那样写一堆繁琐的XML配置文件

    (4)可以自动配置spring

    (5)提供的POM可以简化maven的配置

    6、springboot和springMVC的区别

    (1)SpringMVC是基于spring的一个MVC框架。

    (2)springboot的基于spring的条件注册的一套快速开发整合包。

    🍅 Java基础教程系列: Java基础教程系列

    🍅 Java学习路线总结:搬砖工逆袭Java架构师

    🍅 Java经典面试题大全:10万字208道Java经典面试题总结(附答案)

    🍅 简介:Java领域优质创作者🏆、CSDN哪吒公众号作者✌ 、Java架构师奋斗者💪

    🍅 扫描主页左侧二维码,加入群聊,一起学习、一起进步 

    🍅 欢迎点赞 👍 收藏 ⭐留言 📝   

    添加微信,备注1024,赠送Java学习路线思维导图 

    展开全文
  • JAVA框架项目

    千次下载 热门讨论 2014-12-09 09:57:57
    JAVA框架项目,学习java 的好文档,分享给各位
  • 10种流行的Java框架

    千次阅读 2021-06-17 15:24:15
    任何框架都是有助于更快更好地开发软件解决方案的工具之一。 框架的基本原理不必重新发明...这是其他Java框架中的绝对领导者。 掌握Spring是Java开发人员职位最普遍的要求之一。 造成这种情况的原因很多,但主要的.

    任何框架都是有助于更快更好地开发软件解决方案的工具之一。

    框架的基本原理不必重新发明轮子。 框架使开发人员的工作变得更轻松,并帮助他们专注于业务逻辑,而不必担心通用的代码段。

    而且由于Java并不是最简单的编程语言之一,因此框架在这里绝对是有用的工具。

    在本文中,我收集了一些最流行,最有价值的框架,这些框架可以帮助您进行Java应用程序开发。

    10种流行的Java框架

     

    1.Spring

    这是其他Java框架中的绝对领导者。 掌握Spring是Java开发人员职位最普遍的要求之一。 造成这种情况的原因很多,但主要的原因是普遍性。

    Spring是一个功能强大,轻量级且最受欢迎的Java EE框架。 正如开发人员自己所说:Spring使Java变得简单,现代,高效,可响应,可用于云。 它以依赖注入和面向方面的编程功能而闻名。 实际上,它是框架的容器,使您可以执行任何复杂的任务-从使用数据库到测试过程。

    开发人员更有可能选择Spring MVC和Spring Boot。 这些框架的最大优点是能够分离其他模块并由于控制反转(IoC)而专注于一个模块。

    优点:

    · 使用POJO(普通Java对象)可导致更简单,更灵活的代码库;

    · 支持模块化(具有许多软件包和类);

    · 向后兼容和易于测试;

    · 庞大的生态系统(Spring Boot,Spring Cloud)和社区;

    · 广泛的文档和多个Spring教程。

    缺点:

    · 不太容易配置

    · 陡峭的学习曲线

    为了检查每个框架的流行程度,使用了Google趋势。

    以下是最近5年Spring受欢迎程度的统计数据:

    10种流行的Java框架

     

    Spring受欢迎程度有所下降,但总体情况表明,它正在逐年增长。

    如前所述,Spring在Github上拥有非常活跃的社区和37K星。

    2.Play

    Play是大多数开发人员喜欢的另一个轻量级框架。 它允许您使用Java和Scala构建Web应用程序。 它是为满足现代移动和Web应用程序的需求而设计的。

    Play基于无状态,网络友好且轻量级的体系结构。 主要区别特征包括高速,高质量和良好的可伸缩性。 它建立在Akka之上,并提供了以更高级的方式思考的敏捷性-不是与Data元素做什么,而是如何处理事物流。

    该框架具有异步API,可让您扩展应用程序而无需引入其他资源。 该框架为各种微服务模式提供了出色的支持。

    优点:

    · 由于热代码重载而提高了效率;

    · Play是可插入的,可配置的,可自定义的,因此很灵活;

    · 易于调试:Play可以在开发人员模式下处理运行时错误和编译错误;

    · 建立在Netty上,并支持非阻塞I / O;

    · 开源,一切都在幕后运作良好;

    · 易于上手。

    缺点:

    · Play2基本上是对Play1的重写;

    · 围绕异步I / O构建,这意味着编写"稍后执行"的代码。

    10种流行的Java框架

     

    Github星星:11.6万。 该框架已被LinkedIn,三星,The Guardian,Verizon等主要公司使用,这证实了其可靠性。

    3.Spark

    Spark Framework是Java和Kotlin编程语言的一种微框架和特定于领域的语言。 Kotlin也可以在JVM上运行,并且可以与Java 100%互操作。 使用Spark,您可以轻松开发Web应用程序,微服务和REST API。

    实际上,您可以在几分钟内启动并运行Spark框架。 默认情况下,它在嵌入框架的Jetty Web服务器上运行。 但是,您也可以将其与其他Java Web服务器一起使用。

    优点:

    · 专为提高生产力而设计;

    · 让您充分利用JVM;

    · 易于启动和运行;

    · 可扩展,您可以插入任何模板引擎。

    缺点:

    · 仅适用于创建小型Web应用程序或API后端。

    在2016年至2018年之间,Spark的受欢迎程度逐渐提高。现在,对该框架的兴趣有所降低:

    10种流行的Java框架

     

    Github星星:8,8K。 Spark被Arquillian,Apache,Asana,Playlife等公司使用。

    4. JHipster

    Jhipster是最新的Java框架之一。 它于2013年发布。Jhipster将Spring Boot,Angular和React集成到一个大型框架中。 它使您可以轻松构建基于Java的现代Web应用程序。

    框架中内置了Spring Boot,可让您基于Spring开发应用程序。 除了Angular和React,JHipster还包含Bootstrap。 该框架允许开发人员在两种类型的体系结构之间进行选择:整体式和微服务。 在第一种情况下,前端和后端集成到一个应用程序中,在第二种情况下-它们是分开的。

    顺便说一下,诸如Adobe,西门子,博世,HBO和Google等品牌都在使用JHipster。

    优点:

    · 轻松引导具有许多预配置技术的新项目;

    · 遵循后端和前端开发的最佳实践和最新趋势;

    · 拥抱Docker和Kubernetes的云原生原则;

    · 开箱即用的登录,登录,用户管理和监视功能;

    · 项目中仅包含您选择的那些技术。

    缺点:

    · 要与JHipster一起使用,最好先熟悉一堆技术;

    · 从端点返回的REST响应并不总是符合业务需求;

    · 并非同一级别上可用的所有选项。

    根据Google的说法,JHipster的流行高峰是在2018年,并且开始缓慢下降:

    10种流行的Java框架

     

    Github明星离Play比赛很近:16.2万。 使用JHipster的公司:Adobe,CGI,BOSCH,HBO,Siemens等。

    5.Blade

    Blade是一个轻量级的Java 8+ MVC框架。 当我们谈论Blade的轻巧性时,是指其源代码的大小,该大小不超过500KB。

    要使用Blade,您需要创建一个常规的Maven项目。 Blade提供了Java 9具有的模块化支持。 它还支持许多Java Web组件。

    优点:

    · 轻巧;

    · 模块化:可以选择要使用的组件;

    · 支持插件扩展和Web jar资源;

    · 嵌入式码头服务器和模板引擎支持;

    · RESTful样式路由;

    · 支持JDK 1.6及更高版本。

    缺点:

    · 仅有助于创建小型MVC应用程序;

    · 主站点上的文档为中文(但确实有英文文档)。

    Google的总体统计数据表明Blade的受欢迎程度正在逐步提高:

    10种流行的Java框架

     

    Github星星:5,3K。

    6.Hibernate

    在谈论最佳的Java Web框架时,不能忽视Hibernate。

    Hibernate是一个ORM(对象/关系映射)框架。 它允许您不使用SQL而是使用Java将查询写到数据库服务器,这通常会改变数据库的常规外观。

    尽管Hibernate并不是一个成熟的框架,但它使您可以轻松地转换各种数据库的信息。 无论应用程序大小和用户数量如何,此功能还可以简化扩展。 通常,此框架可以描述为快速,强大,易于扩展和可定制的。

    它是在GNU Lesser General的公共2.1许可下分发的免费软件。

    优点:

    · Hibernate使您可以通过在代码中进行微小的更改来与任何数据库进行通信。

    · MySQL,Db2或Oracle,Hibernate与数据库无关;

    · 缓存工具以查询相同的错误目录;

    · N + 1或缓慢的加载支持;

    · 数据丢失风险低,并且需要的功率更少。

    缺点:

    · 如果电源关闭,您可能会丢失所有数据。

    · 重新启动可能非常慢。

    查看下面的图表,我们发现在这5年中,Hibernate的普及率一直在下降:

    10种流行的Java框架

     

    GitHub星级:4,3K。

    7. MyBatis

    MyBatis是用于Java编程的映射框架。 它简化了将Java应用程序与SQL数据库链接的过程:它充当它们之间的中间件。

    通常,您将需要Java数据库连接API才能将应用程序连接到关系数据库。 MyBatis简化了过程。 它使开发人员仅使用几行代码即可执行基本的SQL操作。

    MyBatis可以与Hibernate框架进行比较。 它们都代表了应用程序和数据库之间的一种桥梁。 唯一的区别是MyBatis不会将Java对象映射到关系数据库。

    优点:

    · 简便快捷的发展;

    · XML标记,支持动态SQL语句编写;

    · 非常适合编写纯SQL。

    缺点:

    · SQL可能绑定到特定的数据库供应商。

    · 数据库可移植性差。

    根据Google的说法,对该框架的兴趣正逐渐增加:

    10种流行的Java框架

     

    Github星级:13.6K。

    8.Struts

    Struts是用于创建企业级Java Web应用程序的开源MVC(模型-视图-控制器)框架。 最初的Struts框架(Struts 1.x)在2007年与WebWork框架合并时进行了重建。 Struts 1.x和Struts 2.x不可互换,因为它们之间存在重要区别。 您可以从Struts的Releases页面下载。

    该框架的主要优点是其可移植插件,即JAR软件包。 在这种情况下,Hibernate和Spring插件可分别用于对象关系映射和依赖项注入。 通过成功组织Java,JSP和Action类,该框架还有助于减少总体开发时间。

    优点:

    · 使用简单,基于MVC设计模式;

    · 与REST,JSON和AJAX配合使用;

    · 通过插件与其他Java技术集成;

    · 支持主题和模板;

    · 使用基于POJO的简单操作。

    缺点:

    · 难以浏览的文档;

    · 不适合较小的应用程序。

    谷歌显示Struts的知名度在2016-2018年达到顶峰,现在开始缓慢下降:

    10种流行的Java框架

     

    Github评分不高:1k星。 Synopsys,ExpertIO,Nsys Design Systems和其他公司使用Struts。

    9.Vaadin

    Vaadin是一个开放源代码客户端服务器框架,可让您使用预先设计的UI组件创建Web应用程序。 它是专门针对业务应用程序而构建的,重点是可访问,美观且直观的用户界面。

    Vaadin允许您使用纯Java编写UI,而不会陷入JS,HTML和CSS的困境。 此外,您可以使用HTML或视觉设计器创建布局。 Vaadin可直接从Java虚拟机提供对DOM的访问。 此外,它还带有可以通过样式API自定义的现成主题。

    在Vaadin 8之前,客户端是基于GWT的。 Vaadin 10是该框架的重大改进:完全重写了客户端,删除了GWT,并且Vaadin切换到Web组件标准和客户端上的Google Polymer。 新的Vaadin组件是一组Web组件,可以与其他前端JavaScript技术(例如React和Vue甚至纯JavaScript)结合使用。

    优点:

    · 高开发人员生产力和快速开发;

    · 建立在Web组件标准上;

    · 与任何常规Web技术相比,提供了许多组件,布局和不同的侦听器;

    · 自动化客户端-服务器通信和路由;

    · 拥有良好的文档资料和活跃的社区。

    缺点:

    · 与其他可用技术相比,可伸缩性较差;

    · 大型应用程序的初始加载可能很慢。

    至于受欢迎程度,它正在缓慢下降:

    10种流行的Java框架

     

    Github评分:1,6K星。 Vaadin由Docucom,AXPM,CGI,HPD LendScape等使用。

    10. JavaServer Faces(JSF)

    JSF是一种JCP标准技术,用于在Java EE平台上创作基于组件的用户界面。 该框架可能不是最好的框架,但是最大的好处是Oracle支持,许多其他工具,出色的文档以及友好的社区。

    JSF可用于创建企业应用程序,本机程序和Web开发。 开发人员可以通过在页面中组装可重用的UI组件,将这些组件连接到应用程序数据源,并将客户端生成的事件连接到服务器端事件处理程序,来构建Web应用程序。

    优点:

    · JSF是Java EE的重要组成部分,对于使用IDE软件的开发人员来说非常方便。

    缺点:

    · 要与JavaServer Faces一起使用,最好具有丰富的Java知识,一般地了解网络技术,并在没有任何框架的情况下具有在网络上工作的经验。

    根据下图,JSF逐渐失去了知名度:

    10种流行的Java框架

     

    如前所述,JSF并不是最好的技术,但对IDE软件却很有用。

    结论

    Java框架被认为是当今对开发人员最重要的支持,因此仍然存在。 我试图列出其中最有前途和有用的。 最主要的是为特定项目选择最合适的框架。

    如果您要添加任何内容,我们很乐意在下面的评论中阅读。

    展开全文
  • java框架常见的面试题

    万次阅读 多人点赞 2019-03-19 17:53:34
    java框架常见的面试题spring什么是Spring?使用Spring框架的好处是什么?Spring由哪些模块组成?什么是Spring beans?解释Spring支持的几种bean的作用域Spring框架中的单例bean是线程安全的吗?解释Spring框架中bean的...

    java框架常见的面试题

    spring

    什么是Spring?

    spring 是个Java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring 框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。

    使用Spring框架的好处是什么?

    轻量:Spring 是轻量的,基本的版本大约2MB。
    控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。
    面向切面的编程(AOP):Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。
    容器:Spring 包含并管理应用中对象的生命周期和配置。

    Spring由哪些模块组成?

    Core module
    Bean module
    Context module
    Expression Language module
    JDBC module
    ORM module
    OXM module
    Java Messaging Service(JMS) module
    Transaction module
    Web module
    Web-Servlet module
    Web-Struts module
    Web-Portlet module
    

    什么是Spring beans?

    Spring beans 是那些形成Spring应用的主干的java对象。它们被Spring IOC容器初始化,装配,和管理。这些beans通过容器中配置的元数据创建。比如,以XML文件中 的形式定义。
    Spring 框架定义的beans都是单件beans。在bean tag中有个属性”singleton”,如果它被赋为TRUE,bean 就是单件,否则就是一个 prototype bean。默认是TRUE,所以所有在Spring框架中的beans 缺省都是单件。

    解释Spring支持的几种bean的作用域

    Spring框架支持以下五种bean的作用域:
    singleton : bean在每个Spring ioc 容器中只有一个实例。
    prototype:一个bean的定义可以有多个实例。
    request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效。
    session:在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
    global-session:在一个全局的HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。

    缺省的Spring bean 的作用域是Singleton.

    Spring框架中的单例bean是线程安全的吗?

    不,Spring框架中的单例bean不是线程安全的

    解释Spring框架中bean的生命周期

    1、实例化一个Bean--也就是我们常说的new;

    2、按照Spring上下文对实例化的Bean进行配置--也就是IOC注入;

    3、如果这个Bean已经实现了BeanNameAware接口,会调用它实现的setBeanName(String)方法,此处传递的就是Spring配置文件中Bean的id值

    4、如果这个Bean已经实现了BeanFactoryAware接口,会调用它实现的setBeanFactory(setBeanFactory(BeanFactory)传递的是Spring工厂自身(可以用这个方式来获取其它Bean,只需在Spring配置文件中配置一个普通的Bean就可以);

    5、如果这个Bean已经实现了ApplicationContextAware接口,会调用setApplicationContext(ApplicationContext)方法,传入Spring上下文(同样这个方式也可以实现步骤4的内容,但比4更好,因为ApplicationContext是BeanFactory的子接口,有更多的实现方法);

    6、如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessBeforeInitialization(Object obj, String s)方法,BeanPostProcessor经常被用作是Bean内容的更改,并且由于这个是在Bean初始化结束时调用那个的方法,也可以被应用于内存或缓存技术;

    7、如果Bean在Spring配置文件中配置了init-method属性会自动调用其配置的初始化方法。

    8、如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessAfterInitialization(Object obj, String s)方法、;

    注:以上工作完成以后就可以应用这个Bean了,那这个Bean是一个Singleton的,所以一般情况下我们调用同一个id的Bean会是在内容地址相同的实例,当然在Spring配置文件中也可以配置非Singleton,这里我们不做赘述。
    

    9、当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean这个接口,会调用那个其实现的destroy()方法;

    10、最后,如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用其配置的销毁方法。

    依赖注入DI

    在运行期,由外部容器动态的将依赖对象注入到组件中。
    spring 依赖注入方式
    1.Set注入
    2.构造器注入
    3.静态工厂的方法注入
    4.实例工厂的方法注入

    控制反转IOC

    就是应用本身不负责依赖对象的创建和维护,依赖对象的创建和维护都是由外部容器负责的。
    IOC创建对象的几种方式

    1)调用无参数构造器

    2)带参数构造器

    3)工厂创建对象

    工厂类:静态方法创建对象
      工厂类:非静态方法创建对象

    AOP

    AOP中的概念

    面向切面:在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程

    常用注解
    • @aspect 定义切面
    • @pointcut 定义切点
    • @before 标注Before Advice定义所在的方法
    • @afterreturning 标注After Returning Advice定义所在的方法
    • @afterthrowing 标注After Throwing Advice定义所在的方法
    • @after 标注 After(Finally) Advice定义所在的方法
    • @around 标注Around Advice定义所在的方法

    Aspect(切面): 是通知和切入点的结合,通知和切入点共同定义了关于切面的全
    部内容—它的功能、在何时和何地完成其功能
    joinpoint(连接点):所谓连接点是指那些被拦截到的点。在spring中,这些点指的
    是方法,因为spring只支持方法类型的连接点.
    Pointcut(切入点):所谓切入点是指我们要对哪些joinpoint进行拦截的定义.
    通知定义了切面的”什么”和”何时”,切入点就定义了”何地”.
    Advice(通知):所谓通知是指拦截到joinpoint之后所要做的事情就是通知.通知分
    为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能)
    Target(目标对象):代理的目标对象
    Weaving(织入):是指把切面应用到目标对象来创建新的代理对象的过程.切面在
    指定的连接点织入到目标对象
    Introduction(引入):在不修改类代码的前提下, Introduction可以在运行期为类
    动态地添加一些方法或Field.

    Spring中的AOP底层实现原理

    动态代理,照我的理解就是,在不修改原有类对象方法的源代码基础上,通过代理对象实现原有类对象方法的增强,也就是拓展原有类对象的功能。

    spring mvc

    Spring mvc 的执行流程

    1. 客户端发http请求,服务器接收到请求,如果匹配DispatchServlet的请求映射路径(在web.xml中指定),web容器将请求转发交给DispatchServlet处理。
    2. DispatchServlet根据请求的信息(包括URL,http方法,请求报文头,请求参数,cookie等)及HandlerMapping的配置找到处理请求的的处理器(Handler)。
    3. 得到请求的Handler后,通过HandlerAdapter对Handler进行封装,再以统一的适配器接口调用Handler。HandlerAdapter是一个适配器,它用统一的接口对各种Handler方法进行调用
    4. ,处理器完成业务逻辑处理后将返回一个ModelAndView给DispatchServlet, ModelAndView包含了视图逻辑名和模型数据信息。
    5. 当得到真实的视图队形view后,DispatchServlet就使用这个view对象,对ModelAndView中的模型数据进行视图渲染。
    6. 客户端得到响应消息,可能是HTML、xml、json等不同的媒体格式。

    spring boot

    什么是Spring boot,Spring boot 有什么特性?

    Spring boot 不是对Spring功能上的增强,而是提供了一种快速使用Sping的方式
    用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置(properties或yml文件)
    创建独立的spring引用程序 main方法运行
    嵌入的Tomcat 无需部署war文件
    简化maven配置
    自动配置spring添加对应功能starter自动化配置

    Spring boot AOP 设计模式

    动态代理模式
    Spring boot AOP 设计模式

    Spring boot 缓存

    Spring boot 缓存

    什么是YAML?

    AML是一种人类可读的数据序列化语言。它通常用于配置文件。
    与属性文件相比,如果我们想要在配置文件中添加复杂的属性,YAML文件就更加结构化,而且更少混淆。可以看出YAML具有分层配置数据。

    5. Springboot 中application.yml和bootStrap.yml

    加载顺序
    bootstrap.yml(bootstrap.properties)先加载
    application.yml(application.properties)后加载
    bootstrap.yml 用于应用程序上下文的引导阶段。
    bootstrap.yml 由父Spring ApplicationContext加载。
    父ApplicationContext 被加载到使用 application.yml 的之前。
    配置区别
    bootstrap.yml 和application.yml 都可以用来配置参数。
    bootstrap.yml 可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。
    application.yml 可以用来定义应用级别的,如果搭配 spring-cloud-config 使用 application.yml 里面定义的文件可以实现动态替换。
    使用Spring Cloud Config Server时,应在 bootstrap.yml 中指定:
    1.spring.application.name
    2.spring.cloud.config.server.git.uri
    3.一些加密/解密信息

    springboot常用的starter有哪些

    spring-boot-starter-web 嵌入tomcat和web开发需要servlet与jsp支持
    spring-boot-starter-data-jpa 数据库支持
    spring-boot-starter-data-redis redis数据库支持
    spring-boot-starter-data-solr solr支持
    mybatis-spring-boot-starter 第三方的mybatis集成starter

    springboot自动配置的原理

    在spring程序main方法中 添加@SpringBootApplication或者@EnableAutoConfiguration
    会自动去maven中读取每个starter中的spring.factories文件 该文件里配置了所有需要被创建spring容器中的bean

    spring cloud

    什么是Spring cloud,Spring cloud有什么特性

    Spring cloud 就是一套分布式服务治理的框架,它不会提供具体功能的操作,更专注于服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等等。

    Spring boot 和Spring cloud 的区别

    1、Spring boot 是 Spring 的一套快速配置脚手架,可以基于spring boot 快速开发单个微服务;Spring Cloud是一个基于Spring Boot实现的云应用开发工具;
    2、Spring boot专注于快速、方便集成的单个个体,Spring Cloud是关注全局的服务治理框架;
    3、spring boot使用了默认大于配置的理念,很多集成方案已经帮你选择好了,能不配置就不配置,Spring Cloud很大的一部分是基于Spring boot来实现。
    4、Spring boot可以离开Spring Cloud独立使用开发项目,但是Spring Cloud离不开Spring boot,属于依赖的关系。

    dubbo

    dubbo面试题

    Dubbo是什么?

    Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架
    其核心部分包含:

    1. 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
    2. 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
    3. 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

    Dubbo能做什么?

    1.透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。
    2.软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。
    3. 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。

    dubbo的架构

    在这里插入图片描述节点角色说明:
    Provider: 暴露服务的服务提供方。
    Consumer: 调用远程服务的服务消费方。
    Registry: 服务注册与发现的注册中心。
    Monitor: 统计服务的调用次调和调用时间的监控中心。
    Container: 服务运行容器。

    调用关系说明:
    0 服务容器负责启动,加载,运行服务提供者。

    1. 服务提供者在启动时,向注册中心注册自己提供的服务。
    2. 服务消费者在启动时,向注册中心订阅自己所需的服务。
    3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
    4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
    5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

    dubbo使用方法

    Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。如果不想使用Spring配置,而希望通过API的方式进行调用(不推荐)
    Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。

    mybatis

    #{}和${}的区别是什么?

    知识储备:

    ${} 是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc.Driver。#{}是sql的参数占位符,Mybatis会将sql中的#{}替换为?号,在sql执行前会使用PreparedStatement的参数设置方法,按序给sql的?号占位符设置参数值,比如ps.setInt(0, parameterValue),#{item.name}的取值方式为使用反射从参数对象中获取item对象的name属性值,相当于param.getItem().getName()
    

    #{}是预编译处理,${}是字符串替换。

    Mybatis在处理 时 , 就 是 把 {}时,就是把 {}替换成变量的值。
    #{}解析传递进来的参数数据
    ${}对传递进来的参数原样拼接在SQL中
    使用#{}可以有效的防止SQL注入,提高系统安全性。

    Xml映射文件中,除了常见的select|insert|updae|delete标签之外,还有哪些标签?`

    <resultMap>、<parameterMap>、<sql>、<include>、<selectKey>,加上动态sql的9个标签,trim|where|set|foreach|if|choose|when|otherwise|bind等,
    其中<sql>为sql片段标签,通过<include>标签引入sql片段,
    <selectKey>为不支持自增的主键生成策略标签。
    

    最佳实践中,通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?

    Dao接口,就是人们常说的Mapper接口,接口的全限名,就是映射文件中的namespace的值,接口的方法名,就是映射文件中MappedStatement的id值,接口方法内的参数,就是传递给sql的参数。Mapper接口是没有实现类的,当调用接口方法时,接口全限名+方法名拼接字符串作为key值,可唯一定位一个MappedStatement,举例:com.mybatis3.mappers.StudentDao.findStudentById,可以唯一找到namespace为com.mybatis3.mappers.StudentDao下面id = findStudentById的MappedStatement。在Mybatis中,每一个<select>、<insert>、<update>、<delete>标签,都会被解析为一个MappedStatement对象。
    Dao接口里的方法,是不能重载的,因为是全限名+方法名的保存和寻找策略。
    Dao接口的工作原理是JDK动态代理,Mybatis运行时会使用JDK动态代理为Dao接口生成代理proxy对象,代理对象proxy会拦截接口方法,转而执行MappedStatement所代表的sql,然后将sql执行结果返回。

    Mybatis是如何进行分页的?分页插件的原理是什么?

    Mybatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页,可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。
    分页插件的基本原理是使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数。
    举例:select * from student,拦截sql后重写为:select t.* from (select * from student)t limit 0,10

    简述Mybatis的插件运行原理,以及如何编写一个插件。

    Mybatis仅可以编写针对ParameterHandler、ResultSetHandler、StatementHandler、Executor这4种接口的插件,Mybatis使用JDK的动态代理,为需要拦截的接口生成代理对象以实现接口方法拦截功能,每当执行这4种接口对象的方法时,就会进入拦截方法,具体就是InvocationHandler的invoke()方法,当然,只会拦截那些你指定需要拦截的方法。
    实现Mybatis的Interceptor接口并复写intercept()方法,然后在给插件编写注解,指定要拦截哪一个接口的哪些方法即可,记住,别忘了在配置文件中配置你编写的插件。

    Mybatis动态sql是做什么的?都有哪些动态sql?能简述一下动态sql的执行原理不?

    Mybatis动态sql可以让我们在Xml映射文件内,以标签的形式编写动态sql,完成逻辑判断和动态拼接sql的功能,Mybatis提供了9种动态sql标签trim|where|set|foreach|if|choose|when|otherwise|bind。
    其执行原理为,使用OGNL从sql参数对象中计算表达式的值,根据表达式的值动态拼接sql,以此来完成动态sql的功能。

    Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?

    第一种是使用标签,逐一定义列名和对象属性名之间的映射关系。第二种是使用sql列的别名功能,将列别名书写为对象属性名,比如T_NAME AS NAME,对象属性名一般是name,小写,但是列名不区分大小写,Mybatis会忽略列名大小写,智能找到与之对应对象属性名,你甚至可以写成T_NAME AS NaMe,Mybatis一样可以正常工作。
    有了列名与属性名的映射关系后,Mybatis通过反射创建对象,同时使用反射给对象的属性逐一赋值并返回,那些找不到映射关系的属性,是无法完成赋值的。

    Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?

    Mybatis仅支持association关联对象和collection关联集合对象的延迟加载,association指的就是一对一,collection指的就是一对多查询。在Mybatis配置文件中,可以配置是否启用延迟加载lazyLoadingEnabled=true|false。
    它的原理是,使用CGLIB创建目标对象的代理对象,当调用目标方法时,进入拦截器方法,比如调用a.getB().getName(),拦截器invoke()方法发现a.getB()是null值,那么就会单独发送事先保存好的查询关联B对象的sql,把B查询上来,然后调用a.setB(b),于是a的对象b属性就有值了,接着完成a.getB().getName()方法的调用。这就是延迟加载的基本原理。
    当然了,不光是Mybatis,几乎所有的包括Hibernate,支持延迟加载的原理都是一样的。

    JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的?

    ① 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。
    解决:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。

    ② Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。
    解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。

    ③ 向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。
    解决: Mybatis自动将java对象映射至sql语句。

    ④ 对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。
    解决:Mybatis自动将sql执行结果映射至java对象。

    MyBatis编程步骤是什么样的?

    ① 创建SqlSessionFactory
    ② 通过SqlSessionFactory创建SqlSession
    ③ 通过sqlsession执行数据库操作
    ④ 调用session.commit()提交事务
    ⑤ 调用session.close()关闭会话

    为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?

    Hibernate属于全自动ORM映射工具,使用Hibernate查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取,所以它是全自动的。而Mybatis在查询关联对象或关联集合对象时,需要手动编写sql来完成,所以,称之为半自动ORM映射工具。
    一对一、一对多的关联查询
    association 一对一关联查询
    collection 一对多关联查询

    MyBatis实现一对一有几种方式?具体怎么操作的?

    有联合查询和嵌套查询,联合查询是几个表联合查询,只查询一次, 通过在resultMap里面配置association节点配置一对一的类就可以完成; 嵌套查询是先查一个表,根据这个表里面 的结果的外键id,去再另外一个表里面查询数据,也是通过association配置,但另外一个表的查询通过select属性配置。

    MyBatis实现一对多有几种方式,怎么操作的?

    有联合查询和嵌套查询,联合查询是几个表联合查询,只查询一次,通过在resultMap里面配 置collection节点配置一对多的类就可以完成; 嵌套查询是先查一个表,根据这个表里面的 结果的外键id,去再另外一个表里面查询数据,也是通过配置collection,但另外一个表的查询通过select节点配置。

    Mybatis比IBatis比较大的几个改进是什么?

    (1)有接口绑定,包括注解绑定sql和xml绑定Sql ,
    (2)动态sql由原来的节点配置变成OGNL表达式,
    (3)在一对一,一对多的时候引进了association,在一对多的时候引入了collection 节点,不过都是在resultMap里面配置。

    IBatis和MyBatis在核心处理类分别叫什么?

    IBatis里面的核心处理类交SqlMapClient, MyBatis里面的核心处理类叫做SqlSession

    mybatis一级缓存二级缓存

    1)一级缓存: 基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该 Session 中的所有 Cache 就将清空,默认打开一级缓存

    2)二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,HashMap 存储,不同在于其存储作用域为 Mapper(Namespace),并且可自定义存储源,如 Ehcache。默认不打开二级缓存,要开启二级缓存,使用二级缓存属性类需要实现Serializable序列化接口(可用来保存对象的状态),可在它的映射文件中配置 ;

    3)对于缓存数据更新机制,当某一个作用域(一级缓存 Session/二级缓存Namespaces)的进行了C/U/D 操作后,默认该作用域下所有 select 中的缓存将被 clear。

    一级缓存

    Mybatis对缓存提供支持,但是在没有配置的默认情况下,它只开启一级缓存,一级缓存只是相对于同一个SqlSession而言。所以在参数和SQL完全一样的情况下,我们使用同一个SqlSession对象调用一个Mapper方法,往往只执行一次SQL,因为使用SelSession第一次查询后,MyBatis会将其放在缓存中,以后再查询的时候,如果没有声明需要刷新,并且缓存没有超时的情况下,SqlSession都会取出当前缓存的数据,而不会再次发送SQL到数据库。

    在这里插入图片描述

    一级缓存的生命周期有多长?

    a、MyBatis在开启一个数据库会话时,会 创建一个新的SqlSession对象,SqlSession对象中会有一个新的Executor对象。Executor对象中持有一个新的PerpetualCache对象;当会话结束时,SqlSession对象及其内部的Executor对象还有PerpetualCache对象也一并释放掉。
    b、如果SqlSession调用了close()方法,会释放掉一级缓存PerpetualCache对象,一级缓存将不可用。
    c、如果SqlSession调用了clearCache(),会清空PerpetualCache对象中的数据,但是该对象仍可使用。
    d、SqlSession中执行了任何一个update操作(update()、delete()、insert()) ,都会清空PerpetualCache对象的数据,但是该对象可以继续使用

    怎么判断某两次查询是完全相同的查询?

    mybatis认为,对于两次查询,如果以下条件都完全一样,那么就认为它们是完全相同的两次查询。

    二级缓存

    MyBatis的二级缓存是Application级别的缓存,它可以提高对数据库查询的效率,以提高应用的性能。
      MyBatis的缓存机制整体设计以及二级缓存的工作模式
    在这里插入图片描述SqlSessionFactory层面上的二级缓存默认是不开启的,二级缓存的开席需要进行配置,实现二级缓存的时候,MyBatis要求返回的POJO必须是可序列化的

    也就是要求实现Serializable接口,配置方法很简单,只需要在映射XML文件配置就可以开启缓存了,如果我们配置了二级缓存就意味着:
    • 映射语句文件中的所有select语句将会被缓存。
    • 映射语句文件中的所欲insert、update和delete语句会刷新缓存。
    • 缓存会使用默认的Least Recently Used(LRU,最近最少使用的)算法来收回。
    • 根据时间表,比如No Flush Interval,(CNFI没有刷新间隔),缓存不会以任何时间顺序来刷新。
    • 缓存会存储列表集合或对象(无论查询方法返回什么)的1024个引用
    • 缓存会被视为是read/write(可读/可写)的缓存,意味着对象检索不是共享的,而且可以安全的被调用者修改,不干扰其他调用者或线程所做的潜在修改。

    1. 启动redis服务,确认服务启动成功(默认端口6379)
    2. ssm中加入redis jedis依赖
    3. 配置redis的信息
    4. 写redis缓存中间类
    5. spring中加载redis的信息并配(加载redis配置信息—配置rdis使用jedispoolconfig连接池,配置连接工厂jedisconnectionfactory,使用中间类注入到工厂中配置mybatis用redis作为第三方缓存—配置序列化方式)
    6. 在mybatis sqlmapconfig.xml中增加cacheenabled属性为true
    7. 在mapper.xml中加入标签

    本文参考网上资料如下:
    https://blog.csdn.net/webzhuce/article/details/72805896
    https://blog.csdn.net/moakun/article/details/82919804

    展开全文
  • 什么是Java框架?主要的Java框架有哪些

    千次阅读 多人点赞 2020-01-17 22:18:35
    什么是Java框架?Java框架有哪些?Java框架可以简化开发难度,便于我们更好的开发程序。所以学好Java框架还是比较重要的。下面就简要描述一下Java开发常用的四大框架,以此来分析。 什么是Java框架 JAVA框架就是一些类...

    什么是Java框架?Java框架有哪些?Java框架可以简化开发难度,便于我们更好的开发程序。所以学好Java框架还是比较重要的。下面就简要描述一下Java开发常用的四大框架,以此来分析。
    什么是Java框架
    JAVA框架就是一些类和接口的集合,通过这些类和接口协调来完成一系列的程序实现。框架又叫做开发中的半成品,它不能提供整个WEB应用程序的所有东西,但是有了框架,我们就可以集中精力进行业务逻辑的开发而不用去关心它的技术实现以及一些辅助的业务逻辑。简单啊来说,就像我们盖房子如果我们没有房子整体的结构图我们只能一砖一砖的去磊房子,会磊成什么样子不说,一但磊歪了我们还得拆掉重新去磊。但是如果有人直接给我们搭建好了房子的整体结构呢?那就不一样了,我们只需要按照房子结构去往里面添砖就可以了。
    我这有个免费学习领取Java资料的裙768976403,欢迎各位同学加入一起讨论
    在这里插入图片描述
    加我q Q 315900256私聊也行,免费领取Java学习资料
    Java开发四大框架有哪些?
    Java的框架主要有:SpringMVC、Spring、Mybatis、Dubbo、Maven、RabbitMQ、Log4j、Ehcache、Redis、Shiro。以上十个Java框架并不需要都学会,只要会其中四五个比较常用的就可以了。
    第一个,SpringMVC。Spring MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,主要是帮助我们简化日常的Web开发。
    第二个,Mybatis。MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。
    第三个,Spring。Spring深得企业的青睐。
    第四个,Maven。越来越多的开发人员开始使用maven。

    展开全文
  • 2020 最受欢迎的九大顶级 Java 框架

    千次阅读 2020-11-22 14:10:00
    作者丨Patricia Ne il由“京东云开发者社区”公众号编辑整理诞生于1995年的Java,目前已在134,861个网站上广泛使用,包括ESPN、SnapDeal等。在其24年的...
  • 常见的Java框架有哪些?

    千次阅读 2021-07-05 17:43:32
    Java语言仍然是当下 “程序猿”们最爱使用的热门编程语言之一,想要进入这个行业,Java可以为你引路,很多初学的人可能没有系统的了解过Java框架都有哪些。今天为大家整理一下常见的Java框架都有什么? Java框架 1....
  • java框架都有哪些?

    千次阅读 2021-01-14 15:59:07
    Java框架有SpringMVC、Spring、Mybatis、Dubbo、Maven、RabbitMQ、Log4j、Ehcache、Redis、Shiro。这些框架不需要全部学会,只需要掌握其中几个比较常用的就足够了。 Java的主要框架 第一、SpringMVC ...
  • Java是世界第一编程语言...本文小编主要介绍2020年流行的9大Java开发框架,希望您可以对Java框架有更多的认识。 一、Spring框架 Spring框架框架排名首位,具有开发复杂Web应用程序的出色能力,这些应用程序因性能突...
  • Java是世界第一编程语言,这已经达成共识,是毋庸置疑的真理。框架是程序员们必学的知识点,而且是十分重要的应用。在Java学习中框架是很重要的,框架不但能够帮助...所谓的Java框架,简单理解是一个可复用的设计构...
  • java框架,优缺点。

    千次阅读 2020-02-07 10:53:13
    java2e框架,优缺点。 Spring 框架 优点 1.提供了一种管理对象的方法,可以把中间层的对象有效地组织起来 2.采用了分层结构,可以增量引入到项目中。 3.代码测试较容易 4.非侵入性,应用程序对Spring API的依赖可以...
  • Java框架学习

    万次阅读 2018-04-10 10:35:02
    这是一张Spring 3的框架图spring分为5个部分:core、aop、data access、web、testcorecore部分包含4个模块spring-core:依赖注入IoC与DI的最基本实现spring-beans:Bean工厂与bean的装配spring-context:spring的...
  • 2018年常用的7款Java框架

    万次阅读 多人点赞 2018-06-18 10:38:14
    虽然Java一直被唱衰,但是直到现在Java软件开发也坚持霸主地位不动摇,毫无疑问,Java是目前最热门的编程语言之一,所以好程序员为大家收集了目前较受欢迎的java框架消息。千锋Java培训课程坚持稀有的全程面授课程,...
  • 7 个最佳的 Java 框架

    万次阅读 2017-11-27 23:42:44
    7 个最佳的 Java 框架  java 大鱼号 11-25 10:04 ...在这里,我们已经挖掘了...根据RebelLabs,也是在线Java用户组(虚拟JUG)的媒体盟友所进行的调查,2016年最佳java框架的阵容如下: 我们并不希望你只
  • 来源 | Patricia Neil责编 |Carol出品 | CSDN云计算(ID:CSDNcloud)顶级Java框架#1:Spring顶级Java框架#2:Hibernate顶级...
  • 本课程为完整Java高级架构师课程体系,目的在于... 本章节为手写Java框架系列教程之注解专题内容,通过老师的讲解,你能掌握手写Java框架系列教程之注解的知识,跟着老师的学习步骤和方法能让你手写出一个Java框架
  • 如何才能学好java框架

    千次阅读 多人点赞 2018-01-11 18:21:30
    学习java已经三个月了,开始接触java框架的学习,就老师给我们讲解的框架知识,做了一下简单的总结,都是工作中能用到的实用的框架技术,还没整明白java框架的同胞们,快开启你的学习之旅吧!  刚开始学习Java...
  • 常用三大java框架

    万次阅读 2018-06-14 09:55:40
    1.Structs框架是最早的Java开源框架之一.Struts是MVC设计模式的一个优秀实现.Struts是最早的java开源框架之一,它是MVC设计模式的一个优秀实现。 Struts定义了通用的Controller(控制器),通过配置文件(通常是 ...
  • 神经网络java框架学习

    千次阅读 2018-01-19 12:12:02
    1. Java神经网络框架 Neuroph  Neuroph是轻量级的Java神经网络的框架,可以用来模拟常见的神经网络架构。Neuroph包含一个开源的java类库和少量对应基本神经网络概念的基类,以及easyNeurons GUI工具。 Neuroph ...
  • springmvc spring hibernate mybatis框架搭建
  • Java框架安全

    千次阅读 2017-05-18 13:19:39
    Mybatis是目前比较常用的ORM的框架,一般与SpringMVC框架整合较多,但使用不当会有SQL注入的风险。 Mybatis里mapper中SQL语句的写法支持两种形式的占位符,一种是#{value}一种是${value}. 使用#进行占位时,如: ...
  • 本课程为完整Java高级架构师课程... 本章节为手写Java框架系列教程之反射专题内容,通过老师的讲解,你能掌握手写Java框架系列教程之反射的知识,跟着老师的学习步骤和方法能让你手写出一个Java框架。 Java架构师课程
  • 今年7款最佳 Java 框架

    万次阅读 2016-11-08 09:56:29
    导读 毫无疑问,Java 是目前...RebelLabs的一项调查显示,通过在线Java用户论坛(虚拟JUG)媒体联盟的调查统计,2016年度最佳Java框架阵容如下:  数据来源:RebelLabs for Zero TurnAround Inc. 我们不会仅仅基于上
  • 实训小结---Java框架学习心得

    千次阅读 2018-07-12 18:40:04
    UserMapper.java   添加数据库之后,需要将前端后端结合起来,实现各个功能,下面是我自己的一些总结以及注意点: 先写 mapper 文件,新建 Mapper.java 和 Mapper.xml 文件, .java 文件是一个接口, .xml 文件里面...
  • JAVA三大框架思维导图

    2015-12-08 18:26:16
    对于JAVA学习后期三大框架的总结,包括了Spring,Hibernate和Struts2.可能体系不算很完善,但是也算是一次系统的总结
  • Java框架Java框架Java框架Java框架Java框架Java框架Java框架Java框架Java框架Java框架Java框架Java框架Java框架Java框架Java框架Java框架
  • 微信公众号开发,原来这么简单?[java框架]

    万次阅读 多人点赞 2016-12-15 22:13:52
    可能你不知道,有个框架叫wx-tools(小心翼翼地说) Wx-tools是基于微信公众平台API的轻量级框架。 基于Wx-tools你可以开速开发一个订阅号/服务号的web应用后台。 博主最近终于有空!!已经更新到2.1.0啦!! ...
  • 轻量级java框架 light-4j

    千次阅读 2019-03-26 14:43:12
    来源微信公众号:Java技术栈(ID:javastack) 转自: https://blog.csdn.net/youanyyou/article/details/88812143
  • Java学习路线图的框架部分分为两个阶段,第一阶段的Java框架包含六个内容:MyBatis,Spring,SpringMVC,Maven高级,Git,Dubbo。在Java学习路线图中掌握框架的使用,对企业项目的构建有着关键性的作用。Java框架...
  • 2016 年 7 个最佳的 Java 框架

    千次阅读 2016-11-03 17:14:42
    在这段时间之中,Java作为在世界上需求...根据RebelLabs进行的一项调查显示,在线媒体盟友的Java用户组(Virtual JUG),2016年最佳阵容的Java框架如下: 图片来源: RebelLabs for Zero TurnAround Inc. 我们不

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,433,974
精华内容 573,589
关键字:

java框架

java 订阅