文章简介:
SSM框架集简介
spring框架IOC的了解
mybatis框架sqlSessionFactory了解
Tomcat的了解
图解SSM
SSM框架罕用注解
1.SSM框架集简介
SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis两个开源框架整合而成(SpringMVC是Spring中的局部内容)。常作为数据源较简略的web我的项目的框架
Spring
Spring就像是整个我的项目中拆卸bean的大工厂,在配置文件中能够指定应用特定的参数去调用实体类的构造方法来实例化对象。也能够称之为我的项目中的粘合剂。
Spring的核心思想是IoC(管制反转),即不再须要程序员去显式地new
一个对象,而是让Spring框架帮你来实现这所有。
SpringMVC
SpringMVC在我的项目中拦挡用户申请,它的外围Servlet即DispatcherServlet承当中介或是前台这样的职责,将用户申请通过HandlerMapping去匹配Controller,Controller就是具体对应申请所执行的操作。SpringMVC相当于SSH框架中struts。
mybatis
mybatis是对jdbc的封装,它让数据库底层操作变的通明。mybatis的操作都是围绕一个sqlSessionFactory实例开展的。mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令。
页面发送申请给控制器,控制器调用业务层解决逻辑,逻辑层向长久层发送申请,长久层与数据库交互,后将后果返回给业务层,业务层将解决逻辑发送给控制器,控制器再调用视图展示数据。
图解SSM
简略的WEB我的项目框架图
客户端拜访服务端对数据库进行简略操作:
1.SpringMVC的Interceptor拦截器对客户端向服务端发送的申请进行解决
2.散发器(DispacherServlet)散发申请返回model
3.SpringMVC的管制层(controller)将申请传递到业务逻辑层(service)
4.业务逻辑层的接口实现类对申请解决并传递到长久层(Mabatis)
5.数据长久层(Dao接口)接管申请并调用办法对数据进行操作返回ModelAndView
6.DispacherServlet查问视图解析器,找到ModelAndView指定的视图
7.视图负责将结果显示到客户端
SSM框架罕用注解
1.@SpringBootApplication
这个注解是 Spring Boot 我的项目的基石,创立 SpringBoot 我的项目之后会默认在主类加上。
package com.cy; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class NoticesApplication { public static void main(String[] args) { SpringApplication.run(NoticesApplication.class, args); } }
2.Spring Bean相干
2.1 @Autowired
由spring提供,能够形容属性,构造方法,set办法等。
用于通知spring框架,为属性或办法参数采纳肯定的策略进行赋值操作(DI)。
主动导入对象到类中,被注入进的类同样要被 Spring 容器治理。比方Dao类注入到测试类中
package com.cy.pj; import com.cy.pj.dao.SysNoticeDao; import com.cy.pj.dao.pojo.SysNoticePojo; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import java.util.List; @SpringBootTest public class SysNoticesTest { @Autowired private SysNoticeDao sysNoticeDao; @Test void testInsertNotice(){ //创立sysnotice对象,通过此对象封装要写入到数据库的数据 SysNoticePojo sysNoticePojo=new SysNoticePojo(); sysNoticePojo.setTitle("工夫"); sysNoticePojo.setContent("2021/5/20"); sysNoticePojo.setStatus("1"); sysNoticePojo.setType("1"); sysNoticePojo.setCreatedUser("tony"); sysNoticePojo.setModifiedUser("tony"); //将sysnoticepojo对象长久化到数据库 sysNoticeDao.insertNotices(sysNoticePojo); //此办法的实现外部会通过SQLSession向表中写数据 }
2.2@Component,@Repository,@Service,@Controller
咱们个别应用@Autowired注解让Spring容器帮咱们主动拆卸bean。想要把类表识成可用于@Autowired注解主动拆卸的bean类,能够采纳这四个注解实现
- @Component:通用的注解,可表识任意类为spring组件。如果一个bean不晓得属于哪个层,能够采纳@Component注解表识
- @Repository:对应长久层即Dao层,次要用于数据库相干操作
- @Service:对应服务层,次要波及一些简单的逻辑,须要用到Dao层
- @Controller:对应Spring MVC管制层,次要用于用户接管用户申请并调用Service层返回数据给前端页面
2.3@RestController
@RestCont
来源gao!%daima.com搞$代*!码网
roller注解是@Controller和@ResponseBody的合集,示意这是一个控制器bean,并且将函数的返回值间接填入HTTP响应体中。
2.4@Scope
申明 Spring Bean 的作用域
四种常见的Spring Bean的作用域:
singleton:惟一bean实例,Spring中的bean默认都是单例的。
prototype:每次申请都会创立一个新的bean实例。
request:每一次HTTP申请都会产生一个新的bean,该bean仅在以后HTTP request内无效。
session:每一次HTTP申请都会产生一个新的bean,该bean仅在以后HTTP request内无效。
2.5@Configuration
个别用来申明配置类,能够应用@Component注解代替。
3.解决常见的HTTP申请类型
GET:申请从服务器获取特定资源。举个例子:GET /users
(获取所有学生)
POST:在服务器上创立一个新的资源。举个例子:POST /users
(创立学生)
PUT:更新服务器上的资源(客户端提供更新后的整个资源)。举个例子:PUT /users/12
(更新编号为 12 的学生)
DELETE:从服务器删除特定的资源。举个例子:DELETE /users/12
(删除编号为 12 的学生)
PATCH:更新服务器上的资源(客户端提供更改的属性,能够看做作是局部更新),应用的比拟少,这里就不举例子了
3.1GET申请@GetMapping("users")
等价于@RequestMapping(value="/users",method=RequestMethod.GET)
3.2POST申请@PostMapping("users")
等价于@RequestMapping(value="/users",method=RequestMethod.POST)
3.3.PUT申请@PutMapping("/users/{userId}")
等价于@RequestMapping(value="/users/{userId}",method=RequestMethod.PUT)
3.4DELETE申请@DeleteMapping("/users/{userId}")
等价于@RequestMapping(value="/users/{userId}",method=RequestMethod.DELETE)
3.5PATCH申请
个别理论我的项目中,咱们都是PUT不够用了之后才用 PATCH 申请去更新数据
4.前后端传值
4.1@PathVariable和@RequestParam
@PathVariable用于获取门路参数,@RequestParam用于查问参数
@GetMapping("/klasses/{klassId}/teachers") public List<Teacher> getKlassRelatedTeachers( @PathVariable("klassId") Long klassId, @RequestParam(value = "type", required = false) String type ) {}
如果咱们申请的 url 是:/klasses/{123456}/teachers?type=web
那么咱们服务获取到的数据就是:klassId=123456,type=web
。
4.2@RequestBody
用于读取 Request 申请(可能是 POST,PUT,DELETE,GET 申请)的 body 局部并且Content-Type 为 application/json格局的数据,接管到数据之后会主动将数据绑定到 Java 对象下来。零碎会应用HttpMessageConverter
或者自定义的HttpMessageConverter
将申请的 body 中的 json 字符串转换为 java 对象。
@Mapper注解的作用
次注解由mybatis框架提供,用于形容“数据长久层接口”,当我的项目启动时,零碎底层会主动扫描启动类