Spring6—JdbcTemplate基础

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 记Spring6—JdbcTemplate基础

JdbcTemplate是Spring提供的一个JDBC模板类,是对JDBC的封装,简化JDBC代码。

可以让Spring集成其他的ORM框架:Mybatis、Hibernate等

环境:JDK17+IDEA+Maven+Spring6+JdbcTemplate

环境准备

准备数据库表
新建模板 New Module            Maven项目

图片.png

pom.xml配置
<!--    仓库地址Spring io-->
    <repositories>
<!--        Spring6里程碑版本的仓库-->
        <repository>
            <id>repository.Spring.milestone</id>
            <name>Spring Milestone Repository</name>
            <url>https://repo.spring.io/milestone</url>
        </repository>
    </repositories>
    <dependencies>
<!--        Spring context依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>6.0.0-M2</version>
        </dependency>
        <!--        Spring jdbc依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>6.0.3</version>
        </dependency>
        <!--        mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.17</version>
        </dependency>
        <!--junit依赖-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

图片.png

Bean

图片.pngimage.png

数据源
//只要实现了DataSource接口都是数据源。
//数据源存在的目的是为了提供Connection对象
// dbcp连接池,C3p0连接池,都实现了DataSource接口
自己写的driver、url、name、password,需提供set方法,set注入

图片.png

图片.png

SpringConfig.xml配置
<!--配置数据源-->
    <bean id="ds" class="com.bean.DateSource.DateSourcedate">
        <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://ip:3306/mysql?"/>
        <property name="username" value="root"/>
        <property name="password" value="111111"/>
    </bean>
    <!--    也可以集成其他开发的数据源c3p0 dbcp等-->
    <!--    配置JabcTemplate-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="ds"></property>

image.png

测试类

image.png

JdbcTemplate-insert

在JdbcTemplate环境准备好的情况下
测试类
@Test
    public void JdbcInsertTest(){
        ApplicationContext applicationContext =new ClassPathXmlApplicationContext("SpringConfig.xml");
        JdbcTemplate jabcTemplate = applicationContext.getBean("jdbcTemplate", JdbcTemplate.class);
        //insert
        String sql ="INSERT INTO TEST1 VALUES(?,?,?,?,?)";
        //在JdbcTemplate模板中只要是增删改都是update
        int update = jabcTemplate.update(sql, 26, "李四", "南京", "2023-01-01", "女");
        System.out.println("影响了:"+update+"行");
    }

图片.png

JdbcTemplate修改和删除

修改

图片.png

删除

image.png

JdbcTemplate查一个对象

@Test
    public void JdbcSelectTest(){
        ApplicationContext applicationContext =new ClassPathXmlApplicationContext("SpringConfig.xml");
        JdbcTemplate jabcTemplate = applicationContext.getBean("jdbcTemplate", JdbcTemplate.class);
        String sql ="SELECT p_id,p_name,address,birth,gender FROM TEST1 WHERE p_id=?";
        User user = jabcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(User.class),25);
        System.out.println(user.toString());
    }

图片.png

图片.png

JdbcTemplate查多个对象

@Test
    public void JdbcSelectAllTest(){
        ApplicationContext applicationContext =new ClassPathXmlApplicationContext("SpringjdbcConfig.xml");
        JdbcTemplate jabcTemplate = applicationContext.getBean("jdbcTemplate", JdbcTemplate.class);
        //执行sql
        String sql ="SELECT p_id,p_name,address,birth,gender FROM TEST1 ";
        List<User> query = jabcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));
        query.forEach(e-> System.out.println(e.toString()));
    }

图片.png

JdbcTemplate查一个值

@Test
    public void selectOneValueTest(){
        ApplicationContext applicationContext =new ClassPathXmlApplicationContext("SpringjdbcConfig.xml");
        JdbcTemplate jabcTemplate = applicationContext.getBean("jdbcTemplate", JdbcTemplate.class);
        String sql ="SELECT COUNT(*) FROM TEST1 WHERE gender='男'";
        Integer integer = jabcTemplate.queryForObject(sql, Integer.class);
        System.out.println(integer);
    }

图片.png

JdbcTemplate批量添加

public void batchInsertTest(){
        ApplicationContext applicationContext =new ClassPathXmlApplicationContext("SpringjdbcConfig.xml");
        JdbcTemplate jabcTemplate = applicationContext.getBean("jdbcTemplate", JdbcTemplate.class);
        String sql ="INSERT INTO TEST1 VALUES(?,?,?,?,?)";
        Object[] objects1 ={27, "小妮", "南京", "2023-01-01", "女"};
        Object[] objects2 ={28, "小红", "上海", "2023-01-01", "女"};
        Object[] objects3 ={29, "小月", "南宁", "2023-01-01", "女"};
        Object[] objects4 ={30, "小欣", "深圳", "2023-01-01", "女"};
        List<Object[]> list = new ArrayList<>();
        list.add(objects1);
        list.add(objects2);
        list.add(objects3);
        list.add(objects4);
        //在JdbcTemplate中只要是增删改都是update
        int[] count = jabcTemplate.batchUpdate(sql, list);
        System.out.println(count);
    }

图片.png

JdbcTemplate批量更新

@Test
    public void batchUpdateTest(){
        ApplicationContext applicationContext =new ClassPathXmlApplicationContext("SpringjdbcConfig.xml");
        JdbcTemplate jabcTemplate = applicationContext.getBean("jdbcTemplate", JdbcTemplate.class);
        String sql ="UPDATE TEST1 SET gender=? WHERE p_id=?";
        Object[] objects1 ={"女",27};
        Object[] objects2 ={"女",28};
        List<Object[]> list = new ArrayList<>();
        list.add(objects1);
        list.add(objects2);
        //在JdbcTemplate中只要是增删改都是update
        int[] count = jabcTemplate.batchUpdate(sql, list);
        System.out.println(count);
    }

图片.png

JdbcTemplate批量删除

@Test
    public void batchDeleteTest(){
        ApplicationContext applicationContext =new ClassPathXmlApplicationContext("SpringjdbcConfig.xml");
        JdbcTemplate jabcTemplate = applicationContext.getBean("jdbcTemplate", JdbcTemplate.class);
        String sql ="DELETE  FROM TEST1 WHERE p_id=?";
        Object[] objects1 ={27};
        Object[] objects2 ={28};
        List<Object[]> list = new ArrayList<>();
        list.add(objects1);
        list.add(objects2);
        int[] count = jabcTemplate.batchUpdate(sql, list);
        System.out.println(count.length);
    }

图片.png

JdbcTemplate回调函数

写jdbc代码,可以使用回调函数
@Test
    public void callBackTest(){
        //写jdbc代码,可以使用回调函数
        ApplicationContext applicationContext =new ClassPathXmlApplicationContext("SpringjdbcConfig.xml");
        JdbcTemplate jabcTemplate = applicationContext.getBean("jdbcTemplate", JdbcTemplate.class);
        String sql ="SELECT p_id,p_name,gender FROM TEST1 WHERE p_id=?";
        //注册回调函数,执行execute方法时会执行doInPreparedStatement()
        User execute = jabcTemplate.execute(sql, new PreparedStatementCallback<User>() {
            @Override
            public User doInPreparedStatement(PreparedStatement ps) throws SQLException, DataAccessException {
                User user = null;
                ps.setInt(1, 26);
                ResultSet resultSet = ps.executeQuery();
                if (resultSet.next()) {
                    int id = resultSet.getInt("p_id");
                    String name = resultSet.getString("p_name");
                    String gender = resultSet.getString("gender");
                    user = new User();
                    user.setP_id(id);
                    user.setP_name(name);
                    user.setGender(gender);
                }
                return user;
            }
        });
        System.out.println(execute.toString());
    }

图片.png

JdbcTemplate回调函数整合德鲁伊连接池

德鲁伊连接池(阿里巴巴开发)
Pom.xml
<!--        引入德鲁伊连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.15</version>
        </dependency>

图片.png

SpringjdbcConfig.xml配置

图片.png

图片.png


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
5月前
|
Java Spring
使用JDBCTemplate实现与Spring结合,方法公用 ——测试(EmpDaoImplTest)
使用JDBCTemplate实现与Spring结合,方法公用 ——测试(EmpDaoImplTest)
|
5月前
|
XML Java 数据库
【Spring】通过JdbcTemplate实现CRUD操作
【Spring】通过JdbcTemplate实现CRUD操作
63 0
|
2月前
|
SQL 数据库
Spring5入门到实战------13、使用JdbcTemplate操作数据库(批量增删改)。具体代码+讲解 【下篇】
这篇文章是Spring5框架的实战教程,深入讲解了如何使用JdbcTemplate进行数据库的批量操作,包括批量添加、批量修改和批量删除的具体代码实现和测试过程,并通过完整的项目案例展示了如何在实际开发中应用这些技术。
Spring5入门到实战------13、使用JdbcTemplate操作数据库(批量增删改)。具体代码+讲解 【下篇】
|
2月前
|
XML 数据库 数据格式
Spring5入门到实战------14、完全注解开发形式 ----JdbcTemplate操作数据库(增删改查、批量增删改)。具体代码+讲解 【终结篇】
这篇文章是Spring5框架的实战教程的终结篇,介绍了如何使用注解而非XML配置文件来实现JdbcTemplate的数据库操作,包括增删改查和批量操作,通过创建配置类来注入数据库连接池和JdbcTemplate对象,并展示了完全注解开发形式的项目结构和代码实现。
Spring5入门到实战------14、完全注解开发形式 ----JdbcTemplate操作数据库(增删改查、批量增删改)。具体代码+讲解 【终结篇】
|
2月前
|
SQL XML Java
Spring5入门到实战------12、使用JdbcTemplate操作数据库(增删改查)。具体代码+讲解 【上篇】
这篇文章是Spring5框架的实战教程,详细讲解了如何使用JdbcTemplate进行数据库的增删改查操作,包括在项目中引入依赖、配置数据库连接池、创建实体类、定义DAO接口及其实现,并提供了具体的代码示例和测试结果,最后还提供了完整的XML配置文件和测试代码。
Spring5入门到实战------12、使用JdbcTemplate操作数据库(增删改查)。具体代码+讲解 【上篇】
|
4月前
|
SQL Java 数据库连接
Spring5系列学习文章分享---第四篇(JdbcTemplate+概念配置+增删改查数据+批量操作 )
Spring5系列学习文章分享---第四篇(JdbcTemplate+概念配置+增删改查数据+批量操作 )
27 0
|
5月前
|
XML Java 关系型数据库
Spring6 JdbcTemplate和事务
Spring6 JdbcTemplate和事务
|
5月前
|
SQL Java 数据库连接
jpa、hibernate、spring-data-jpa、jdbcTemplate
jpa、hibernate、spring-data-jpa、jdbcTemplate
|
5月前
|
Java Spring
使用JDBCTemplate实现与Spring结合,方法公用 ——共用实现类(BaseImpl)
使用JDBCTemplate实现与Spring结合,方法公用 ——共用实现类(BaseImpl)
|
5月前
|
Java 数据库连接 数据库
Spring系列文章:Spring使用JdbcTemplate
Spring系列文章:Spring使用JdbcTemplate
下一篇
无影云桌面