SpringBoot默认内嵌数据层解决方案
数据层解决方案
常用的数据层解决方案技术选型:数据源+持久化技术+数据库:DruidDataSource+MyBatis-Plus/MyBatis+Mysql;
可以使用Hikari/DruidDataSource+jdbcTemplate/MyBatis-Plus/MyBatis+Mysql/h2搭配使用
内嵌:Embedded
独立的服务器版本:server
内置数据源Hikari
Spring自动配置,durid的依赖在他就会自动配置上
SpringBoot提供了三种内嵌的数据源对象供开发者选择
- HikariCP:默认内置数据源对象(轻量级,运行速度快)
- Tomcat提供DataSource:HikariCP不可用的情况下,且在web环境中,将使用tomcat服务器配置的数据源对象
- Commons DBCP:Hikari不可用,tomcat数据源也不可用,将使用dbcp数据源
默认启动就是Hikari
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
username: root
password: root
- 通用配置无法设置具体的数据源配置信息,仅提供基本的连接相关配置,如需配置,在下一级配置中设置具体设定
- 每种的配置方法不一样
spring:
datasource:
url: jdbc:mysql://ocalhost:3306/ssm_db?serverTimezone=UTC
hikari:
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: root
maximum-pool-size: 50
dbcp2:
tomcat:
内置持久化解决方案jdbcTemplate
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
spring:
jdbc:
template:
query-timeout: -1 # 查询超时时间
max-rows: 500 # 最大行数
fetch-size: -1 # 批处理数量
@springBootTest
class springbootSqlApplicationTests{
@Autowired
private JdbcTemplate jdbcTemplate;
@Test
void testJdbc(){
String sql="select*from tbl book where id = 1";
List<Book>query = jdbcTemplate.query(sql, new RowMapper<Book>(){
@Override
public Book mapRow(ResultSet rs, int rowNum)throws SQLException{
Book temp = new Book();
temp.setId(rs.getInt("id"));
temp.setName(rs.getString("name"));
temp.setType(rs.getString("type"));
temp.setDescription(rs.getString("description"));
return temp;
}
});
System.out.println(query);
}
}
update、query
@Test
void testjdbcTemplata(@Autowired JdbcTemplate jdbcTemplate){
String sql = "select * from tb_book where id = 1";
List<Map<String,Object>> maps = jdbcTemplate.queryForList(sql);
}
@Test
void testjdbcTemplata(@Autowired JdbcTemplate jdbcTemplate){
String sql = "select * from tb_book where id = 1";
RowMapper<Book> rm = new RowMapper<Book>(){
@Override
public Book mapRow(ResultSet rs,int rowNum) throws SQLException {
Book temp = new Book();
temp.setId(rs.getInt("id"));
temp.setName(rs.getString("name"));
temp.setType(rs.getString("type"));
temp.setDesc(rs.getString("desc"));
return temp;
}
};
List<Book> list = jdbcTemplate.query(sql,rm);
}
@Test
void testjdbcTemplataSave(@Autowired JdbcTemplate jdbcTemplate){
String sql = "insert into tb_book values (1,'spb1','spb1','spb1')";
jdbcTemplate.update(sql);
}
内嵌数据库H2
SpringBoot提供了3种内嵌数据库供开发者选择:H2、HSQL、Derby
- 都是java语言写的(放在SpringBoot容器里跟这样一起启动)
- 都可以在内存中启动
- 都足够小
- 都可以脱离文件系统那种数据库运行,测试方便,真正上线还是用MySQL
h2数据库控制台仅用于开发阶段
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jpa</artifactId>
</dependency>
启动管理界面
用户名/密码:sa/123456
spring:
h2:
console:
path: /h2
enabled: true
datasource: jdbc:h2:~test
hikari:
driver-class-name: org.h2.Driver
username: sa
password: 123456