【Spring】Spring剩余组件 细讲之JdbcTemplate部分详解

Spring框架细讲 JdbcTemplate部分



前言

了解或会写JDBC会更方便你对该组件的了解,如果没有该前置知识建议与了解下再来会更好

如果对于部分注解或者配置不太了解可以看下
Spring之IOC
Spring之 AOP
JDBC 该文章还未完善 期待后续


一、概述

1、什么是 JdbcTemplate
(1)Spring 框架对 JDBC 进行封装,使用 JdbcTemplate 方便实现对数据库

2、JdbcTemplate底层也是依赖于动态代理

二、使用步骤

2.1 引入相关依赖jar包

在这里插入图片描述

2.2 上手使用之xml配置JdbcTemplate

  1. xml配置
  2. 配置连接池
  3. 创建JdbcTemplate对象
  4. 开启组件扫描 可配置扫描规则
  5. 创建dao层 注入jdbcTemplate / service 创建service bean对象

需要引入context命名空间

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

     <!-- 引入外部jdbc配置文件 -->
    <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
    <!-- 配置连接池 -->
    <!-- DruidDataSource dataSource = new DruidDataSource(); -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <!-- dataSource.setDriverClassName("com.mysql.jdbc.Driver");
            set方法注入
        -->
        <!-- 获取properties文件内容,根据key获取,使用spring表达式获取 -->
        <property name="driverClassName" value="${prop.jdbcDriveClass}"></property>
        <property name="url" value="${prop.url}"></property>
        <property name="username" value="${prop.username}"></property>
        <property name="password" value="${prop.password}"></property>
    </bean>

    <!--JDBCTemplate对象-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!--开启组件扫描-->
    <context:component-scan base-package="com.worker">
        <!--配置扫描的规则-->
        <!-- use-default-filters="false"-->
        <!--<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Component"/>-->
    </context:component-scan>

    <bean id="fruitService" class="com.worker.spring.service.FruitService"></bean>
</beans>

2.3 配置类

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

@Configuration /*配置当前类为配置类 替代xml配置文件*/
@ComponentScan(basePackages = "com.worker") /*开启组件扫描*/
@EnableAspectJAutoProxy(proxyTargetClass = true) /* 开启Aspectj生成代理对象 */
public class MyConfig {
}

2.4 上手使用之增删改

了解数据库的最清楚不过的四大操作增删改查

// 注入jdbcTemplate
@Autowired
private JdbcTemplate jdbcTemplate;

@Override
public void update(String sql, Object... args) {
    jdbcTemplate.update(sql,args);
}

2.5 上手使用之查询

2.5.1 查询某个值(count max min avg sum)

queryForObject 参数:1.sql语句 2.返回值类型

queryForObject(String sql,Class<T> requiredType)
// 查询记录条数
@Override
public int queryForNum(String sql) {
    Integer o = (Integer) jdbcTemplate.queryForObject(sql,Integer.class);
    return o;
}

2.5.2 查询某一条数据(返回对象)

queryForObject(String sql,RowMapper,args)有三个参数
⚫ 第一个参数:sql 语句

⚫ 第二个参数:RowMapper 是接口,针对返回不同类型数据,使用这个接口里面实现类完成 数据封装

⚫ 第三个参数:sql 语句值

@Override
public Fruit findFruitInfo(String sql,int fid) {
    /* 每条数据都封装成了Fruit对象 */
    RowMapper<Fruit> rowMapper =new BeanPropertyRowMapper<>(Fruit.class);
    Fruit fruit = jdbcTemplate.queryForObject(sql, rowMapper, fid);
    return fruit;
}

三、批量操作(插入/删除/更新)

batchUpdate(sql,List<Object[]> list)

@Override
public void batchAddFruit(String sql, List<Object[]> batchArgs) {
    int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
    System.out.println(Arrays.toString(ints));
}

四、全注解开发

文中的jdbc.properties配置文件为自己配置

@Configuration//代表此类是配置类
@ComponentScan(basePackages={"com.worker"})//要扫描的包
@PropertySource({"classpath:jdbc.properties"})//从哪个properties文件中取值
public class MyConfig {
    @Value("${prop.jdbcDriveClass}")//value注解代表把文件中的值赋值给此变量
    private String driver;

    @Value("${prop.url}")
    private String url;

    @Value("${prop.username}")
    private String user;

    @Value("${prop.password}")
    private String password;



    @Bean(name="dataSource")//给方法取名字
    public DataSource getDataSource(){
        DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
        driverManagerDataSource.setDriverClassName(driver);
        driverManagerDataSource.setUrl(url);
        driverManagerDataSource.setUsername(user);
        driverManagerDataSource.setPassword(password);
        return driverManagerDataSource;
    }


    @Bean(name="jdbcTemplate")
    public JdbcTemplate createJdbcTemplate(DataSource dataSource){
        return new JdbcTemplate( dataSource);
    }
}

总结

JdbcTemplate操作其实是对于Spring对于JDBC的封装,使操作更加简单罢了,底层还是JDBC,你了解了JDBC与MySQL前置知识,理解简直就是so easy好吧

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值