文章目录
1. 什么是JdbcTemplate
Spring 框架对 JDBC 进行了封装,使用 JDBCTemplate 方便实现对数据库操作。
实际项目中,使用Spring JdbcTemplate的机会并不多,大多数都是使用Mybatis 框架,因此只要简单了解即可。
2. 准备工作
2.1 引入相关jar包
需要引入如下包: spring-jdbc-5.2.6.RELEASE.jar
、spring-orm-5.2.6.RELEASE.jar
、spring-tx-5.2.6.RELEASE.jar
、druid-1.1.9.jar
、mysql-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));
}