之前Spring整合MyBatis时,需要定义很多配置类
SpringConfig配置类
@Configuration
@ComponentScan("com.blog")
@PropertySource("jdbc.properties")
@Import({JdbcConfig.class, MyBatisConfig.class})
public class SpringConfig {
}
导入JdbcConfig配置类
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 dataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driver);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
}
导入MyBatisConfig配置类
SqlSessionFactoryBean
public class MyBatisConfig {
//定义bean,SqlSessionFactoryBean,用于产生SqlSessionFactory对象
@Bean
public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource) {
SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
//设置模型类的别名扫描
sqlSessionFactory.setTypeAliasesPackage("com.blog.domain");
//设置数据源
sqlSessionFactory.setDataSource(dataSource);
return sqlSessionFactory;
}
//定义bean,返回MapperScannerConfigurer对象
@Bean
public MapperScannerConfigurer mapperScannerConfigurer() {
MapperScannerConfigurer msc = new MapperScannerConfigurer();
msc.setBasePackage("com.blog.dao");
return msc;
}
}
MyBatis Framework
和MySQL Driver
CREATE DATABASE springboot_db;
USE springboot_db;
CREATE TABLE tbl_book
(
id INT PRIMARY KEY AUTO_INCREMENT,
`type` VARCHAR(20),
`name` VARCHAR(50),
description VARCHAR(255)
);
INSERT INTO `tbl_book`(`id`, `type`, `name`, `description`)
VALUES (1, '计算机理论', 'Spring实战 第五版', 'Spring入门经典教程,深入理解Spring原理技术内幕'),
(2, '计算机理论', 'Spring 5核心原理与30个类手写实践', '十年沉淀之作,手写Spring精华思想'),
(3, '计算机理论', 'Spring 5设计模式', '深入Spring源码刨析Spring源码中蕴含的10大设计模式'),
(4, '计算机理论', 'Spring MVC+Mybatis开发从入门到项目实战',
'全方位解析面向Web应用的轻量级框架,带你成为Spring MVC开发高手'),
(5, '计算机理论', '轻量级Java Web企业应用实战', '源码级刨析Spring框架,适合已掌握Java基础的读者'),
(6, '计算机理论', 'Java核心技术 卷Ⅰ 基础知识(原书第11版)',
'Core Java第11版,Jolt大奖获奖作品,针对Java SE9、10、11全面更新'),
(7, '计算机理论', '深入理解Java虚拟机', '5个纬度全面刨析JVM,大厂面试知识点全覆盖'),
(8, '计算机理论', 'Java编程思想(第4版)', 'Java学习必读经典,殿堂级著作!赢得了全球程序员的广泛赞誉'),
(9, '计算机理论', '零基础学Java(全彩版)', '零基础自学编程的入门图书,由浅入深,详解Java语言的编程思想和核心技术'),
(10, '市场营销', '直播就这么做:主播高效沟通实战指南', '李子柒、李佳奇、薇娅成长为网红的秘密都在书中'),
(11, '市场营销', '直播销讲实战一本通', '和秋叶一起学系列网络营销书籍'),
(12, '市场营销', '直播带货:淘宝、天猫直播从新手到高手', '一本教你如何玩转直播的书,10堂课轻松实现带货月入3W+');
定义实体类
public class Book {
private Integer id;
private String type;
private String name;
private String description;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public String toString() {
return "Book{" +
"id=" + id +
", type='" + type + '\\'' +
", name='" + name + '\\'' +
", description='" + description + '\\'' +
'}';
}
}
定义dao接口: 在com.blog.dao包下定义BookDao接口
public interface BookDao {
@Select("select * from tbl_book where id = #{id}")
Book getById(Integer id);
}
定义测试类
@SpringBootTest
class Springboot03MybatisApplicationTests {
@Autowired
private BookDao bookDao;
@Test
void contextLoads() {
Book book = bookDao.getById(1);
System.out.println(book);
}
}
编写配置
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/springboot_db?serverTimezone=UTC
username: root
password: PASSWORD
运行测试方法,会报错No qualifying bean of type 'com.blog.dao.BookDao'
,没有类型为“com.blog.dao.BookDao”的限定bean为什么会出现这种情况呢?之前我们在配置MyBatis时,配置了如下内容
@Bean
public MapperScannerConfigurer mapperScannerConfigurer() {
MapperScannerConfigurer msc = new MapperScannerConfigurer();
msc.setBasePackage("com.blog.dao");
return msc;
}
Mybatis 会扫描接口并创建接口的代码对象交给 Spring 管理,但是现在并没有告诉 Mybatis 哪个是 dao 接口。 而我们要解决这个问题需要在BookDao 接口上使用 @Mapper ,BookDao 接口修改为
@Mapper
public interface BookDao {
@Select("select * from tbl_book where id = #{id}")
Book getById(Integer id);
}
<aside> 🌷 注意:SpringBoot 版本低于2.4.3(不含),Mysql驱动版本大于8.0时,需要在url连接串中配置时区jdbc:mysql://localhost:3306/springboot_db?serverTimezone=UTC,或在MySQL数据库端配置时区解决此问题
</aside>
现在我们并没有指定数据源,SpringBoot
有默认的数据源,我们也可以指定使用 Druid
数据源,按照以下步骤实现
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
在 application.yml
修改配置文件配置; 可以通过 spring.datasource.type
来配置使用什么数据源。配置文件内容可以改进为
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/springboot_db?serverTimezone=UTC
username: root
password: PASSWORD.
type: com.alibaba.druid.pool.DruidDataSource
SpringBoot
到这就已经学习完毕,接下来我们将学习 SSM
时做的三大框架整合的案例用 SpringBoot
来实现一下。先将之前做的SSM整合的代码拷贝过来,修改成SpringBoot的,之后再自己手动敲一遍SpringBoot的全流程,就当复盘了。
创建一个新的SpringBoot工程,注意要勾选Spring Web
,MyBatis Framework
和MySQL Driver
由于我们工程中使用到了 Druid
,所以需要导入 Druid
的坐标
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
将之前的ssm整合工程的代码拷贝过来,将com.blog
包下的所有内容拷贝过来,放在对应的位置即可。
需要修改的内容如下:
com.blog.config
包直接删掉,SpringBoot并不需要这些配置类@Mapper
注解@Mapper
public interface BookDao {
@Insert("insert into tbl_book values (null, #{type}, #{name}, #{description})")
int save(Book book);
@Update("update tbl_book set type=#{type}, `name`=#{name}, `description`=#{description} where id=#{id}")
int update(Book book);
@Delete("delete from tbl_book where id=#{id}")
int delete(Integer id);
@Select("select * from tbl_book where id=#{id}")
Book getById(Integer id);
@Select("select * from tbl_book")
List<Book> getAll();
}
将测试类也修改为SpringBoot的
import com.blog.domain.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class BookServiceTest {
@Autowired
private BookService bookService;
@Test
public void testGetById() {
Book book = bookService.getById(1);
System.out.println(book);
}
@Test
public void testGetAll() {
for (Book book : bookService.getAll()) {
System.out.println(book);
}
}
}
在application.yml配置文件中配置如下内容
server:
port: 80
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/springboot_db?serverTimezone=UTC
username: root
password: PASSWORD.
在 SpringBoot
程序中是没有 webapp
目录的,那么在 SpringBoot
程序中静态资源需要放在什么位置呢?
静态资源需要放在 resources
下的 static
下
那我们再配置一个默认页面,跳转到我们的增删改页面,新建index.html
,写入以下内容
<script>
document.location.href="/pages/books.html"
</script>
这样当我们在浏览器输入localhost,然后直接按回车,就能直接跳转到增删改的页面了,如果以后我们需要频繁测试某一个页面,也可以将上述代码中的地址换为我们要测试的地址,这样就不用老手敲地址了 那么至此,将之前的ssm整合,改为springboot的工作,就完成了