目录
1、简介
2、开发步骤
2.1、导入坐标
2.2、创建表和类
2.3、创建JdbcTemplate对象
2.4、执行数据库操作
3、解耦
4、增删改查
⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章
⭐作者主页:@逐梦苍穹
⭐所属专栏:JavaEE、Spring
JdbcTemplate是Spring框架提供的一个核心类,用于简化在Java应用程序中使用JDBC(Java Database Connectivity)时的操作。JDBC是Java连接数据库的标准API,但使用纯JDBC编写数据库访问代码可能会显得繁琐和冗长。
它是spring框架中提供的一个对象,是对原始繁琐的Jdbc API对象的简单封装。spring框架为我们提供了很多的操作模板类。例如:操作关系型数据的JdbcTemplate和HibernateTemplate,操作nosql数据库的RedisTemplate,操作消息队列的JmsTemplate等等。
JdbcTemplate封装了与数据库的交互细节,提供了一组简单的方法,使得数据库操作更加简洁和高效。通过JdbcTemplate,你可以执行SQL查询、更新、批处理以及存储过程调用,而无需手动处理数据库连接的打开和关闭。
JdbcTemplate的一些主要特点包括:
使用JdbcTemplate可以有效地减少样板代码,让数据库操作更加简单和可维护。它是Spring框架中数据访问的重要组成部分,并被广泛应用于Java企业应用的开发中。
JdbcTemplate开发步骤:
① 导入spring-jdbc和spring-tx坐标
② 创建数据库表和实体
③ 创建JdbcTemplate对象
④ 执行数据库操作
导入spring-jdbc和spring-tx坐标
org.springframework
spring-jdbc
5.0.5.RELEASE
org.springframework
spring-tx
5.0.5.RELEASE
创建数据库表和实体
package com.xzl.domain;
/**
* @author 逐梦苍穹
* @date 2023/8/4 16:32
*/
public class Account {
private String name;
private double money;
@Override
public String toString() {
return "Account{" +
"name='" + name + '\'' +
", money=" + money +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
}
package com.xzl.test;
import com.alibaba.druid.pool.DruidDataSource;
import com.xzl.domain.Account;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
import java.util.List;
/**
* @author 逐梦苍穹
* @date 2023/8/4 16:35
*/
public class jdbcTemplateTest {
@Test
public void createJdbcTemplate(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
DataSource dataSource_druid = applicationContext.getBean("dataSource_druid", DataSource.class);
JdbcTemplate jdbcTemplate = new JdbcTemplate();
jdbcTemplate.setDataSource(dataSource_druid);
List accountList = jdbcTemplate.query("select * from jdbctemplate", new BeanPropertyRowMapper(Account.class));
System.out.println(accountList);
}
}
Spring产生JdbcTemplate对象
我们可以将JdbcTemplate的创建权交给Spring,将数据源DataSource的创建权也交给Spring,在Spring容器内部将数据源DataSource注入到JdbcTemplate模版对象中,配置如下:
这里有一个很容易犯的错误,就是name的值,有时候要出错。这里的name的值,比如name="abc",实际上Spring找的是一个setAbc方法。下面是错误写法:
原因是:
下面让Spring自动加载jdbc模板对象:
全部代码如下:
package com.xzl.test;
import com.xzl.domain.Account;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.sql.DataSource;
import java.util.List;
/**
* @author 逐梦苍穹
* @date 2023/8/4 16:35
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class jdbcTemplateTest {
@Autowired
@Qualifier(value = "jdbcTemplate")
private JdbcTemplate jdbcTemplate;
@Test
public void retrieve(){
List accounts = jdbcTemplate.query("select * from jdbctemplate",new BeanPropertyRowMapper(Account.class));
System.out.println("查询全部:");
for (Account account : accounts) {
System.out.println(account);
}
Account account = jdbcTemplate.queryForObject("select * from jdbctemplate where name=?", new BeanPropertyRowMapper(Account.class), "xzl");
System.out.println("查询单个:"+account);
Long aLong = jdbcTemplate.queryForObject("select count(*) from jdbctemplate", Long.class);
System.out.println("聚合查询->总数:"+aLong);
Long aLong1 = jdbcTemplate.queryForObject("select sum(money) from jdbctemplate", Long.class);
System.out.println("聚合查询->总和:"+aLong1);
}
@Test
public void update(){
jdbcTemplate.update("update jdbctemplate set money = ? where name=?;",1000,"tom");
}
@Test
public void delete(){
jdbcTemplate.update("delete from jdbctemplate where name=?","tom");
createJdbcTemplate();
}
@Test
public void create(){
int row = jdbcTemplate.update("insert into jdbctemplate values(?,?)", "tom", 5000);
System.out.println(row);
}
@Test
public void SpringCreateJdbcTemplate(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
JdbcTemplate jdbcTemplate = applicationContext.getBean("jdbcTemplate", JdbcTemplate.class);
List accountList = jdbcTemplate.query("select * from jdbctemplate", new BeanPropertyRowMapper(Account.class));
System.out.println(accountList);
}
@Test
public void createJdbcTemplate(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
DataSource dataSource_druid = applicationContext.getBean("dataSource_druid", DataSource.class);
JdbcTemplate jdbcTemplate = new JdbcTemplate();
jdbcTemplate.setDataSource(dataSource_druid);
List accountList = jdbcTemplate.query("select * from jdbctemplate", new BeanPropertyRowMapper(Account.class));
System.out.println(accountList);
}
}