使用SpringBoot实现SSM三框架整合
按照javaEE三层架构可以分为:
- 表现层: SpringMVC【MVC】
- 业务层: Spring,由Spring实现声明式事务管理
- 持久层: MyBatis 【ORM】
添加依赖
- 继承于spring-boot-starter-parent,一般进行SpringBoot框架应用开发时都采用继承的方式。这个父项目提供了版本仲裁机制
- spring-boot-starter-web启动器用于针对web应用提供支持
- mybatis-spring-boot-starter启动器用于实现整合MyBatis框架
- 默认引入了连接HikariCP。但是这里考虑使用druid。所以需要手工添加依赖
<!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.15</version>
</dependency>
- 数据库驱动
添加配置
SpringBoot优先考虑使用配置类的方式添加配置信息,但是如果是第三方提供的实现类,而且添加配置类比较繁琐,可以考虑使用核心配置文件
核心配置文件可以使用properties也可以使用yaml两种不同的格式,而且使用过程种IDEA会有提示
application.properties
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456
利用SpringBoot的初始化实现数据库的初始化创建
在resources目录下创建文件夹database,添加创建数据表的SQL语句
create table if not exists tb_users(
id bigint primary key auto_increment,
username varchar(32) not null,
password varchar(32) not null
)engine=innodb default charset utf8;
添加配置使SpringBoot框架在启动时自动执行schema.sql文件种的sql语句
spring.sql.init.mode=always
spring.sql.init.schema-locations=classpath*:database/schema.sql
配置参数spring.sql.init.mode用于设置初始化模式,有3个可选值,always每次启动SpringBoot时都执行sql语句,never表示不执行sql语句
配置参数spring.sql.init.schema-locations用于指定对应的sql文件位置
配置参数spring.sql.init.data-locations用于指定表种数据的初始化对应的sql文件,例如insert语句
观察在控制台上的日志会发现实际上启动的是默认的连接池HikariCP。如果需要使用Druid,还应该修改配置
2023-01-09T17:07:57.880+08:00 INFO 7448 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
修改application.properties文件使druid连接池生效
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456
属性spring.datasource.type用于设置当前所使用的连接池为druid
依赖包种引入的hikariCP没有用处,可以考虑在pom.xml种进行排除,从而避免项目种引入无用的依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.0</version>
<exclusions>
<!-- 排除指定的依赖,不需要将该依赖添加到项目种,这里不需要版本号 -->
<exclusion>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</exclusion>
</exclusions>
</dependency>
表现层
使用SpringMVC框架,显示页面使用jsp
SpringBoot已经不推荐使用jsp技术定义显示页面,如果需要使用jsp则需要手动添加额外的依赖
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
其中依赖tomcat-embed-jasper用于实现jsp页面的解析,另外引入jstl以避免在jsp页面种使用java编程
再src/main目录下新增文件夹webapp用于存放jsp页面,另外在webapp目录下创建WEB-INF,最后在WEB-INF文件夹下创建一个新文件夹content用于真正存放jsp页面文件
修改application.properties文件添加视图解析所需要的两个参数
spring.mvc.view.suffix=.jsp
spring.mvc.view.prefix=/WEB-INF/content/
这两个参数用于进行视图解析,将逻辑地址名转换为物理地址
定义SpringMVC的控制器
@Controller
public class IndexController {
@RequestMapping({"/","","index"})
public String index(){
return "index";
}
}
静态资源解析
不需要额外配置,只是将所有的静态资源存放在src/main/resources/static目录下即可
在static目录下创建子文件夹images,拷贝图片到images,在页面则可以直接访问
<base href="${pageContext.request.scheme}://${pageContext.request.serverName}:${pageContext.request.serverPort}${pageContext.request.contextPath}/">
<img src="images/mv02.jpg"/>