Spring MVC与Struts
1.机制:spring mvc的入口是servlet,而struts2是filter(这里要指出,filter和servlet是不同的。以前认为filter是servlet的一种特殊),这样就导致了二者的机制不同,这里就牵涉到servlet和filter的区别了。
2.性能:spring会稍微比struts快。
sturts是基于类,每次发一次请求都会实例一个action,每个action都会被注入属性.
spring基于方法,粒度更细,但要小心把握像在servlet控制数据一样。
spring mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去,在spring mvc中,一个方法对应一个request上下文。
而struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter getter方法把request中的数据注入;struts2实际上是通过setter getter方法与request打交道的;struts2中,一个Action对象对应一个request上下文。
3、springmvc可以进行单例开发,并且建议使用单例开发,struts2通过类的成员变量接收参数,无法使用单例,只能使用多例。
4、经过实际测试,struts2速度慢,在于使用struts标签,如果使用struts建议使用jstl。
servlet 和 action 区别
1.serlvet 默认第一次访问时候被创建,创建一次,单实例对象
2.action每次访问时候被创建,创建多次,多实例对象
MyBatis与Hibernate
hibernate:是一个标准ORM框架(对象关系映射)。入门门槛较高的,不需要程序写sql,sql语句自动生成了。对sql语句进行优化、修改比较困难的。应用场景:适用于需求变化不多的中小型项目,比如:后台管理系统,erp、orm、
mybatis:专注是sql本身,需要程序员自己编写sql语句,sql修改、优化比较方便。mybatis是一个不完全 的ORM框架,虽然程序员自己写sql,mybatis 也可以实现映射(输入映射、输出映射)。
应用场景:适用与需求变化较多的项目,比如:互联网项目。
Mybatis#与$区别
1 .#是将传入的值当做字符串的形式,eg:select id,name,age from student where id =#{id},当前端把id值1,传入到后台的时候,就相当于 select id,name,age from student where id =’1’.
2
是将传入的数据直接显示生成sql语句,eg:selectid,name,agefromstudentwhereid=
是
将
传
入
的
数
据
直
接
显
示
生
成
s
q
l
语
句
,
e
g
:
s
e
l
e
c
t
i
d
,
n
a
m
e
,
a
g
e
f
r
o
m
s
t
u
d
e
n
t
w
h
e
r
e
i
d
=
{id},当前端把id值1,传入到后台的时候,就相当于 select id,name,age from student where id = 1.
3 使用#可以很大程度上防止sql注入。(语句的拼接)
4 但是如果使用在order by 中就需要使用 $.或传入表名,因为表名不能带引号(可以带tablename
,小撇)