哈喽~大家好呀,这篇来看看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博客
目录
补充上篇 Mybatis 的——ResultMap,在 JavaWeb项目中使用了 ResultMap 没做具体的讲解。
当实体类的成员变量与 DB 字段名对不上时,使用 resultMap 映射。
什么意思?
实体类的成员变量的变量名是A, DB 字段名是A1,连接 DB 时由于名称对不上,页面就不会显示数据,所以,使用 ResultMap 映射,解决此类问题
1、属性说明
resultMap
内明确注明映射关系才会调用对应的setter方法。示例
- <resultMap id="brandResultMap" type="brand">
- <result column="A" property="A1">result>
- resultMap>
扩:当我们对多表操作的时候,表与表之间可能会出现对不上的情况,这时需要使用 association 与 collection
示例
-
- <resultMap id="smbmsUser" type="smbmsUser">
- <id property="id" column="id">id>
- <association property="role" column="userrole" resultMap="smbmsRole">association>
- <collection property="addresses" column="id" ofType="smbmsAddress" resultMap="smbmsAddress">collection>
- resultMap>
Mybatis 的一级缓存是指 Session 缓存。一级缓存的作用域默认是 SqlSession 。Mybatis默认开启一级缓存。
在同一个SqlSession中,执行相同的查询SQL,第一次会去数据库进行查询,并写到缓存中;第二次以后则直接去一级缓存中取。
当执行的SQL查询中间发生了增删改的操作,mybatis 会把 SqlSession 的缓存清空。
意思是说:执行相同的操作,第一次会把结果写到缓存中,第二次执行时直接从缓存拿数据,Mybatis默认开启一级缓存
一级缓存失效的情况:
1、SqlSession不同;
2、SqlSession相同,查询条件不同。因为缓存条件不同,缓存中还没有数据。
3、SqlSession相同,在两次相同查询条件中间执行过增删改操作。
4、SqlSession相同,手动清空了一级缓存。(如果SqlSession去执行commit操作(执行插入。更新、删除),清空SqlSession中的一级缓存,这样做的目的是为了让缓存中存储的是最新的消息,避免脏读。)
关闭一级缓存
-
- <setting name="localCacheScope" value="STATEMENT"/>
Mybatis的二级缓存是指mapper映射文件。二级缓存的作用域是同一个nameSpace下的mapper映射文件内容,多个SqlSession共享。Mybatis需要手动设置启动二级缓存。
一个会话,查询一条数据,这个数据会被放在当前会话的一级缓存中;如果会话被关闭了,一级缓存汇总的数据会被保存到二级缓存。新的会话查询信息就会参照二级缓存。
二级缓存的使用原则:
1、只能在一个命名空间下使用二级缓存。由于二级缓存中的数据是基于nameSpace的,即不同nameSpace中的数据互不干扰。在多个nameSpace中若均存在对同一个表的操作,那么这多个nameSpace中的数据可能就会出现不一致现象。
2、在单表上使用二级缓存。如果一个表与其他表有关联关系,那么就非常有可能存在多个nameSpace对同一数据的操作。而不同nameSpace中的数据互不干扰,所以就有可能出现多个nameSpace中的数据不一致现象。
3、查询多于修改时使用二级缓存。在查询操作远远多于增删改操作的情况下可以使用二级缓存。因为任何增删改操作都将刷新二级缓存,对二级缓存的频繁刷新将降低系统性能。
开启二级缓存
-
- <setting name="cacheEnabled" value="true"/>
Spring理念 : 使现有技术更加实用 . 本身就是一个大杂烩 , 整合现有的框架技术
官网 : http://spring.io/
官方下载地址 : https://repo.spring.io/libs-release-local/org/springframework/spring/
GitHub : https://github.com/spring-projects
pom导入
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-webmvcartifactId>
- <version>5.2.0.RELEASEversion>
- dependency>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-jdbcartifactId>
- <version>5.2.0.RELEASEversion>
- dependency>
-
2.1、低侵入式设计
2.2、独立于各种应用服务器
2.3、依赖注入特性将组件关系透明化,降低了耦合度
2.4、面向切面编程特性允许将通用任务进行集中式处理
2.5、与第三方框架的良好整合
组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:
Spring设计理念
Spring是面向Bean的编程
Spring 两大核心技术
控制反转(IoC:Inversion of Control ) /依赖注入(DI:Dependency Injection )
面向切面编程(AOP:Aspect Oriented Programming)
我们学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框架所需的信息了。
applicationContext.xml文件的根元素,所有的内容都需要包含在beans的标签中。
这是xml namespace即xml命名空间的简称,主要用于引入一些.xsd文件(也就是说xmlns后面的连接就是连接到相应的.xsd文件网站的,.xsd文件里面有特定的配置,比如xmlns:aop="http://www.springframework.org/schema/aop"就是加载aop切面的),xmlns冒号后面的是这个.xsd的前缀,如果后续使用的时候,直接就 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值:表示不进行任何依赖检查,默认情况。 value属性:用于指定该属性的值,用于指定的值是基本类型、字符串类型 ref属性:用于指定该属性的值,用于指定的值是引用对象类型(即其他的Bean),ref后面的值为另一个Bean的id value标签:用于指定属性的值,类型为基本类型、字符串类型,值为标签内的文本内容,可以使用null值将属性的值设置为null 建个基础的 Maven 项目结构,在pom写入依赖 新建实体类,user与adderss User adderss applicationcontext.xml 配置 编text类 效果 bean 其实就是个容器,你要使用spring,我就在容器里面拿出来,你有我就拿,没有就是默认的初始值。 bean 的 id 就是你这个容器的名字了,唯一且首字母小写,class就是你实体类的引用路径,property——> name 为 实体类里面的成员变量赋值(换句话讲,我先把值放到容器里面,你要用我就拿出来),这是基本数据类型的使用,如果我是引用数据类型呢? 像user里面有address类的引用,这要如何赋值呢? 我们容器申明id为address,然后在user里面使用ref引用进来 property作用:Bean定义可以具有零个或多个属性。属性元素对应于bean类公开的JavaBean setter方法。 Spring支持原语,对相同或相关工厂中的其他bean的引用,列表,映射和属性。 总结图 不积跬步无以至千里,趁年轻,使劲拼,给未来的自己一个交代!向着明天更好的自己前进吧!2.3、xsi:schemaLocation
其中xsi是xmlns:xsi中的xsi,schemaLocation是http://www.w3.org/2001/XMLSchema-instance中的一个属性(了解即可,不需要深入),这个xsi:schemaLocation的作用就是帮你定位到对应的.xsd文件的。2.4、bean标签
2.5、property标签
name属性:用于指定属性的名称,与类中的set方法后方的名称一致
3、代码示例
4、示例讲解