JDBCTemplate
引入spring-boot-starter-jdbc,引入了默认的数据源(com.zaxxer.hikari.HikariDataSource),拿到数据库连接,我们就可以操作数据库了,Spring本身对原生的JDBC做了轻量级的封装,即JdbcTemplate。
数据库的CRUD方法都在JdbcTemplate中,Spring Boot除了帮我们配置默认的数据源,还给我们配置好了JdbcTemplate在容器中,程序员只需要注入即可使用,JdbcTemplate的自动配置类是JdbcTemplateConfiguration类
JdbcTemplate主要提供以下几类方法
-
execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;
-
update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;
-
query方法及queryForXXX方法:用于执行查询相关语句;
-
call方法:用于执行存储过程、函数相关语句。
JdbcTemplate原理解析
@Configuration(proxyBeanMethods = false)
//配置类
@ConditionalOnClass({ DataSource.class, JdbcTemplate.class })
//在类上必须有数据源和JdbcTemplate类,才能使配置实例化
@ConditionalOnSingleCandidate(DataSource.class)
//在单个候选数据源上,配置才能生效
@AutoConfigureAfter(DataSourceAutoConfiguration.class)
// 在自动配置DataSourceAutoConfiguration后操作
@EnableConfigurationProperties(JdbcProperties.class)
//开启自动配置属性,配置JdbcProperties的属性
@Import({ DatabaseInitializationDependencyConfigurer.class, JdbcTemplateConfiguration.class,
NamedParameterJdbcTemplateConfiguration.class })
//导入数据库初始化依赖配置类,JdbcTemplate类,携带参数的Jdbc配置类
public class JdbcTemplateAutoConfiguration {
}
DataSource用来获取数据库连接对象
JdbcTemplate用来对数据库进行操作的
DataSource

JdbcTemplateConfiguration(JdbcTemplate自动配置类)
@Configuration(proxyBeanMethods = false)
@ConditionalOnMissingBean(JdbcOperations.class)
// 在没有传统的Jdbc操作中生效
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组件,设置了数据源和JDBC的属性操作
JDBC使用
编写一个Controller,注入jdbcTemplate,
package com.liang.controller;
import com.sun.org.glassfish.gmbal.ParameterNames;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/jdbc")
public class JdbcController {
//自动装配JdbcTemplate
@Autowired
private JdbcTemplate jt ;
//获取所有工人信息
@GetMapping("/list")
public List<Map<String,Object>> userList()
{
String sql = "select * from worker";
List<Map<String , Object>> maps = jt.queryForList(sql);
return maps;
}
@GetMapping("/add")
//增加工人信息
public String addUser()
{
String sql = "insert into `test`.`worker`(`no`,`name`) values(1,'李嘉诚') ";
int add = jt.update(sql);
if(add>0)
{
return "addOk";
}
return "addFalse";
}
@GetMapping("/update/{no}")
public String updateUser(@PathVariable("no") int no1)
{
int update = jt.update("update `worker` set `name` =? where `no` ="+no1,"周杰伦");
if(update>0)
{
return "updateOk";
}
return "updateFalse";
}
@GetMapping("/del/{no}")
public String delUser(@PathVariable("no") int no)
{
int del = jt.update("delete from `worker` where `no` ="+no);
if(del>0)
{
return "delOk";
}
return "delFalse";
}
}
编写测试方法进行访问测试
本文介绍了如何在Spring Boot应用中利用JdbcTemplate进行CRUD操作,包括其自动配置流程、核心类JdbcTemplateConfiguration的详解,以及在Controller中实际使用的例子。
6754

被折叠的 条评论
为什么被折叠?



