java框架相关

理解Spring的AOP

原文链接:https://www.jianshu.com/p/78ba8bafb90a

1.AOP

AOP(面向切面)是一种编程范式,提供从另一个角度来考虑程序结构以完善面向对象编程(OOP);

AOP为开发者提供了一种描述横切关注点的机制,并能狗够自动将横切关注点织入到面向对象的软件系统中,从而实现了横切关注点的模快化。

AOP能够将那些与业务无关,却为业务模快所共同调用的逻辑或责任,例如事务管理,日志管理,权限控制等,封装起来,便于减少系统的重复代码,降低模快间的耦合度,并有利于未来的可操行和可维护性。

使用AOP的好处:

  1. 降低模快的耦合度
  2. 使系统容易扩展
  3. 体用代码复用性

AOP的基本概念

  • 连接点(JoinPoint):需要在程序中插入横切关注点的点,连接点可能是在类初始化、方法调用、字段调用或处理异常等等。Spring中只支持方法执行连接点。
  • 切入点(Pointcut):一组相关连接点的集合。
  • 通知(Advice):在连接点上执行的行为,增强提供了在AOP中需要在切入点所选择的连接点处进行扩展现有行为的手段。包括前置增强(before advice)、后置增强 (after advice)、环绕增强 (around advice)。
  • 切面(Aspect):通知和切入点的结合。
  • 织入(Weaving):织入是一个过程,是将切面应用到目标对象从而创建出AOP代理对象的过程。
  • 代理(Proxy):通过代理方式来对目标对象应用切面。AOP代理可以用JDK动态代理或CGLIB代理实现。
  • 目标对象(Target):需要被织入关注点的对象。即被代理的对象。

实现AOP的主要设计模式就是动态代理。

spring的动态diamante有两种:一是JDK的动态代理;另一个就是cglib动态代理。

JDK动态代理模拟
JDK动态代理的两个核心接口(类)分别是InvocationHandler和Proxy。注意:只能代理接口。

CGLIB动态代理模拟
CGLIB动态代理的两个核心接口(类)分别是MethodInterceptor和Enhancer。是不是跟JDK动态代理很相似,用法也差不多。但CGLIB可以代理类和接口。注意:不能代理final类。

Spring AOP 的具体加载步骤

AOP和OOP的区别,分别适用什么场景?

OOP面向对象编程,针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分。而AOP则是针对业务处理过程中的切面进行提取,它所面对的是处理过程的某个步骤或阶段,以获得逻辑过程的中各部分之间低耦合的隔离效果。这两种设计思想在目标上有着本质的差异。

oop封装的是属性和方法,以对象为最小操作单元,属性和方法都要通过对象才能调。
aop封装的是业务,将主业务和通用业务区分,将通用业务划分为切面,切面又划分为通知和切入点。

Mybatis

原文链接:https://blog.csdn.net/qq_50524970/article/details/111240888?ops_request_misc=%25257B%252522request%25255Fid%252522%25253A%252522160809763719721942232489%252522%25252C%252522scm%252522%25253A%25252220140713.130102334.pc%25255Fall.%252522%25257D&request_id=160809763719721942232489&biz_id=&utm_medium=distribute.pc_search_result.none-task-code-2~all~first_rank_v2~rank_v29-9-111240888-2.first_rank_v2_pc_rank_v29&utm_term=Mybatis%E7%9A%84%E4%B8%80%E7%BA%A7%E7%BC%93%E5%AD%98%E5%92%8C%E4%BA%8C%E7%BA%A7%E7%BC%93%E5%AD%98%EF%BC%9F

什么是Mybatis?

  • MyBatis 是一个可以自定义 SQL、存储过程和高级映射的持久层框架。MyBatis 避免了几乎所有的 JDBC代码和手动设置参数以及获取结果集。

  • 我们在使用了 MyBatis 之后,只需要提供 SQL 语句就好了,其余的诸如:建立连接、操作 Statment、ResultSet,处理 JDBC 相关异常等等都可以交给 MyBatis 去处理,我们的关注点于是可以就此集中在 SQL 语句上,关注在增删改查这些操作层面上。

mybatis的框架

å¨è¿éæå¥å¾çæè¿°

MyBatis 的缓存

Mybatis对缓存提供支持,一级缓存是默认使用的,二级缓存需要手动开启。

区别:

  • 一级缓存的作用域是一个sqlsession内;
  • 二级缓存作用域是针对mapper进行缓存;

一级缓存:

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

一次缓存执行commit,close,增删改等操作,就会清空当前的一级缓存;当对SqlSession执行更新操作(update,delete,insert)后并执行commit时,不仅清空其自身的一级缓存(执行更新操作的效果),也清空二级缓存(执行commit()的效果).

二级缓存:

二级缓存指的是同一个namespace下的mapper,二级缓存中,也有一个map结构,这个区域就是一级缓存区域。一级缓存中的key是由sql语句,条件,statement等信息组成一个唯一值。一级缓存中的value,就是查询出的结果对象。

1、在配置文件中 开启二级缓存的总开关

<setting name="cacheEnabled" value="true" />

 

2、 在mapper映射文件中开启二级缓存

<cache eviction="FIFO" flushInterval="60000" size="512" 
readOnly="true"/>

 

参数名属性eviction收回策略flushInterval刷新间隔size引用数目readOnly只读

关于eviction的各个参数属性:

  • 参数名属性eviction="LRU"最近最少使用的:移除最长时间不被使用的对象。
  • (默认)eviction="FIFO"先进先出:按对象进入缓存的顺序来移除它们。
  • eviction="SOFT"软引用:移除基于垃圾回收器状态和软引用规则的对象。
  • eviction="WEAK"弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。

禁用缓存

如测试sql语句性能时缓存会影响测试准确性 需要禁用在映射文件中:默认值是true useCache=”false”

<select id="findAllPets" resultMap="petsMap" useCache="false">
 select * from pets
</select>

刷新缓存

在映射文件中:属性:flushCache=”true”刷新缓存,在查询语句中,默认值是false,在新增删除修改语句中,默认值是true(清空缓存)

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

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

mybatisPlus 是全自动ORM,mapper 继承BaseMapper<T>接口后,无需编写mapper.xml文件,即可获得CRUD功能。

Mybatis中#和$的区别?

使用场景:

  1. 一般${}用在我们能够确定值的地方,也就是我们程序员自己赋值的地方。${}号会SQL注入

  2. 而#{}一般用在用户输入值的地方!

区别:

#{}是预编译处理MyBatis在处理#{ }时,它会将sql中的#{ }替换为?,然后调用PreparedStatement的set方法来赋值,传入字符串后,会在值两边加上单引号,如上面的值 “4,44,514”就会变成“ ‘4,44,514’ ”;

${}是字符串替换。MyBatis在处理 ${}时 , ,它会将sql中的{ }替换为变量的值,传入的数据不会加两边加上单引号。

Mybatis如何实现批量插入?

1.使用Mybatisplus,继承Iservice类

2. 继承ServiceImpl接口<dao,实体类>然后实现这个接口,然后在需用使用到的地方注入,就可以实现批量新增,修改等

Springboot

什么是Spring boot ?

Spring Boot 是由 Pivotal 团队提供的全新框架。Spring Boot 是所有基于 Spring Framework 5.0 开发的项目的起点。Spring Boot 的设计是为了让你尽可能快的跑起来 Spring 应用程序并且尽可能减少你的配置文件。

设计目的: 用来简化新Spring应用的初始搭建以及开发过程。

从最根本上来讲,Springboot 就是一些库的集合,他能够被任意项目的构建系统所使用。他使用"习惯优于配置"(项目中存在大量的配置,此外还内置一个习惯性的配置)的理念让他的项目快速运行起来。用大佬的话来理解,就是springboot其实不是什么新的框架,他默认配置了很多框架的使用方式,就像maven整合了所有的jar包,springboot 整合了所有的框架,总结一下集几点:

  1. 为所有spring开发提供一个更快更广泛的入门体验。

  2. 零配置。无冗余代码生成和xml强制配置,遵循“约定大于配置”。

  3. 集成了大量常用的第三方库的配置,springboot应用为这些第三方库提供了几乎可以零配置的开箱即用的能力。

  4. 提供一系列大型项目常用的非功能性特征,如嵌入式服务器,安全性,度量,运行状况检查,外部配置等。

  5. springboot不是spring的替代者,spring框架是通过ioc机制来管理bean的。springboot依赖spring框架来管理对象的依赖。springboot并不是spring的精简版本,而是为使用spring做好各种产品级准备。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值