搭建ssm
spring集成mybatis
1.新建一个项目ssm 需要是一个web项目
勾选web选项
2.导入相关的依赖
spring
mybatis
mysql
junit
<!--servlet-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!--mybtais-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.2</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<!-- 阿里巴巴数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>provided</scope>
</dependency>
<!--spring-context-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<!--spring-jdbc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<!--aspectj-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<!--spring web-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<!--spring集成mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
3.创建包
4.添加spring,mybatis配置文件
<import resource="classpath:db.xml"></import>
<!--配置sqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property><!--为配置sqlSessionFactory注入数据源-->
<property name="configLocation" value="classpath:mybatis.xml"></property>
<property name="mapperLocations" value="classpath:mappers/*Mapper.xml">
</property>
</bean>
<!--配置为接口生成代理对象-->
<bean id="mapperFactory" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.ffyc.ssm.dao"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
SpringWeb
以前的
ssm(spring struts2 mybatis)
ssh(spring struts2 hibernate)
现在的
ssm(spring springweb mybatis)
springweb 是spring框架中的一部分,是对java后端web层进行了封装,
可以和spring框架可以无缝对接,是基于servlet API的实现.
springweb的特点
- SpringWEB 是 spring 家族原生产品,与 IOC 容器等基础设施无缝对接.
- 基于原生的 Servlet,提供了一个前端控制器 DispatcherServlet ,开发者 无须额外开发控制器对象.
- 可以自动绑定用户输入,并正确地转换数据类型.
- 代码清新简洁,大幅度提升开发效率.
- 内部组件化程度高,可插拔式组件即插即用.
- 性能卓著,尤其适合现代大型、超大型互联网项目要求.
springweb运行流程
前端控制器:DispatcherServlet(不需要程序员开发),由框架提供,在web.xml中配置。
- 作用:统一处理请求和响应,整个流程控制的中心,由它调用其它组件处理用户的请求.
处理器映射器:HandlerMapping(不需要程序员开发),由框架提供。
- 作用:根据请求的url查找Handler(处理器/Controller)
处理器适配器:HandlerAdapter(不需要程序员开发),由框架提供。
- 作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler。
处理器:Handler(也称之为Controller,需要工程师开发)。
注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler。
- 作用:接受用户请求信息,调用业务方法处理请求,也称之为后端控制器。
搭建SpringWeb
1.导包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
2.配置DispatcherServlet
<!--配置spring核心请求分发servlet 由他接收所有请求,进行分配调度-->
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring.xml</param-value><!--加载spring配置文件-->
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern> <!--表示任何请求都可以进入到DispatcherServlet-->
</servlet-mapping>
3.开启SpringMVC注解
<mvc:annotation-driven></mvc:annotation-driven>
4.处理器类搭建
定义请求
@RestController和@RequestMapping
5.接受请求
@RequestMapping是一个用来为处理器地址映射的注解,可用于类或方法上.作用在类上,在整个项目中不能重复,作用在方法上,整个类中不能重复
@RequestMapping(path = "/test",method = RequestMethod.POST)
@PostMapping(path = "/test")
6.获取请求数据
(1)使用request对象接收
@GetMapping(path = "/login")
public String login(Admin admin){
System.out.println(admin.getAccount());
System.out.println(admin.getPassword());
Admin a = loginService.login(admin);
return "success";
}
(2)spring自动封装
@RequestMapping("/save")publicvoidsave(StringuserName,Integerage)
(3)使用@RequestParam("")进行参数绑定
@RequestHeader("")
@RequestMapping("/save")
public void save(@RequestParam("userName")Stringname,@RequestParam("userAge")Integerage){}
@RequestParam注解还有两个属性:
1.required:参数是否必须。代表页面是否必须传递该参数。如果该值为true,但没有传递参数,会报错。
2.defaultValue:默认值。代表如果页面没有传递该参数,使用defaultValue的值代替
(4)使用实体类对象接收
@RequestMapping("/save")
public void save(Adminadmin)
部署到tomcat中
跨域问题
<!--jackson-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.14.2</version>
</dependency>
<!-- 添加跨域过滤器-->
<dependency>
<groupId>com.thetransactioncompany</groupId>
<artifactId>cors-filter</artifactId>
<version>2.5</version>
</dependency>
添加过滤器·
<filter>
<filter-name>CORS</filter-name>
<filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CORS</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
中文乱码处理
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
拦截器
类似于过滤器,但与过滤器有本质上的区别