SSM 程序集

135 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。



📕简介

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 应用扫描到分两种情况:

  1. 外部依赖进行引用到项目里面

    你大概可以理解为当控制器不在当前工程里面,而是在工程的依赖包里面,例如 SpringSecurity 默认的登录页面,就是通过外部模块来进行引用的。

  2. 与 Spring 应用启动类同级自动扫描

📚spring-boot-starter-web

文档:www.yiibai.com/spring-boot…

spring-boot-starter-web 集成包包括了 web、webmvc 和 tomcat 。

因此 tomcat 服务器和 Spring MVC 框架是会自动配置,极大地减少了开发量。

如果你希望自行配置服务器,也可以将 spring-boot-starter-tomcat 排除项目从而不使用 tomcat 服务器。

📚mybatis-spring-boot-starter

文档:www.mybatis.cn/archives/86…

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

文档:mybatis.net.cn/java-api.ht…

SqlSessions 是由 SqlSessionFactory 实例创建的。SqlSessionFactory 对象包含创建 SqlSession 实例的各种方法。而 SqlSessionFactory 本身是由 SqlSessionFactoryBuilder 创建的,它可以从 XML、注解或 Java 配置代码来创建 SqlSessionFactory。

📕 XML 映射器

文档:mybatis.net.cn/sqlmap-xml.…

元素标签

标签描述
cache命名空间的缓存配置
cache-ref引用其它命名空间的缓存配置
resultMap描述如何从数据库结果集中加载对象
sqlsql 语句,可被其它语句引用的可重用语句块
insert映射插入语句
update映射更新语句
delete映射删除语句
select映射查询语句

元素属性

属性默认值场景描述
idstring——[selectupdateinsertdelete]在命名空间中唯一的标识符,可以被用来引用这条语句。
parameterTypeobjectunset[selectupdateinsertdelete]指定传入该语句的参数的类型
resultTypeobject——[selectupdateinsertdelete]指定该语句返回的结果的类型。
resultMapobject——[selectupdateinsertdelete]对外部 resultMap 的命名引用。
flushCachebooleanfalse[selectupdateinsertdelete]该语句被调用会导致本地缓存和二级缓存被清空。
useCachebooleantrueselect该语句被调用会导致会导致其结果被二级缓存缓存起来。
timeoutintunset[selectupdateinsertdelete]在抛出异常之前,驱动程序等待数据库返回请求结果的秒数,依赖数据库驱动。
fetchSizeintunset[selectupdateinsertdelete]尝试让驱动程序每次批量返回的结果行数,依赖数据库驱动。
resultOrderedbooleanfalse[select]如果为true,将会假设包含了嵌套结果集或是分组,当返回一个主结果行时,就不会产生对前面结果集的引用。这就使得在获取嵌套结果集的时候不至于内存不够用。
resultSets[object…]——[select]这个设置仅适用于多结果集的情况。它将列出语句执行后返回的结果集并赋予每个结果集一个名称,多个名称之间以逗号分隔。
useGeneratedKeysbooleanfalse[insertupdate]是否开启自动生成主键,依赖数据库驱动。
keyPropertystringunset[insertupdate]指定能够唯一识别对象的属性。
keyColumnstring——[insertupdate]设置生成键值在表中的列名。

\