如果不使用mybatis,spring boot其实也给我们写好了JDBC模板,我更愿意称之为工具类。
即使不用mybatis我们的数据库操作也可以变得很简洁,往下看看。
1、导入依赖
整合jdbc我们只需要导入两个依赖即可:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
2、配置数据库连接
我使用的是MySQL8数据库,在application.yml中编写:
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/testdb?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF8
username: root
password: tx123
testdb
中有一个t_user
表如下:
只要我们配置了数据库的连接信息,spring boot就会自动帮我们注入数据源,我们可以测试一下
3、测试数据源
@Autowired
DataSource dataSource;
@Test
void contextLoads() throws SQLException {
System.out.println(dataSource.getConnection());
}
结果:HikariProxyConnection@2043702205 wrapping com.mysql.cj.jdbc.ConnectionImpl@47a7a101
它默认的数据源是Hikari,号称最快的数据源比c3p0,dbcp,tomcat jdbc更优秀。
spring. datasource.type
可以指定数据源
4、JdbcTemplate
spring boot中有很多的xxxTemplate是spring boot帮我们写好的模板,在spring-boot-autoconfigre
包下。
比如:在上面包下有一个包叫jdbc
,其中有一个配置类叫JdbcTemplateConfiguration
@Configuration(proxyBeanMethods = false)
@ConditionalOnMissingBean(JdbcOperations.class)
class JdbcTemplateConfiguration {
@Bean
@Primary
JdbcTemplate jdbcTemplate(DataSource dataSource, JdbcProperties properties) {
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
JdbcProperties.Template template = properties.getTemplate();
jdbcTemplate.setFetchSize(template.getFetchSize());
jdbcTemplate.setMaxRows(template.getMaxRows());
if (template.getQueryTimeout() != null) {
jdbcTemplate.setQueryTimeout((int) template.getQueryTimeout().getSeconds());
}
return jdbcTemplate;
}
}
把JdbcTemplate 注册到了spring中,我们可以直接使用
5、测试
@Autowired
JdbcTemplate jdbcTemplate;
@Test
void test01(){
// 通过queryForList的方法查询
String sql = "select * from t_user";
List<Map<String, Object>> mapList = jdbcTemplate.queryForList(sql);
System.out.println(mapList);
/*
结果如下
[{username=张三, pwd=zs23, sex=1},
{username=李四, pwd=ls123, sex=1},
{username=王婶, pwd=ws123, sex=0},
{username=谭熙, pwd=tx123, sex=1}]
*/
}
@Test
void test02(){
String sql = "delete from t_user where username=?";
// 预编译sql
int res = jdbcTemplate.update(sql, "张三");
}