1,SpringBoot简介
SpringBoot
是由 Pivotal
团队提供的全新框架,其设计目的是用来==简化== Spring
应用的==初始搭建==以及==开发过程==。
使用了 Spring
框架后已经简化了我们的开发。而 SpringBoot
又是对 Spring
开发进行简化的,可想而知 SpringBoot
使用的简单及广泛性。既然 SpringBoot
是用来简化 Spring
开发的,那我们就先回顾一下,以 SpringMVC
开发为例:
- 创建工程,并在
pom.xml
配置文件中配置所依赖的坐标
- 编写
web3.0
的配置类
作为web
程序,web3.0
的配置类不能缺少,而这个配置类还是比较麻烦的,代码如下
- 编写
SpringMVC
的配置类
做到这只是将工程的架子搭起来。要想被外界访问,最起码还需要提供一个 Controller
类,在该类中提供一个方法。
- 编写
Controller
类
从上面的 SpringMVC
程序开发可以看到,前三步都是在搭建环境,而且这三步基本都是固定的。SpringBoot
就是对这三步进行简化了。
starter
SpringBoot
中常见项目名称,定义了当前项目使用的所有项目坐标,以达到减少依赖配置的目的
parent
- 所有
SpringBoot
项目要继承的项目,定义了若干个坐标版本号(依赖管理,而非依赖),以达到减少依赖冲突的目的 spring-boot-starter-parent
(2.5.0)与spring-boot-starter-parent
(2.4.6)共计57处坐标版本不同
实际开发
- 使用任意坐标时,仅书写GAV中的G和A,V由SpringBoot提供
G:groupid
A:artifactId
V:version
- 如发生坐标错误,再指定version(要小心版本冲突)
2,配置文件
2.1 配置文件格式
我们现在启动服务器默认的端口号是 8080
,访问路径可以书写为
在线上环境我们还是希望将端口号改为 80
,这样在访问的时候就可以不写端口号了,如下
而 SpringBoot
程序如何修改呢?SpringBoot
提供了多种属性配置方式
application.properties
server.port=80application.yml
server: port: 81application.yaml
server: port: 82
==注意:
SpringBoot
程序的配置文件名必须是application
,只是后缀名不同而已。==3,SpringBoot整合junit
回顾
Spring
整合junit
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = SpringConfig.class) public class UserServiceTest { @Autowired private BookService bookService; @Test public void testSave(){ bookService.save(); } }
使用
@RunWith
注解指定运行器,使用@ContextConfiguration
注解来指定配置类或者配置文件。而SpringBoot
整合junit
特别简单,分为以下三步完成
- 在测试类上添加
SpringBootTest
注解- 使用
@Autowired
注入要测试的资源- 定义测试方法进行测试
3.1 环境准备
创建一个名为
springboot_07_test
的SpringBoot
工程,工程目录结构如下
在
com.itheima.service
下创建BookService
接口,内容如下
public interface BookService { public void save(); }
在
com.itheima.service.impl
包写创建一个BookServiceImpl
类,使其实现BookService
接口,内容如下
@Service public class BookServiceImpl implements BookService { @Override public void save() { System.out.println("book service is running ..."); } }
3.2 编写测试类
在
test/java
下创建com.itheima
包,在该包下创建测试类,将BookService
注入到该测试类中
@SpringBootTest class Springboot07TestApplicationTests { @Autowired private BookService bookService; @Test public void save() { bookService.save(); } }
==注意:==这里的引导类所在包必须是测试类所在包及其子包。
例如:
引导类所在包是
com.itheima
测试类所在包是
com.itheima
如果不满足这个要求的话,就需要在使用
@SpringBootTest
注解时,使用classes
属性指定引导类的字节码对象。如@SpringBootTest(classes = Springboot07TestApplication.class)
4,SpringBoot整合mybatis
4.1 回顾Spring整合Mybatis
Spring
整合Mybatis
需要定义很多配置类
SpringConfig
配置类
- 导入
JdbcConfig
配置类- 导入
MybatisConfig
配置类 @Configuration
@ComponentScan("com.itheima")
@PropertySource("classpath:jdbc.properties")
@Import({JdbcConfig.class,MyBatisConfig.class})
public class SpringConfig {
}
JdbcConfig
配置类
- 定义数据源(加载properties配置项:driver、url、username、password) public class JdbcConfig {
• @Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String userName;
@Value("${jdbc.password}")
private String password;
@Bean
public DataSource getDataSource(){
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(userName);
ds.setPassword(password);
return ds;
}
}
MybatisConfig
配置类
- 定义
SqlSessionFactoryBean
- 定义映射配置 @Bean
public MapperScannerConfigurer getMapperScannerConfigurer(){
MapperScannerConfigurer msc = new MapperScannerConfigurer();
msc.setBasePackage("com.itheima.dao");
return msc;
}
@Bean
public SqlSessionFactoryBean getSqlSessionFactoryBean(DataSource dataSource){
SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
ssfb.setTypeAliasesPackage("com.itheima.domain");
ssfb.setDataSource(dataSource);
return ssfb;
}
4.2 SpringBoot整合mybatis
4.2.1 创建模块
- 创建新模块,选择
Spring Initializr
,并配置模块相关基础信息
- 选择当前模块需要使用的技术集(MyBatis、MySQL)
4.2.2 定义实体类
在
com.itheima.domain
包下定义实体类Book
,内容如下
public class Book { private Integer id; private String name; private String type; private String description; //setter and getter //toString }
4.2.3 定义dao接口
在
com.itheima.dao
包下定义BookDao
接口,内容如下
public interface BookDao { @Select("select * from tbl_book where id = #{id}") public Book getById(Integer id); }
4.2.4 定义测试类
在
test/java
下定义包com.itheima
,在该包下测试类,内容如下
@SpringBootTest class Springboot08MybatisApplicationTests { @Autowired private BookDao bookDao; @Test void testGetById() { Book book = bookDao.getById(1); System.out.println(book); } }
4.2.5 编写配置
我们代码中并没有指定连接哪儿个数据库,用户名是什么,密码是什么。所以这部分需要在
SpringBoot
的配置文件中进行配合。在
application.yml
配置文件中配置如下内容
spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/ssm_db username: root password: root
4.2.6 测试
运行测试方法,我们会看到如下错误信息
错误信息显示在
Spring
容器中没有BookDao
类型的bean
。为什么会出现这种情况呢?原因是
Mybatis
会扫描接口并创建接口的代码对象交给Spring
管理,但是现在并没有告诉Mybatis
哪个是dao
接口。而我们要解决这个问题需要在BookDao
接口上使用@Mapper
,BookDao
接口改进为
@Mapper public interface BookDao { @Select("select * from tbl_book where id = #{id}") public Book getById(Integer id); }
==注意:==
SpringBoot
版本低于2.4.3(不含),Mysql驱动版本大于8.0时,需要在url连接串中配置时区jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
,或在MySQL数据库端配置时区解决此问题4.2.7 使用Druid数据源
现在我们并没有指定数据源,
SpringBoot
有默认的数据源,我们也可以指定使用Druid
数据源,按照以下步骤实现
- 导入
Druid
依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.16</version> </dependency>- 在
application.yml
配置文件配置
可以通过spring.datasource.type
来配置使用什么数据源。配置文件内容可以改进为 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC username: root password: root type: com.alibaba.druid.pool.DruidDataSource
SpringBoot
到这就已经学习完毕,接下来我们将学习SSM
时做的三大框架整合的案例用SpringBoot
来实现一下。我们完成这个案例基本是将之前做的拷贝过来,修改成SpringBoot
的即可,主要从以下几部分完成
- pom.xml
配置起步依赖,必要的资源坐标(druid)- application.yml
设置数据源、端口等- 配置类
全部删除- dao
设置@Mapper- 测试类
- 页面
放置在resources目录下的static目录中