框架

Spring是什么?有哪些优点?

1.Spring是一个轻量级的开源框架

说是轻量级那肯定有重量级的说法,这里说的轻量级是指首先Spring占空间极小,只有2MB,

2.Spring的两大核心技术IOC和AOP

ioc:即控制反转,控制反转的意思就是把newJava对象的权力交给spring,在之前的ssh项目中写的application-biz中写的bean节点,spring通过bean节点中的信息通过反射来生成对象,我们手动new对象就类似于人类社会的手工时代生产一个东西,而spring工厂产生对象就像工厂时代生产一个东西。并且spring底层对bean的创建都是使用的单例模式,这样就不会产生大量重复调用一个方法而产生大量的重复的对象,就比如没有使用spring依赖注入的jsp+servlet的项目大量的访问就会产生大量的**dao的对象。

spring的注入方式有哪些?

setter注入

<bean id="person" class="com.wl.Person">
    <!--
        使用property标签注入属性值
        name:类属性名称
        value属性:往属性中注入的值
    -->
    <property name="username" value="哈哈哈"></property>
</bean>

构造注入

<!-- 注册userService -->
<bean id="userService" class="com.lyu.spring.service.impl.UserService">
	<constructor-arg name="userDao" ref="userDaoJdbc"></constructor-arg>
	<constructor-arg name="user" ref="user"></constructor-arg>
</bean>

<!-- 注册实体User类,用于测试 -->
<bean id="user" class="com.lyu.spring.entity.User"></bean>

<!-- 注册jdbc实现的dao -->
<bean id="userDaoJdbc" class="com.lyu.spring.dao.impl.UserDaoJdbc"></bean>

接口注入

aop:即面向切面,在一般的ssh项目和ssm项目中aop最常用的用途就是事务管理和日志管理,就比如项目中的一个用户模块的添加需要调用数据库添加操作,删除需要调用数据库的删除语句,需要在操作前开启事务,操作后提交事务,所有的对象在进行数据库操作时都要进行进行事务操作,这样就形成一个切面,由添加操作,删除操作这些切点变成配置文件中add*,update*,delete*这样的线,然后所有的对象进行数据库操作形成事务切面,日志管理就是在一个用户登陆系统开始记录所有操作的信息,比如删了什么东西,什么时候登陆的等等,需要使用到面向切面编程。面向切面的本质就是拦截器。

我理解的切面的定义:切面就是与业务代码关系不大,但是却对多个对象能产生影响的公共代码,就可以将其拿出配置成切面。

3.spring能够集成其他很多的框架

就比如ssh ssm,这些都是通过spring进行集成,其他还有shiro,Quartz

 

SpringMVC与Struts2的区别

1.是否为侵入式

springMVC是非侵入式的,不需要继承或者实现,只需要提供注解,而Struts2需要继承SupperAction或者不继承

2.框架入口

SpringMVC的入口是Dispatcherservlet,而Struts2的入口是struts2准备并且执行过滤器

3.效率

SpringMVC的使用是基于注解开发,Struts2是基于配置开发,但是在搞完Struts2之后也了解到Strust2也可以使用注解,springMVC的访问可以直接访问到方法,而Struts2则需要到配置文件先配置类的访问路径再配置方法的访问路径,所以SpringMVC的速度更加快,Struts2提供的s标签比SpringMVC提供的from标签的使用场景更加全面

 

Mybatis与Hibernate的区别

Mybatis和Hibernate都是基于orm的框架

效率:

Hibernate是完全封装的orm框架,基本不需要手写sql语句,sql语句被封装,可以直接使用,开发可以更加注重业务代码,而Mybatis属于半自动的框架,需要自己编写SQL代码,但是对与比较庞大的系统,关系比较复杂的系统,Hibernate则会查出许多的多余的数据,从而浪费性能。

SQL优化方面:

Hibernate完全封装,能够自动生成完整的SQL语句,sql优化比较困难,但是也可以通过传入原生的sql代码来进行操作,但是这样就失去了使用Hibernate的意义,而Mybatis则是自己手写SQL,比较易于sql优化,能够减少不必要的性能损耗,Mybatis需要自己管理映射关系,而Hibernate是完整的orm框架,只需要管理对象关系就能维持数据库表关系

 

关于MyBatis防止sql注入

#{}是经过预编译的,是安全的${}是未经过预编译的,仅仅是取变量的值,是非安全的,存在SQL注入

 

关于缓存

一级缓存

Hibernate和Mybatis的一级缓存都是默认开启的,Mybatis的一级缓存是存在与sqlSession层,使用同一个sqlSession进行同一个查询时就会使用到一级缓存,而Hibernate时存在于Session层

Hibernate和Mybatis的二级缓存都是需要手动开启的

Mybatis的二级缓存在SqlSessionFactory层面给各个SqlSession 对象共享

<cache/>

需要手动配置  比如:

<cache eviction="LRU" flushInterval="100000" size="1024" readOnly="true"/>

如果一条语句每次都需要最新的数据,就意味着每次都需要从数据库中查询数据,可以把这个属性设置为false,如:

<select id="selectAll" resultMap="BaseResultMap" useCache="false">

刷新缓存(就是清空缓存)

​ 二级缓存默认会在insert、update、delete操作后刷新缓存,可以手动配置不更新缓存,如下:

<update id="updateById" parameterType="User" flushCache="false" />

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值