Spring框架
为团队开发,将复杂的框架进行整合,使程序从控制调用浑然一体,以一种统一的方式调用
核心:整合第三方框架
核心机制
-
IOC-DI
@RestController
控制反转:将其他框架里的对象创建的权力交给sping容器管理,由spring容器管理对象的生命周期
@Autowired
依赖注入:创建对象时,对象中有依赖的属性,spring负责属性赋值
-
AOP 面向切面编程
SpringMVC
作用:接受用户请求,完成业务处理,返回响应给用户
框架之间调用关系
- SpringBoot
- Spring
- SpringMVC
- Controller:接受前端参数
- Spring
- Service:对查询数据库后返回数据进行处理
- Mybatis
- Mapper:查询数据库获取数据
- SpringMVC
数据处理顺序
用户请求 --> Controller --> Service --> Mapper
Controller <-- Service <-- Mapper <-- 数据回传
-
controller类:
-
构成
-
注解
-
@RestController :包含两注解
@Controller 包含@Component,将该类交给Spring容器管理(控制反转)
@ResponseBody 业务返回值时,将数据转化为JSON -
@GetMapping(“findUserById”):规定访问方式
-
@Autowired:依赖注入,动态代理生成接口的实现类,再由此注解生成对象
-
@CrossOrigin:解决跨域问题
-
-
变量与方法
- private UserService userService;创建一个service接口对象(只有一个实现类,自动使用该实现类实现的方法)
-
-
数据接收
-
SpringMVC框架封装了Servlet,自动将传入数据封装为对应属性、对象、数组
若多个参数使用逗号分割,默认可用数组接收
集合(加@RequestParam)不方便,不用
-
-
关联:创建service接口对象
-
-
ServiceImpl实现类:
-
构成
-
注解
- @Service
将该类交给spring容器管理
@Service中包含@Component,可被controller类创建bean对象
- @Autowired 动态代理生成接口的实现类,再由此注解生成对象
-
重写的Service接口的方法
-
-
关联:继承实现service接口、创建mapper接口对象(JDK动态代理)
-
-
mapper接口
-
注解:
-
@MapperScan(“cn.jt.mapper”) 包扫描,mapper层文件路径。写在主启动类
写了后就不用在mapper层加@Mapper了
-
@Insert(“sql”)、@Select("")、@Update("")、@Delete("")注解写简单sql
-
-
关联:被service实现类调用、通过mapper.xml调用sql
-
SpringBoot整合Mybatis
application.yml整合文件
server:
port: 8090
servlet:
context-path: /
#Spring整合 1、数据源 2、mybatis
#serverTimezone=GMT%2B8 指定时区 %2B = + 东八区
#useUnicode=true&characterEncoding=utf8 开启使用unicode编码,指定utf8
#autoReconnect=true 断线是否重新连接
#allowMultiQueries=true 是否允许批量操作
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/jt?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
username: root
password: root
mybatis:
#配置别名
type-aliases-package: cn.jt.pojo
#第一个/表示根目录,加载指定xml映射文件
mapper-locations: classpath:/mybatis/mappers/*.xml
#开启驼峰映射
configuration:
map-underscore-to-camel-case: true
原mybatis-config.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--核心配置文件-->
<configuration>
<!--mybatis的核心配置-->
<settings>
<!--开启驼峰自动映射规则-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!--配置别名-->
<typeAliases>
<!--只对某个类有效-->
<!--<typeAlias type="cn.jt.pojo.DemoUser" alias="DemoUser"></typeAlias>-->
<!--自动拼接包名-->
<package name="cn.jt.pojo"/>
</typeAliases>
<!--环境配置标签,default默认环境-->
<environments default="development">
<!--编辑开发环境-->
<environment id="development">
<!--事务管理器-->
<transactionManager type="JDBC"/>
<!--mybatis采用数据库连接池的方式整合数据源-->
<dataSource type="POOLED">
<!--高版本数据库添加cj-->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/jt?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--Mybatis加载Mapper映射文件-->
<mappers>
<mapper resource="mybatis/mappers/DeptMapper.xml"/>
<mapper resource="mybatis/mappers/EmpMapper.xml"/>
</mappers>
</configuration>
报错
500:后台服务器异常
-
bound statement绑定异常:
- 检查mapper.xml文件的namespace、select中的方法名绑定id
- 检查application.yml中xml映射文件的导入mapper-locations
- 检查application.yml中格式,是否顶格,是否有层级结构
- 检查主启动文件中注解@MapperScan(“cn.jt.mapper”)
-
JDBC Connection数据库连接异常
- 检查application.yml中数据库连接配置
SpringMVC参数传递
前端控制器:负责用户请求的接收,后端业务的分发
Servlet(Server Applet)
小服务程序或服务连接器
主要功能在于交互式地浏览和生成数据,生成动态web内容。
Servlet是java后台程序与用户交互的机制(媒介)
参数名称必须相同,请求存入Servlet,在从中取出
传入参数为String类型,需要手动转化 Integer.parseInt(age);
SpringMVC封装了Servlet,实现自动数据转化
参数传递get、post
-
简单参数传递:
MVC直接取值
-
对象接收数据:
多个数据,封装为 对象 或 对象+值
不能有同名属性,有同名属性用逗号连接
-
对象的引用赋值:
参数重名问题 name dog.name user里封装一个dog对象
RestFul参数传递
-
用户url编辑:
- 参数用/分割
- 顺序不可随意更改
- 请求路径中不能出现动词:get、set、update,隐藏目的
-
用户规范
RestFul都是名词,不可区分请求业务逻辑
采用请求类型,严格区分业务需求
- GET 查询
- POST 新增/form表单提交
- PUT 修改
- DELETE 删除
-
参数接受
@GetMapping("/user/{name}/{id}") public Object testRestFul(User user){ return user; }
-
参数用/分割
-
参数用{}包裹
-
@PathVariable(“name”) String name 接收参数
参数名与对象属性名一致,可以对象接收
-