spring —— 使用 JDBCTemplate 对数据库操作

在传统方法中,我们一般建立 Connection 链接,然后通过 **Statement stm = conn.createStatement()**来获取 Statement 对象,最后用 Statement 对象操作数据库。

在 spring 中,则是通过 com.alibabadruid配置数据源工具,来配置要连接的数据库,然后将配置好的数据源作为属性传入 JDBCTemplate 对象当中,最后用 JDBCTemplate 对象操作数据库。

一、pom 文件所需依赖

复制代码
\<dependency\>
\<!--jar包依赖--\>
\<groupId\>org.springframework\</groupId\>
\<artifactId\>spring-jdbc\</artifactId\>
\<version\>6.0.2\</version\>
\</dependency\>
\<dependency\>
\<!--MySQL驱动--\>
\<groupId\>mysql\</groupId\>
\<artifactId\>mysql-connector-java\</artifactId\>
\<version\>8.0.30\</version\>
\</dependency\>
\<dependency\>
\<!--数据源工具--\>
\<groupId\>com.alibaba\</groupId\>
\<artifactId\>druid\</artifactId\>
\<version\>1.0.31\</version\>
\</dependency\>

二、spring-config.xml 文件配置

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

    <!--扫描组件-->
    <context:component-scan base-package="com.mysql.conn"></context:component-scan>
    <!--引入外部文件-->
    <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
    <!--使用druid工具配置数据源-->
    <bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="url" value="${jdbc.url}"></property>
        <property name="driverClassName" value="${jdbc.driver}"></property>
        <property name="username" value="${jdbc.user}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>
    <!--将数据源作为属性传入JDBCTemplate对象-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="druidDataSource"></property>
    </bean>
</beans>

三、java 代码

java 复制代码
package com.mysql.conn;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;

//使用spring整合junit5进行测试
@SpringJUnitConfig(locations = "classpath:bean-jdbc.xml")
public class TestUpdate {
    @Autowired
    public JdbcTemplate jdbcTemplate;
    @Test
    public void testUpdate() {        
        String sql ="insert into user values(?,?,?)";
        int rows = jdbcTemplate.update(sql,11,"lucy","30");
        System.out.println(rows);
    }
}

四、常用 sql 语句

(一)增加

java 复制代码
String sql ="insert into user values(?,?,?)";
Object[] x={11,"lucy","30"};
int rows = jdbcTemplate.update(sql,x);
System.out.println(rows);

(二)删除

java 复制代码
String sql ="delete from user where id = ? ";
int rows = jdbcTemplate.update(sql,10);
System.out.println(rows);

(三)更改

java 复制代码
String sql ="update user set account=?,password=? where id=?";
int rows = jdbcTemplate.update(sql,"James",123,8);
System.out.println(rows);

(四)查询

1、查询单个对象

① 创建对象类

java 复制代码
package com.mysql.conn;

public class User {
    private int id;
    private String account;
    private String password;

    //生成set方法,这一步很关键
    public void setId(int id) {
        this.id = id;
    }
    public void setAccount(String account) {
        this.account = account;
    }
    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", account='" + account + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

② 测试类

java 复制代码
package com.mysql.conn;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;

@SpringJUnitConfig(locations = "classpath:bean-jdbc.xml")
public class TestUpdate {
    @Autowired
    public JdbcTemplate jdbcTemplate;
    @Test
    public void testUpdate() {
        String sql ="select * from user where id = ?";
        //第一种写法
        User user1 = jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<>(User.class),1);
        System.out.println(user1);
        //第二种写法
        User user2 = jdbcTemplate.queryForObject(sql,
               (rs, rowNum) -> {
                    User user = new User();
                    user.setId(rs.getInt("id"));
                    user.setAccount(rs.getString("account"));
                    user.setPassword(rs.getString("password"));
                    return user;
                }, 2);
        System.out.println(user2);
    }
}

2、查询 list 集合

① 目标类不变

② 测试类

java 复制代码
package com.mysql.conn;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;

import java.util.List;

@SpringJUnitConfig(locations = "classpath:bean-jdbc.xml")
public class TestUpdate {
    @Autowired
    public JdbcTemplate jdbcTemplate;
    @Test
    public void testUpdate() {
        String sql ="select * from user";
        List<User> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));
        System.out.println(list);       
    }
}

3、查询单个值

测试类(查询多少行)

java 复制代码
package com.mysql.conn;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;

@SpringJUnitConfig(locations = "classpath:bean-jdbc.xml")
public class TestUpdate {
    @Autowired
    public JdbcTemplate jdbcTemplate;
    @Test
    public void testUpdate() {
        String sql ="select count(account) from user";
        Integer i = jdbcTemplate.queryForObject(sql, Integer.class);
        System.out.println(i);       
    }
}
相关推荐
m0_623955661 小时前
Oracle使用SQL一次性向表中插入多行数据
数据库·sql·oracle
Exclusive_Cat1 小时前
SpringMVC参数接收与数据返回详解
spring·mvc
阿蒙Amon2 小时前
C#读写文件:多种方式详解
开发语言·数据库·c#
东窗西篱梦2 小时前
Redis集群部署指南:高可用与分布式实践
数据库·redis·分布式
ChinaRainbowSea3 小时前
补充:问题:CORS ,前后端访问跨域问题
java·spring boot·后端·spring
就是有点傻3 小时前
C#如何实现中英文快速切换
数据库·c#
jnrjian3 小时前
Oracle RAC环境 加错数据文件 的修复 归档非归档都没问题
sql·oracle
1024小神3 小时前
hono框架绑定cloudflare的d1数据库操作步骤
数据库
hqxstudying5 小时前
java依赖注入方法
java·spring·log4j·ioc·依赖
KellenKellenHao5 小时前
MySQL数据库主从复制
数据库·mysql