Spring5-JdbcTemplate简要介绍

1. 什么是JdbcTemplate

Spring 框架对 JDBC 进行了封装,使用 JDBCTemplate 方便实现对数据库操作。

实际项目中,使用Spring JdbcTemplate的机会并不多,大多数都是使用Mybatis 框架,因此只要简单了解即可。

2. 准备工作

2.1 引入相关jar包

需要引入如下包: spring-jdbc-5.2.6.RELEASE.jarspring-orm-5.2.6.RELEASE.jarspring-tx-5.2.6.RELEASE.jardruid-1.1.9.jarmysql-connector-java-5.1.7-bin.jar

2.2 配置数据库连接池

<?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="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
        <property name="url" value="jdbc:mysql://localhost:3306/user_db"/>
        <property name="username" value="root"/>
        <property name="password" value="000420"/>
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    </bean>
</beans>

2.3 配置JdbcTemplate对象

<?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="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
        <property name="url" value="jdbc:mysql://localhost:3306/user_db"/>
        <property name="username" value="root"/>
        <property name="password" value="000420"/>
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    </bean>

    <!-- JdbcTemplate对象 -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <!-- 注入数据库连接池 -->
        <property name="dataSource" ref="dataSource"/>
    </bean>
</beans>

2.4 创建Service与Dao层

我们需要创建一个Service和Dao演示类,我们要在Service 类中注入Dao、Dao中注入 JdbcTemplate模板,这里使用注解方式实现。

因为我们需要使用注解,因此要在配置文件中开启组件扫描:

<?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">

    <!-- 组件扫描 -->
    <context:component-scan base-package="com.zju.spring5"></context:component-scan>

    <!-- 数据库连接池 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
        <property name="url" value="jdbc:mysql://localhost:3306/user_db"/>
        <property name="username" value="root"/>
        <property name="password" value="000420"/>
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    </bean>

    <!-- JdbcTemplate对象 -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <!-- 注入数据库连接池 -->
        <property name="dataSource" ref="dataSource"/>
    </bean>
</beans>

然后,创建 BookDao接口:

package com.zju.spring5.dao;

public interface BookDao {
}

再创建BookDaoImpl 实现类,这里通过@Autowired实现类型自动注入:

package com.zju.spring5.dao;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

@Repository
public class BookDaoImpl implements BookDao {

    // 注入JdbcTemplate
    @Autowired
    private JdbcTemplate jdbcTemplate;
}

之后,我们再创建一个 Service 类,自动注入Dao实现类:

package com.zju.spring5.service;

import com.zju.spring5.dao.BookDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class BookService {
    // 注入Dao
    @Autowired
    private BookDao bookDao;
}

2.5 创建对应的JavaBean

t_user 表的创建 sql:

CREATE TABLE t_book (
	`id` BIGINT(20) PRIMARY KEY,
	`name` VARCHAR(100) NOT NULL,
	`status` VARCHAR(50) NOT NULL
)

然后创建对应的JavaBean

package com.zju.spring5.javabean;

public class Book {
    private Integer id;
    private String name;
    private String status;
    public Book() {
    }
    public Book(Integer id, String name, String status) {
        this.id = id;
        this.name = name;
        this.status = status;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
}

3. 使用JdbcTemplate实现对数据库的操作

3.1 添加、修改、删除操作

添加、修改、删除操作都是调用JdbcTemplate 对象中的int update(String sql, Object... args) 方法:
该方法返回值为受影响的行数。

这里通过添加操作作为演示

public void add(Book book) {
   // 1. 创建sql 语句
    String sql = "insert into t_book values(?, ?, ?)";
    
    // 2. 调用方法实现,返回值为影响行数
    int update = jdbcTemplate.update(sql, book.getId(), book.getName(), book.getStatus());
}

3.2 查询操作

3.2.1 查询返回Scalar

使用方法 <T> T queryForObject(String sql, Class<T> clazz)

// 查询表记录数
@Override
public int selectCount() {
	String sql = "select count(*) from t_book";
	Integer count = jdbcTemplate.queryForObject(sql, Integer.class);
	return count;
}

3.2.2 查询返回JavaBean

使用方法 <T> T queryForObject(String sql, RowMapper<T> rowMapper, Object... args)

其中,RowMapper 是一个接口,可以返回不同类型的数据,使用这个接口的实现类完成数据的封装,Spring 已经帮我们完成了该接口的不同实现类,我们使用即可。

// 查询指定书籍信息
@Override
public Book selectBookInfo(String id) {
	String sql = "select * from t_book where id = ?";
	Book book = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Book>(Book.class), id);
	return Book;
}

3.2.3 查询返回集合

使用方法 <T> T query(String sql, RowMapper<T> rowMapper, Object... args)

// 查询所有书籍信息
@Override
public Book selectAllBookInfo() {
	String sql = "select * from t_book";
	List<Book> book = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Book>(Book.class));
	return Book;
}

3.3 批量操作

批量操作:操作表中的多条记录

使用 int[] batchUpdate(String sql, List<Object[]> batchArgs),其中第二个参数为一个 List集合,包含你要添加、修改、删除的多个记录数据。

这里以批量添加操作为例。

@Override
public void batchAddBook(List<Object[]> batchArgs) {
	String sql = "insert into t_book values(?, ?, ?)";
	int[] rets = jdbcTemplate.batchUpdate(sql, batchArgs);
	System.out.println(Arrays.toString(rets));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

铁头娃撞碎南墙

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

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

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

打赏作者

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

抵扣说明:

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

余额充值