近几年来SpringMVC的发展是比较迅速的,他的优点也慢慢的体现出来了,甚至很多公司要求SpringMVC替代SSH框架,SpringMVC到底有那些区别呢?
SpringMVC框架是什么?
Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术、Velocity、Tiles、iText 和POI。Spring MVC 框架并不知道使用的视图,所以你可以自主的选择视图。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。
SpringMVC是一个典型的教科书式的mvc构架,而不像struts等都是变种或者不是完全基于mvc系统的框架,对于初学者或者想了解mvc的人来说我觉得 spring是最好的,它的实现就是教科书!第二它和tapestry一样是一个纯正的servlet系统,这也是它和tapestry相比 struts所没有的优势。而且框架本身有代码,而且看起来容易理解。
SSH2框架是什么?
SSH框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层,以帮助开发人员在短期内搭建结构清晰、可复用性好、维护方便的Web应用程序。其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理struts和hibernate。具体做法是:用面向对象的分析方法根据需求提出一些模型,将这些模型实现为基本的Java对象,然后编写基本的DAO(Data Access Objects)接口,并给出Hibernate的DAO实现,采用Hibernate架构实现的DAO类来实现Java类与数据库之间的转换和访问,最后由Spring做管理,管理struts和hibernate。
SpringMVC和SSH的比较:
struts封装的功能更多更全面,用法比较独有。springmvc比较接近原生servlet,灵活度高。而且因为springmvc的controller是单例的,以及没有大量的过滤器,性能要比struts2好。
还有一点就是Spring有自己的JdbcTemplate,用来执行原生态的SQL语句。
如:
1
2
3
4
5
@Transactional
public Integer click(String id){
jdbcTemplate.update("UPDATE content set count=count+1 where id=?",id );
return jdbcTemplate.queryForInt("select count from content where id=?",id);
}
SSH中操作数据库使用的是Hibernate的数据映射,操作的是对象。
如:
1
2
3
4
public void click(user){
//update(user);
save(user);
}
Hibernate本来就是基于JDBC的封装,所以较之执行原生态SQL效率上肯定比操作对象更快。
注意:如果想使用Spring来实现Hibernate的功能,那么可以知己封装
如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
public T save(T entity){
Field[] declaredFields = entityClass.getDeclaredFields();
String pk="";
for(Field f : declaredFields){
boolean annotationPresent = f.isAnnotationPresent(Id.class);
if(annotationPresent){
pk = f.getName();
break;
}
}
if(StringUtils.isBlank(pk)){
Method[] declaredMethods = entityClass.getDeclaredMethods();
for (Method method : declaredMethods) {
boolean annotationPresent = method.isAnnotationPresent(Id.class);
if(annotationPresent){
String field = method.getName().replace("get", "");
//首字母转小写
pk = field.replace(field.charAt(0), (char)(field.charAt(0)+32));
break;
}
}
}
Map<String, Object> map = EntityToMapUtil.convertEntityToMap(entity);
Object pkvalue = map.get(pk);
if(pkvalue!=null&&StringUtils.isNotBlank(pkvalue.toString())){
update(map,pk);
return entity;
}
SimpleJdbcInsert simpleJdbcInsert=new SimpleJdbcInsert(jdbcTemplate);
KeyHolder keyHolder = simpleJdbcInsert.withTableName(table())
//.usingColumns(new String[keySet.size()])
.usingGeneratedKeyColumns(pk)
.executeAndReturnKeyHolder(map);
try {
BeanUtils.setProperty(entity, pk, keyHolder.getKeys().values());
} catch (Exception e) {
e.printStackTrace();
return null;
}
return entity;
}
public void insert(Map map,String... pks){
Set<String> columns = map.keySet();
for(String pk : pks){
if(columns.contains(pk))
columns.remove(pk);
}
SimpleJdbcInsert simpleJdbcInsert=new SimpleJdbcInsert(jdbcTemplate);
KeyHolder keyHolder = simpleJdbcInsert.withTableName(table())
.usingColumns(columns.toArray(new String[columns.size()]))
.usingGeneratedKeyColumns(pks)
.executeAndReturnKeyHolder(map);
}
原来就是使用反射来获取对象的属性,然后对应数据库字段,最后拼写成SQl语句,效率上感觉影响不是很大。
我们现在的公司就是采用SpringMVC来做为基础框架的,而且没有整合Hibernate。最新版的SpringMVC还支持RestFull,可以直接返回相应的JSON或者XML。
如代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@RestController
@RequestMapping("public")
public class CommonController {
@Autowired
private ContentService contentService;
@RequestMapping("ViewClick")
public String clicks(HttpServletRequest request,@RequestParam String id){
int clicks=0;
synchronized (this) {
clicks= contentService.click(id);
}
return "document.write('"+clicks+"')";
}
}
1
@RestController//关键注解
在前台调用(这只是我的博客目前使用的一个小功能)
1
阅读(<script src="../public/ViewClick?id=${content.id}"></script>)
————————————————
版权声明:本文为CSDN博主「webin」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/swebin/article/details/52583718
来源:https://www.cnblogs.com/qiu18359243869/p/12602912.html