JdbcTemplate

Myth丶恋晨 2024-03-23 18:18 143阅读 0赞

目录

1、简介

2、开发步骤

2.1、导入坐标

2.2、创建表和类

2.3、创建JdbcTemplate对象

2.4、执行数据库操作

3、解耦

4、增删改查


⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章
⭐作者主页:@逐梦苍穹
⭐所属专栏:JavaEE、Spring

1、简介

JdbcTemplate是Spring框架提供的一个核心类,用于简化在Java应用程序中使用JDBC(Java Database Connectivity)时的操作。JDBC是Java连接数据库的标准API,但使用纯JDBC编写数据库访问代码可能会显得繁琐和冗长。

它是spring框架中提供的一个对象,是对原始繁琐的Jdbc API对象的简单封装。spring框架为我们提供了很多的操作模板类。例如:操作关系型数据的JdbcTemplate和HibernateTemplate,操作nosql数据库的RedisTemplate,操作消息队列的JmsTemplate等等。

JdbcTemplate封装了与数据库的交互细节,提供了一组简单的方法,使得数据库操作更加简洁和高效。通过JdbcTemplate,你可以执行SQL查询、更新、批处理以及存储过程调用,而无需手动处理数据库连接的打开和关闭。

JdbcTemplate的一些主要特点包括:

  1. 简化的异常处理:JdbcTemplate会自动捕获和转换JDBC异常为Spring的DataAccessException,简化了异常处理过程。
  2. 参数化查询:JdbcTemplate支持参数化查询,可以避免SQL注入等安全问题。
  3. 结果集映射:可以将查询结果映射到Java对象或基本数据类型。
  4. 批处理操作:支持批量插入和更新,提高数据库操作效率。
  5. 错误码处理:提供错误码的解析,便于处理数据库返回的错误信息。

使用JdbcTemplate可以有效地减少样板代码,让数据库操作更加简单和可维护。它是Spring框架中数据访问的重要组成部分,并被广泛应用于Java企业应用的开发中。

2、开发步骤

JdbcTemplate开发步骤:

① 导入spring-jdbc和spring-tx坐标

② 创建数据库表和实体

③ 创建JdbcTemplate对象

④ 执行数据库操作

2.1、导入坐标

导入spring-jdbc和spring-tx坐标

  1. <!--导入spring的jdbc坐标-->
  2. <dependency>
  3. <groupId>org.springframework</groupId>
  4. <artifactId>spring-jdbc</artifactId>
  5. <version>5.0.5.RELEASE</version>
  6. </dependency>
  7. <!--导入spring的tx坐标-->
  8. <dependency>
  9. <groupId>org.springframework</groupId>
  10. <artifactId>spring-tx</artifactId>
  11. <version>5.0.5.RELEASE</version>
  12. </dependency>

2.2、创建表和类

创建数据库表和实体

43866f755fbf1ae0d6d717978641639b.png

  1. package com.xzl.domain;
  2. /**
  3. * @author 逐梦苍穹
  4. * @date 2023/8/4 16:32
  5. */
  6. public class Account {
  7. private String name;
  8. private double money;
  9. @Override
  10. public String toString() {
  11. return "Account{" +
  12. "name='" + name + '\'' +
  13. ", money=" + money +
  14. '}';
  15. }
  16. public String getName() {
  17. return name;
  18. }
  19. public void setName(String name) {
  20. this.name = name;
  21. }
  22. public double getMoney() {
  23. return money;
  24. }
  25. public void setMoney(double money) {
  26. this.money = money;
  27. }
  28. }

2.3、创建JdbcTemplate对象

7a82b1c77d06c16e67be9a7a495e8c5a.png

2.4、执行数据库操作

  1. package com.xzl.test;
  2. import com.alibaba.druid.pool.DruidDataSource;
  3. import com.xzl.domain.Account;
  4. import org.junit.Test;
  5. import org.springframework.context.ApplicationContext;
  6. import org.springframework.context.support.ClassPathXmlApplicationContext;
  7. import org.springframework.jdbc.core.BeanPropertyRowMapper;
  8. import org.springframework.jdbc.core.JdbcTemplate;
  9. import javax.sql.DataSource;
  10. import java.util.List;
  11. /**
  12. * @author 逐梦苍穹
  13. * @date 2023/8/4 16:35
  14. */
  15. public class jdbcTemplateTest {
  16. @Test
  17. public void createJdbcTemplate(){
  18. ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
  19. DataSource dataSource_druid = applicationContext.getBean("dataSource_druid", DataSource.class);
  20. JdbcTemplate jdbcTemplate = new JdbcTemplate();
  21. jdbcTemplate.setDataSource(dataSource_druid);
  22. List<Account> accountList = jdbcTemplate.query("select * from jdbctemplate", new BeanPropertyRowMapper<Account>(Account.class));
  23. System.out.println(accountList);
  24. }
  25. }

3、解耦

Spring产生JdbcTemplate对象

我们可以将JdbcTemplate的创建权交给Spring,将数据源DataSource的创建权也交给Spring,在Spring容器内部将数据源DataSource注入到JdbcTemplate模版对象中,配置如下:

77ffb9f5123b0279a44fd61e5398e86a.png

这里有一个很容易犯的错误,就是name的值,有时候要出错。这里的name的值,比如name=”abc”,实际上Spring找的是一个setAbc方法。下面是错误写法:

a10a395b64da8a67f2f741b957d7c790.png

原因是:

d8e7941ff15f3758f1f2e1d811bf014b.png

下面让Spring自动加载jdbc模板对象:

76e5210207329ad87ea0bd982e860c3d.png

4、增删改查

全部代码如下:

  1. package com.xzl.test;
  2. import com.xzl.domain.Account;
  3. import org.junit.Test;
  4. import org.junit.runner.RunWith;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.beans.factory.annotation.Qualifier;
  7. import org.springframework.context.ApplicationContext;
  8. import org.springframework.context.support.ClassPathXmlApplicationContext;
  9. import org.springframework.jdbc.core.BeanPropertyRowMapper;
  10. import org.springframework.jdbc.core.JdbcTemplate;
  11. import org.springframework.test.context.ContextConfiguration;
  12. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
  13. import javax.sql.DataSource;
  14. import java.util.List;
  15. /**
  16. * @author 逐梦苍穹
  17. * @date 2023/8/4 16:35
  18. */
  19. @RunWith(SpringJUnit4ClassRunner.class)
  20. @ContextConfiguration("classpath:applicationContext.xml")
  21. public class jdbcTemplateTest {
  22. @Autowired
  23. @Qualifier(value = "jdbcTemplate")
  24. private JdbcTemplate jdbcTemplate;
  25. @Test
  26. public void retrieve(){
  27. List<Account> accounts = jdbcTemplate.query("select * from jdbctemplate",new BeanPropertyRowMapper<Account>(Account.class));
  28. System.out.println("查询全部:");
  29. for (Account account : accounts) {
  30. System.out.println(account);
  31. }
  32. Account account = jdbcTemplate.queryForObject("select * from jdbctemplate where name=?", new BeanPropertyRowMapper<Account>(Account.class), "xzl");
  33. System.out.println("查询单个:"+account);
  34. Long aLong = jdbcTemplate.queryForObject("select count(*) from jdbctemplate", Long.class);
  35. System.out.println("聚合查询->总数:"+aLong);
  36. Long aLong1 = jdbcTemplate.queryForObject("select sum(money) from jdbctemplate", Long.class);
  37. System.out.println("聚合查询->总和:"+aLong1);
  38. }
  39. @Test
  40. public void update(){
  41. jdbcTemplate.update("update jdbctemplate set money = ? where name=?;",1000,"tom");
  42. }
  43. @Test
  44. public void delete(){
  45. jdbcTemplate.update("delete from jdbctemplate where name=?","tom");
  46. createJdbcTemplate();
  47. }
  48. @Test
  49. public void create(){
  50. int row = jdbcTemplate.update("insert into jdbctemplate values(?,?)", "tom", 5000);
  51. System.out.println(row);
  52. }
  53. @Test
  54. public void SpringCreateJdbcTemplate(){
  55. ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
  56. JdbcTemplate jdbcTemplate = applicationContext.getBean("jdbcTemplate", JdbcTemplate.class);
  57. List<Account> accountList = jdbcTemplate.query("select * from jdbctemplate", new BeanPropertyRowMapper<Account>(Account.class));
  58. System.out.println(accountList);
  59. }
  60. @Test
  61. public void createJdbcTemplate(){
  62. ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
  63. DataSource dataSource_druid = applicationContext.getBean("dataSource_druid", DataSource.class);
  64. JdbcTemplate jdbcTemplate = new JdbcTemplate();
  65. jdbcTemplate.setDataSource(dataSource_druid);
  66. List<Account> accountList = jdbcTemplate.query("select * from jdbctemplate", new BeanPropertyRowMapper<Account>(Account.class));
  67. System.out.println(accountList);
  68. }
  69. }

发表评论

表情:
评论列表 (有 0 条评论,143人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JdbcTemplate

    目录 1、简介 2、开发步骤 2.1、导入坐标 2.2、创建表和类 2.3、创建JdbcTemplate对象 2.4、执行数据库操作 3、解耦 4、增删改查

    相关 Jdbctemplate

    一、介绍 Jdbc是一个Java的一个接口(API),主要作用是连接Java语言和数据库。 常规的使用jdbc连接数据库的流程为:加载驱动-建立数据库连接-查询或操作

    相关 JdbcTemplate

    JdbcTemplate: 概述 ​ 为了使JDBC更加易于使用,Spring在JDBC API上定义了一个抽象层,以此建立一个JDBC存取框架。 作为Spring

    相关 JdbcTemplate

    JdbcTemplate > Spring为传统的jdbc API进行封装,简化持久层操作,虽然jdbcTemplate很灵活,但和ORM框架相比jdbcTemplate