SSM是spring、springMVC、Mybatis的结合,Spring相当于SpringMVC与Mybatis之间的桥梁。其中SpringMVC相当于传统的 service + servlet 。结合注解进行开发,使整个开发高效、代码量大大的减少。Mybatis负责数据库的数据交换,不用自己写SQL 语句,防止了SQL注入问题的发生,而且相比于Hibernate也非常的轻,dao 与 model 直接自动生成,大大减少了多表开发的时间。
基本流程 SSM框架业务执行流程图 SSM程序流程1、整个SSM框架使用maven依赖管理和构建,将其打包成war包,部署到服务器将其运行。使用spring boot框架也可以打包成jar包部署。
2、SSM项目一般分为前端和后端两个部分,前端页面UI界面用bootstrap和jsp或者现在流行的vue等技术实现,后台则由SSM框架来搭建和编写,前后端交互部分则由ajax俩发送请求来处理。
3、springMVC控制器,用于页面的跳转请求和对具体的视图解析,而处理不了的请求则交给tomcat服务器来处理。
4、编写对应的Mappper接口以及Mapper文件,将其扫描进spring的ioc容器中,再由mybatis将对数据库的增删改查。
5、在spring容器中,有三层架构–>Controller,Service,Dao层,分别处理不同的事务逻辑
- Controller:处理请求的跳转和处理前端发来的请求; - Service:对接口的实现业务的逻辑层; - Dao:对数据库底层的操作。
6、有前端发送ajax请求给springMVC,后springMVC将其数据解析成json数据返回给前端页面,在前端用js解析成json在前端显示。
7、增删改查操作都是有ajax请求来处理。
8、具体的流程图由下图所示:
- spring将各层进行整合
- 通过spring管理持久层的mapper(dao接口)
- 通过spring管理业务层service,service中可以调用mapper接口
spring进行事物管理 - 通过spring管理表现层Handle,Handle中可以调用service接口。
- mapper、service、Handle都是javabean
是一个通用的Spring容器管理的单例bean组件,最普通的组件,可以被注入到spring容器进行管理。@Component是通用注解,其他三个注解是这个注解的拓展,并且具有了特定的功能。
@Service作用于业务逻辑层(service层)
@Repository作用于持久层(dao层),它注解的类作为DAO对象(数据访问对象,Data Access Objects),这些类可以直接对数据库进行操作
@Controller作用于表现层(spring-mvc的注解),它注解的类进行前端请求的处理,转发,重定向。包括调用Service层的方法。
@RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。该注解有六个属性:
- value:指定请求的实际地址,指定的地址可以是URI Template 模式
- method:指定请求的method类型, GET、POST、PUT、DELETE等;
- onsumes:指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
- produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
- params:指定request中必须包含某些参数值是,才让该方法处理。
- headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。
- @GetMapping:所扮演的是 @RequestMapping(method =RequestMethod.GET) 的一个快捷方式。
- @PostMapping:所扮演的是 @RequestMapping(method =RequestMethod.POST) 的一个快捷方式。
- @PutMapping:所扮演的是 @RequestMapping(method =RequestMethod.PUT) 的一个快捷方式。
- @DeleteMapping:所扮演的是 @RequestMapping(method =RequestMethod.DELETE) 的一个快捷方式。
是用来实现依赖注入的,此注解默认是byName自动注入的
装配顺序:
(1)、@Resource后面没有任何内容,默认通过name属性去匹配bean,找不到再按type去匹配
(2)、指定了name或者type则根据指定的类型去匹配bean
(3)、指定了name和type则根据指定的name和type去匹配bean,任何一个不匹配都将报错
也是用来实现依赖注入的,但是此注解是byType自动注入的
@Autowired只有一个属性required,默认值为true,为true时,找不到就抛异常,为false时,找不到就赋值为null
@Qualifier@Autowired按类型查找,如果该类型的bean不唯一,则抛出异常;可通过组合注解@Qualifier解决
@Autowired
@Qualifier("userService")
注意:Spring容器以name为key储存bean!这里的name可以指定,否则取首字母小写的类名。有相同的就报异常:BeanDefinitionStoreException!
两者区别- Resource是JDK提供的,而Autowired是Spring提供的
- Resource不允许找不到bean的情况,而Autowired允许(@Autowired(required = false))
3· 指定name的方式不一样,@Resource(name = “baseDao”),@Autowired()和@Qualifier(“baseDao”)
4· Resource默认通过name查找,而Autowired默认通过type查找
注解@RequestBody接收的参数是来自requestBody中,即请求体。一般用于处理非Content-Type: application/x-www-form-urlencoded编码格式的数据,比如:application/json、application/xml等类型的数据。就application/json类型的数据而言,使用注解@RequestBody可以将body里面所有的json数据传到后端,后端再进行解析。
注意:
GET请求中不允许使用该注解。
注解@RequestParam接收的参数是来自requestHeader中,即请求头。@RequestParam可以接受简单类型的属性,也可以接受对象类型。@RequestParam有三个配置参数如下:
- required 表示是否必须,默认为 true,必须。
- defaultValue 可设置请求参数的默认值。
- value 为接收url的参数名(相当于key值)。
@RequestParam用来处理 Content-Type 为 application/x-www-form-urlencoded编码的内容,Content-Type默认为该属性。
@PathVariable作用:用于获取请求路径中的参数;例如:
@RequestMapping(value="/queryNum/{id}")
publiv String getUser( @PathVariable("id") int id){
}
@ResponseBody
作用:该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;
@RestController相当于@ResponseBody + @Controller合在一起的作用。
mybatis常用注解 @Param


