JdbcTemplate简介
- Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中。
JdbcTemplate主要提供以下五类方法:
- execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;
- update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;
- query方法及queryForXXX方法:用于执行查询相关语句;
- call方法:用于执行存储过程、函数相关语句。
与Spring boot结合使用
1、在pom文件中添加依赖
<dependencies>
<!--jdbc -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
2、配置文件
# 数据库访问配置
#默认数据源mySql
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/modulesandutils?serverTimezone=GMT%2B8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
3、简单实现
在类中注入JdbcTemplate即可通过query方法获取数据
@Repository
public class UserDao {
@Resource
private JdbcTemplate jdbcTemplate;
public void getUser(){
String sql = "select * from user";
List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
}
}
手动修改数据源
通过设置DriverManagerDataSource相关数据源参数获取对应的JdbcTemplate
public void changeDataSource(){
//设置数据源
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/rjtx_dw?serverTimezone=GMT%2B8&useSSL=false");
dataSource.setUsername("root");
dataSource.setPassword("root");
//构建指定数据源的JdbcTemplate
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
String sql ="select * from s_user";
List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
}
多数据配置
多数据源配置也算是一个常见的开发需求,JdbcTemplate简单配置多数据源如下;
1、添加依赖
<!--druid连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
2、配置多数据源
#多数据源的配置
#数据源1
spring.datasource.one.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.one.url=jdbc:mysql://localhost:3306/modulesandutils?serverTimezone=GMT%2B8&useSSL=false
spring.datasource.one.username=root
spring.datasource.one.password=root
#数据源2
spring.datasource.two.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.two.url=jdbc:mysql://localhost:3306/rjtx_dw?serverTimezone=GMT%2B8&useSSL=false
spring.datasource.two.username=root
spring.datasource.two.password=root
3、创建数据源配置类
通过one和two对数据源进行区分,改变配置的key后spring boot无法自动加载配置,需要自己配置一个DataSourceConfig,用来提供两个DataSource Bean,如下:
@Configuration
public class DataSourceConfig {
/**配置数据源1*/
@Bean
@ConfigurationProperties(prefix = "spring.datasource.one")
DataSource dsone(){
return DruidDataSourceBuilder.create().build();
}
/**配置数据源2*/
@Bean
@ConfigurationProperties(prefix = "spring.datasource.two")
DataSource dstwo(){
return DruidDataSourceBuilder.create().build();
}
}
其中@ConfigurationProperties是Spring Boot提供的类型安全的属性绑定,以第一个Bean为例,@ConfigurationProperties(prefix = "spring.datasource.one")表示使用spring.datasource.one前缀的数据库配置去创建一个DataSource
4、创建JdbcTemplate配置类
@Configuration
public class JdbcTemplateConfig {
@Bean
JdbcTemplate jdbcTemplateOne(@Qualifier("dsone")DataSource dsone){
return new JdbcTemplate(dsone);
}
@Bean
JdbcTemplate jdbcTemplatetwo(@Qualifier("dstwo")DataSource dstwo){
return new JdbcTemplate(dstwo);
}
}
由于上诉过中创建了两个DataSource,需要通过@Qualifier按名称加载
5、注入JdbcTemplate
方法一:
@Autowired
@Qualifier("jdbcTemplateOne")
private JdbcTemplate jdbcTemplateOne;
方法二:
@Resource(name = "jdbcTemplatetwo")
private JdbcTemplate jdbcTemplateTwo;
将查询结果映射到实体类
通过BeanPropertyRowMapper实现映射,但要求查询字段与实体类属性名一致
public void demo3(){
String sql1 = "select * from user";
List<User> users = jdbcTemplateOne.query(sql1, BeanPropertyRowMapper.newInstance(User.class));
}
参考:
来自 <https://www.cnblogs.com/caoyc/p/5630622.html>
来自 <https://segmentfault.com/a/1190000018535563?utm_source=tag-newest>