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、导入相关依赖
org.springframework.boot spring-boot-starter-jdbc
【注意】:
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)
query(String sql, RowMapper rowMapper)
queryForObject(String sql, RowMapper rowMapper, Object... args)
batchUpdate(String sql, List)
queryForList(String sql)
List<Map>
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
@SpringBootTestpublic class BookJdbcTest { @Autowired private JdbcTemplate jdbcTemplate; @Test public void testBookSave(){ String sql = \"insert into TBL_BOOK (id, type, name, description) values (2, \'springboot2\', \'springboot2\', \'springboot2\')\"; jdbcTemplate.update(sql); } @Test public void testSelect(){ String sql= \"select * from tbl_book\"; List query = jdbcTemplate.query(sql, new BeanPropertyRowMapper(Book.class)); query.forEach(System.out::println); }}
操作数据库代码2:mybatis-plus
@SpringBootTestpublic class BookMybatisPlusTest { @Autowired private IBookService bookService; @Test public void testSave(){ Book book = new Book(); book.setId(3); book.setName(\"springboot3\"); book.setType(\"springboot3\"); book.setDescription(\"springboot3\"); bookService.save(book); } @Test public void testSelect(){ Book book = bookService.getById(3); System.out.println(book); }}