SpringBoot07-数据层的解决方案:SQL
一、内置数据源
1-1、【回顾】Druid数据源的配置
druid的两种导入格式
1-2、springboot提供的3种内置数据源的配置
若是不配置Druid, springboot提供了3中默认的数据源配置,它们分别是:
1. HikariCP(默认)
-
从 Spring Boot 2.0 开始的默认数据源
-
性能优秀,轻量级,响应速度快,社区活跃
-
推荐在生产环境中使用
配置示例(application.yml
或 .properties
):
【注意】:
一般,默认的数据源的配置就是用的 Hikari数据源!
常用属性:
-
maximum-pool-size
: 最大连接数 -
minimum-idle
: 最小空闲连接数 -
connection-timeout
: 连接超时时间(毫秒)
2. Apache Commons DBCP2
Hikari不可用,tomcat数据源也不可用。
-
是 Apache Commons 提供的连接池实现
-
比 HikariCP 稍重,性能略低一些
配置方式:
3. Tomcat JDBC Connection Pool
Hikari不可用,且在web环境中,将使用Tomcat服务器配置的数据源对象!
-
Spring Boot 内部默认依赖于 Tomcat,所以这个连接池和 Spring Boot 集成良好
-
性能也不错,但 HikariCP 更优
配置方式:
4、切换数据源类型的方法
(1)、通过配置:
spring.datasource.type=xxx
可选值包括:
-
com.zaxxer.hikari.HikariDataSource
-
org.apache.commons.dbcp2.BasicDataSource
-
org.apache.tomcat.jdbc.pool.DataSource
(2)、通过具体设置
二、springboot内置持久化的解决方案:jdbcTemplate
1、导入相关依赖
<!-- spring-boot-starter-jdbc 默认就包含了 JdbcTemplate -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
【注意】:
spring-boot-starter-jdbc中默认使用的是hikari数据源!
2、配置 application.yml
或 application.properties中的数据库连接信息
3、使用 JdbcTemplate
Spring Boot 会自动将 JdbcTemplate
注册为 Bean,只需注入即可:
【注意】:
1、如果你不确定一定有数据,不要使用
queryForObject,否则查不到数据会报错!
2、默认支持下划线转驼峰映射。
4、常用方法:
方法 | 说明 |
---|---|
update(String sql, Object... args) | 执行 insert、update、delete |
query(String sql, RowMapper<T> rowMapper) | 查询多个结果 |
queryForObject(String sql, RowMapper<T> rowMapper, Object... args) | 查询单个结果(查不到报错) |
batchUpdate(String sql, List<Object[]>) | 批量更新 |
queryForList(String sql) | 查询返回 List<Map<String, Object>> |
5、使用RowMapper,手动映射
6、spring中jdbcTemplate中的应用,参考文章:
spring07-JdbcTemplate操作数据库-CSDN博客
三、内置数据库
都是用java写的
都能在内存中运行,测试方便
都十分轻巧
2-1、内嵌数据库H2
1、导入数据库相关依赖
【注意】:
此时点击test connection会报错:初始化错误,需要在application.yml中配置如下:
启动项目后,刷性页面,再次点击test connection即可,此时即使把application.yml中配置的配置在删掉也不影响了。
使用h2创建一张表:tbl_book:
编写操作数据库的代码1:jdbcTemplate
@SpringBootTest
public class BookJdbcTest {@Autowiredprivate JdbcTemplate jdbcTemplate;@Testpublic void testBookSave(){String sql = "insert into TBL_BOOK (id, type, name, description) values (2, 'springboot2', 'springboot2', 'springboot2')";jdbcTemplate.update(sql);}@Testpublic void testSelect(){String sql= "select * from tbl_book";List<Book> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Book.class));query.forEach(System.out::println);}}
操作数据库代码2:mybatis-plus
@SpringBootTest
public class BookMybatisPlusTest {@Autowiredprivate IBookService bookService;@Testpublic void testSave(){Book book = new Book();book.setId(3);book.setName("springboot3");book.setType("springboot3");book.setDescription("springboot3");bookService.save(book);}@Testpublic void testSelect(){Book book = bookService.getById(3);System.out.println(book);}}