Spring JdbcTemplate类

Spring 针对数据库开发提供了 JdbcTemplate 类,该类封装了 JDBC,支持对数据库的所有操作。

在 Spring 中,JDBC 的相关信息在配置文件中完成,其配置文件如下所示。

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

    <!-- 配置数据源 -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <!--数据库驱动-->
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <!--连接数据库的url-->
        <property name= "url" value="jdbc:mysql://localhost/xx" />
        <!--连接数据库的用户名-->
        <property name="username" value="root" />
        <!--连接数据库的密码-->
        <property name="password" value="root" />
    </bean>
    <!--配置JDBC模板-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <!--默认必须使用数据源-->
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!--配置注入类-->
    <bean id="xxx" class="xxx">
        <property name="jdbcTemplate" ref="jdbcTemplate"/>
    </bean>
    ...
</beans>

注:本节使用 MySQL 数据库,如果您使用的是其它数据库,需要对内容进行相应的修改。

上述代码中定义了 3 个 Bean,分别是 dataSource、jdbcTemplate 和需要注入类的 Bean。其中 dataSource 对应的是 DriverManagerDataSource 类,用于对数据源进行配置;jdbcTemplate 对应 JdbcTemplate 类,该类中定义了 JdbcTemplate 的相关配置(注入数据源即可使用)。

在 dataSource 中,定义了 4 个连接数据库的属性,如下表所示。

属性名说明
driverClassName所使用的驱动名称,对应驱动 JAR 包中的 Driver 类
url数据源所在地址
username访问数据库的用户名
password访问数据库的密码

在定义 JdbcTemplate 时,需要将 dataSource 注入到 JdbcTemplate 中。而在其他的类中要使用 JdbcTemplate,也需要将 JdbcTemplate 注入到使用类中(通常注入 dao 类中)

在 JdbcTemplate 类中,提供了大量的查询和更新数据库的方法,如 query()、update() 等,如下表所示。

方法说明
public int update(String sql)用于执行新增、修改、删除等语句
args 表示需要传入到 query 中的参数
public int update(String sql,Object... args)
public void execute(String sql)可以执行任意 SQL,一般用于执行 DDL 语句
action 表示执行完 SQL 语句后,要调用的函数
public T execute(String sql, PreparedStatementCallback action)
public T query(String sql, ResultSetExtractor rse)用于执行查询语句
以 ResultSetExtractor 作为参数的 query 方法返回值为 Object,使用查询结果需要对其进行强制转型
以 RowMapper 作为参数的 query 方法返回值为 List
public List query(String sql, RowMapper rse)

示例

下面通过实例演示使用 JdbcTemplate 类操作数据库,步骤如下:

  1. 创建 Spring 项目,并在 src 目录下创建 com.spring_learn 包。
  2. 在 com.spring_learn 包下创建 Student(实体类)、StudentService(接口)、StudentServiceImpl(实现类)、JdbcConfiguration(配置类)等。
  3. 使用单元测试运行 Spring 项目。

Student(实体类)代码如下

public class Student {
    int id;
    String name;
    int age;
// 省略set、get和toString
}

StudentService(接口)和StudentServiceImpl(实现类),为了方便,此处直接把JdbcTemplate注入到了Servers。

//接口
public interface StudentService {
    List<Student> getStudents();
}

//实现
@Service
public class StudentServiceImpl implements StudentService {

    @Autowired
    private JdbcTemplate springJdbcTemplate;

    @Override
    public List<Student> getStudents() {
        List<Student> lists = springJdbcTemplate.query("select * from student", new RowMapper<Student>() {
            @Override
            public Student mapRow(ResultSet resultSet, int i) throws SQLException {
                Student student = new Student();
                student.setId(resultSet.getInt("id"));
                student.setAge(resultSet.getInt("age"));
                student.setName(resultSet.getString("name"));
                return student;
            }
        });
        return lists;
    }
}

JdbcConfiguration(配置类)

@Configuration
public class JdbcConfiguration {
    @Bean
    public DriverManagerDataSource getDriverManagerDataSource(){
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/springtemplate?useSSL=false");
        dataSource.setUsername("root");
        dataSource.setPassword("root");
        return dataSource;
    }

    @Bean("springJdbcTemplate")
    public JdbcTemplate getJdbcTemplate(){
        JdbcTemplate jdbcTemplate = new JdbcTemplate();
        jdbcTemplate.setDataSource(getDriverManagerDataSource());
        return jdbcTemplate;
    }
}

单元测试类代码如下

@RunWith(SpringRunner.class)
@SpringBootTest
public class StudentServiceImplTest {
    @Autowired
    StudentService studentService;
    @Test
    public void getStudents() {
        System.out.println(studentService.getStudents());
    }
}

运行结果如下。

 关于JDBC深入还可以参考以下文章

Java中JDBC的使用详解_随笔记-CSDN博客_java jdbc

Spring JdbcTemplate中关于RowMapper的使用实例 - 简书

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

swadian2008

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值