【JAVAEE框架】Spring 项目构建流程

 哈喽~大家好呀,这篇来看看Spring 项目起步讲解。

 个人主页:个人主页​​​​​                

 系列专栏:【Java EE框架】

与这篇相关的文章:               

【JAVAEE框架】Mybatis项目起步讲解 【JAVAEE框架】Mybatis项目起步讲解_程序猿追的博客-CSDN博客
【JAVAEE框架】Mybatis常用操作(CRUD) 【JAVAEE框架】Mybatis常用操作(CRUD)_程序猿追的博客-CSDN博客
【JAVAWEB开发】基于Java+Servlet+Ajax+jsp网上购物系统设计实现 【JAVAWEB开发】基于Java+Servlet+Ajax+jsp网上购物系统设计实现_程序猿追的博客-CSDN博客

目录

一、前言补充

1、ResultMap 映射。

2、Mybatis一级缓存二级缓存

2.1、一级缓存

2.2、二级缓存

二、Spring 核心概念

1、介绍

2、优点

3、体系结构

三、快速使用

1、applicationcontext.xml 作用

2、详细讲解

2.1、beans

2.2、xmlns

2.3、xsi:schemaLocation

2.4、bean标签

2.5、property标签

3、代码示例

4、示例讲解


一、前言补充

1、ResultMap 映射。

补充上篇 Mybatis 的——ResultMap,在 JavaWeb项目中使用了 ResultMap 没做具体的讲解。

当实体类的成员变量与 DB 字段名对不上时,使用 resultMap 映射。

什么意思?

实体类的成员变量的变量名是A, DB 字段名是A1,连接 DB 时由于名称对不上,页面就不会显示数据,所以,使用 ResultMap 映射,解决此类问题

1、属性说明

  • id属性 ,resultMap标签的标识。
  • type属性 ,返回值的全限定类名,或类型别名。
  • autoMapping属性 ,值范围true(默认值)|false, 设置是否启动自动映射功能,自动映射功能就是自动查找与字段名小写同名的属性名,并调用setter方法。而设置为false后,则需要在resultMap内明确注明映射关系才会调用对应的setter方法。

示例

    
        
    

扩:当我们对多表操作的时候,表与表之间可能会出现对不上的情况,这时需要使用 association 与 collection

示例




    
        
        
        
    

2、Mybatis一级缓存二级缓存

2.1、一级缓存

Mybatis 的一级缓存是指 Session 缓存。一级缓存的作用域默认是 SqlSession 。Mybatis默认开启一级缓存。
在同一个SqlSession中,执行相同的查询SQL,第一次会去数据库进行查询,并写到缓存中;第二次以后则直接去一级缓存中取。
当执行的SQL查询中间发生了增删改的操作,mybatis 会把 SqlSession 的缓存清空。
意思是说:执行相同的操作,第一次会把结果写到缓存中,第二次执行时直接从缓存拿数据,Mybatis默认开启一级缓存

一级缓存失效的情况:

1、SqlSession不同;
2、SqlSession相同,查询条件不同。因为缓存条件不同,缓存中还没有数据。
3、SqlSession相同,在两次相同查询条件中间执行过增删改操作。
4、SqlSession相同,手动清空了一级缓存。(如果SqlSession去执行commit操作(执行插入。更新、删除),清空SqlSession中的一级缓存,这样做的目的是为了让缓存中存储的是最新的消息,避免脏读。)

关闭一级缓存

        
        


2.2、二级缓存

Mybatis的二级缓存是指mapper映射文件。二级缓存的作用域是同一个nameSpace下的mapper映射文件内容,多个SqlSession共享。Mybatis需要手动设置启动二级缓存。
一个会话,查询一条数据,这个数据会被放在当前会话的一级缓存中;如果会话被关闭了,一级缓存汇总的数据会被保存到二级缓存。新的会话查询信息就会参照二级缓存。
二级缓存的使用原则:

1、只能在一个命名空间下使用二级缓存。由于二级缓存中的数据是基于nameSpace的,即不同nameSpace中的数据互不干扰。在多个nameSpace中若均存在对同一个表的操作,那么这多个nameSpace中的数据可能就会出现不一致现象。
2、在单表上使用二级缓存。如果一个表与其他表有关联关系,那么就非常有可能存在多个nameSpace对同一数据的操作。而不同nameSpace中的数据互不干扰,所以就有可能出现多个nameSpace中的数据不一致现象。
3、查询多于修改时使用二级缓存。在查询操作远远多于增删改操作的情况下可以使用二级缓存。因为任何增删改操作都将刷新二级缓存,对二级缓存的频繁刷新将降低系统性能。

开启二级缓存

        
        

【JAVAEE框架】Spring 项目构建流程_第1张图片

二、Spring 核心概念

1、介绍

Spring理念 : 使现有技术更加实用 . 本身就是一个大杂烩 , 整合现有的框架技术

官网 : http://spring.io/

官方下载地址 : https://repo.spring.io/libs-release-local/org/springframework/spring/

GitHub : https://github.com/spring-projects

pom导入



    org.springframework
    spring-webmvc
    5.2.0.RELEASE



    org.springframework
    spring-jdbc
    5.2.0.RELEASE


2、优点

2.1、低侵入式设计
2.2、独立于各种应用服务器
2.3、依赖注入特性将组件关系透明化,降低了耦合度
2.4、面向切面编程特性允许将通用任务进行集中式处理
2.5、与第三方框架的良好整合

3、体系结构

【JAVAEE框架】Spring 项目构建流程_第2张图片

组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:

  • 核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转(IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
  • Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
  • Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向切面的编程功能 , 集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理任何支持 AOP的对象。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖组件,就可以将声明性事务管理集成到应用程序中。
  • Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
  • Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
  • Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
  • Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。

Spring设计理念
Spring是面向Bean的编程

Spring 两大核心技术
控制反转(IoC:Inversion of Control ) /依赖注入(DI:Dependency Injection )
面向切面编程(AOP:Aspect Oriented Programming)

三、快速使用

1、applicationcontext.xml 作用

我们学Spring的主要目的还是因为Spring能充当我们容器管理的作用,这个作用主要体现在:
控制反转: Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。
面向切面的编程(AOP): Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。
容器: Spring 包含并管理应用中对象的生命周期和配置。
MVC框架: Spring的WEB框架是个精心设计的框架,是Web框架的一个很好的替代品。
事务管理: Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)。
异常处理: Spring 提供方便的API把具体技术相关的异常(比如由JDBC,Hibernate or JDO抛出的)转化为一致的unchecked 异常。
这里不详细讲解Spring框架,但作用大概就这几个,当然还有管理各类ORM框架等,不在这里讨论。
由于applicationContext.xml文件 Spring的配置文件,所以applicationContext.xml的作用当然就是用来配置Spring框架所需的信息了。

2、详细讲解

2.1、beans

applicationContext.xml文件的根元素,所有的内容都需要包含在beans的标签中。

2.2、xmlns

这是xml namespace即xml命名空间的简称,主要用于引入一些.xsd文件(也就是说xmlns后面的连接就是连接到相应的.xsd文件网站的,.xsd文件里面有特定的配置,比如xmlns:aop="http://www.springframework.org/schema/aop"就是加载aop切面的),xmlns冒号后面的是这个.xsd的前缀,如果后续使用的时候,直接就

2.3、xsi:schemaLocation


其中xsi是xmlns:xsi中的xsi,schemaLocation是http://www.w3.org/2001/XMLSchema-instance中的一个属性(了解即可,不需要深入),这个xsi:schemaLocation的作用就是帮你定位到对应的.xsd文件的。

2.4、bean标签

id属性:用于指定Bean的名称,在Bean被依赖时使用,在获取Bean时使用等

name属性:用于指定Bean的别名

class属性:用于指定Bean的来源,即创建要创建的Bean的class类(需要全限定名)

singleton属性:用于指定当前Bean的创建模式,若值为true表示为单例模式,false表示原型模式(prototype)

depends-on属性:用于指定当前Bean的依赖Bean,强制指定的Bean在当前Bean初始化之前先完成初始化

init-method属性:用于指定当前Bean的初始化方法,在Bean实例创建好后,首先会调用其指定名称的方法

destory-method属性:用于指定当前Bean的销毁方法,在Bean即将被销毁之前会自动调用该属性指定的方法

lazy-init属性:用于指定当前Bean的初始化时间,若值为true表示在初次调用时才会自动创建实例并初始化,false表示在IoC容器创建的时候就会完成创建和初始化

autowire属性:用于指定当前Bean的依赖关系的自动注入方式,其有五个值:

byName值:表示通过id名称来自动匹配;

byType值:表示通过class指定的类型来自动装配;

constructor值:表示使用构造函数的参数进行自动装配(参数的类型匹配);

autodetect值:表示自动进行选择匹配方式,首先进行constructor自动装配,若不存在构造方法则使用byType方式进行自动装配;

no值:表示不适用自动装配。

dependency-check属性:用于指定Bean的依赖检查模式,检查依赖关系是否完整,与自动装配合用,其有四个值:

simple值:表示针对基本类型、字符串、集合进行依赖检查

object值:表示对引用对象进行依赖检查

all值:表示对基本类型、字符串、集合、引用对象全部进行依赖检查

none值:表示不进行任何依赖检查,默认情况。

2.5、property标签


name属性:用于指定属性的名称,与类中的set方法后方的名称一致

value属性:用于指定该属性的值,用于指定的值是基本类型、字符串类型

ref属性:用于指定该属性的值,用于指定的值是引用对象类型(即其他的Bean),ref后面的值为另一个Bean的id

value标签:用于指定属性的值,类型为基本类型、字符串类型,值为标签内的文本内容,可以使用null值将属性的值设置为null
 

3、代码示例

建个基础的 Maven 项目结构,在pom写入依赖

        
            org.springframework
            spring-beans
            5.3.22
        

        
            org.springframework
            spring-context
            5.3.22
        

        
            org.springframework
            spring-core
            5.3.22
        

        
            org.springframework
            spring-expression
            5.3.22
        

新建实体类,user与adderss

User

@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class User {

    private String name;
    private int age;
    private Address address;

}

adderss

@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class Address {

    private String province;
    private String city;
    private String county;

}

applicationcontext.xml 配置




	
		
		
		
	


	
		
		
		
	
	

编text类

    @Test
    public void text01(){

        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

        Object user = context.getBean("User");

        System.out.println(user);

    }

效果

【JAVAEE框架】Spring 项目构建流程_第3张图片

4、示例讲解

 bean 其实就是个容器,你要使用spring,我就在容器里面拿出来,你有我就拿,没有就是默认的初始值。

bean 的 id 就是你这个容器的名字了,唯一且首字母小写,class就是你实体类的引用路径,property——> name 为 实体类里面的成员变量赋值(换句话讲,我先把值放到容器里面,你要用我就拿出来),这是基本数据类型的使用,如果我是引用数据类型呢?

像user里面有address类的引用,这要如何赋值呢?

我们容器申明id为address,然后在user里面使用ref引用进来

property作用:Bean定义可以具有零个或多个属性。属性元素对应于bean类公开的JavaBean setter方法。 Spring支持原语,对相同或相关工厂中的其他bean的引用,列表,映射和属性。

总结图

【JAVAEE框架】Spring 项目构建流程_第4张图片

不积跬步无以至千里,趁年轻,使劲拼,给未来的自己一个交代!向着明天更好的自己前进吧!

你可能感兴趣的:(JavaEE框架,spring,mybatis,java-ee,java,后端)