本文已参与「新人创作礼」活动,一起开启掘金创作之路。
📕简介
SSM 程序集是 Spring + SpringMVC + MyBatis 框架的整合,将系统划分为视图层、控制层、服务层、数据层。
graph LR
subgraph MyBatis
mapper
end
subgraph Spring
service
end
subgraph Spring MVC
controller
domain
end
controller-->service
service-->mapper
controller 控制器会去使用 service 服务;service 服务会去使用 mapper 数据映射并且将数据转化为 domain 数据对象;mapper 数据映射会去使用 domain 定义数据类型。
entity:数据对象,可以减少数据处理过程。
model:在 entity 基础上进行改进,使数据更加人性化。
domain:在 model 基础上对数据源进行扩展整合,可以丰富数据多样化。
📚控制器注册
通过 @Controller 和 @RestController 注解可以将控制器自动注册到项目中,这样再通过 @RequestMapping 注解就可以将请求映射,一般就可以访问到页面或数据了。
顺便说一下 @RestController = @Controller + @ResponseBody,其源码基本一样。
控制器被扫描
当类上面使用了 @Controller 来进行控制器注册且能够被 Spring 应用扫描到分两种情况:
-
外部依赖进行引用到项目里面
你大概可以理解为当控制器不在当前工程里面,而是在工程的依赖包里面,例如 SpringSecurity 默认的登录页面,就是通过外部模块来进行引用的。
-
与 Spring 应用启动类同级自动扫描
📚spring-boot-starter-web
spring-boot-starter-web 集成包包括了 web、webmvc 和 tomcat 。
因此 tomcat 服务器和 Spring MVC 框架是会自动配置,极大地减少了开发量。
如果你希望自行配置服务器,也可以将 spring-boot-starter-tomcat 排除项目从而不使用 tomcat 服务器。
📚mybatis-spring-boot-starter
mybatis-spring-boot-starter 集成包是对 MyBatis + MyBatis-Spring + SpringBoot 的集成封装,因此依赖性比较强,但是极大地减少了开发量,你可以不用去配置 SqlSessionFactory 和事务处理。
📕功能
-
自动发现存在的数据源
-
利用 SqlSessionFactoryBean 创建并注册 SqlSessionFactory
-
创建并注册 SqlSessionTemplate
-
自动扫描 Mapper,并注册到 Spring 上下文环境方便程序的注入使用
默认情况会查找以 @Mapper 注解标记的映射器,除此之外其实可以通过 @MapperScan 注解来扫描包。
📚 MyBatis
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
📕SqlSession
SqlSessions 是由 SqlSessionFactory 实例创建的。SqlSessionFactory 对象包含创建 SqlSession 实例的各种方法。而 SqlSessionFactory 本身是由 SqlSessionFactoryBuilder 创建的,它可以从 XML、注解或 Java 配置代码来创建 SqlSessionFactory。
📕 XML 映射器
元素标签
| 标签 | 描述 |
|---|---|
| cache | 命名空间的缓存配置 |
| cache-ref | 引用其它命名空间的缓存配置 |
| resultMap | 描述如何从数据库结果集中加载对象 |
| sql | sql 语句,可被其它语句引用的可重用语句块 |
| insert | 映射插入语句 |
| update | 映射更新语句 |
| delete | 映射删除语句 |
| select | 映射查询语句 |
元素属性
| 属性 | 值 | 默认值 | 场景 | 描述 | |||
|---|---|---|---|---|---|---|---|
| id | string | —— | [select | update | insert | delete] | 在命名空间中唯一的标识符,可以被用来引用这条语句。 |
| parameterType | object | unset | [select | update | insert | delete] | 指定传入该语句的参数的类型 |
| resultType | object | —— | [select | update | insert | delete] | 指定该语句返回的结果的类型。 |
| resultMap | object | —— | [select | update | insert | delete] | 对外部 resultMap 的命名引用。 |
| flushCache | boolean | false | [select | update | insert | delete] | 该语句被调用会导致本地缓存和二级缓存被清空。 |
| useCache | boolean | true | select | 该语句被调用会导致会导致其结果被二级缓存缓存起来。 | |||
| timeout | int | unset | [select | update | insert | delete] | 在抛出异常之前,驱动程序等待数据库返回请求结果的秒数,依赖数据库驱动。 |
| fetchSize | int | unset | [select | update | insert | delete] | 尝试让驱动程序每次批量返回的结果行数,依赖数据库驱动。 |
| resultOrdered | boolean | false | [select] | 如果为true,将会假设包含了嵌套结果集或是分组,当返回一个主结果行时,就不会产生对前面结果集的引用。这就使得在获取嵌套结果集的时候不至于内存不够用。 | |||
| resultSets | [object…] | —— | [select] | 这个设置仅适用于多结果集的情况。它将列出语句执行后返回的结果集并赋予每个结果集一个名称,多个名称之间以逗号分隔。 | |||
| useGeneratedKeys | boolean | false | [insert | update] | 是否开启自动生成主键,依赖数据库驱动。 | ||
| keyProperty | string | unset | [insert | update] | 指定能够唯一识别对象的属性。 | ||
| keyColumn | string | —— | [insert | update] | 设置生成键值在表中的列名。 |
\