一、內置數據源
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);}}
?