springboot-12-JDBCTemplate

本文介绍了如何在Spring Boot应用中利用JdbcTemplate进行CRUD操作,包括其自动配置流程、核心类JdbcTemplateConfiguration的详解,以及在Controller中实际使用的例子。

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";
    }
}

编写测试方法进行访问测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值