Spring:JDBCTemplate

JDBCTemplate

  • 概述

在这里插入图片描述

概述

JDBC(Java DataBase Connectivity,Java 数据库连接), 一 种用于执行 SQL 语句的 Java API(Application Programming Interface , 应用程序设计接口 ),可以为多种关系数据库提供统一访问,由一组用 Java 语言编写的类和接口组成。

JDBCTemplate ,是一个 JDBC 的模板,Spring 封装了 JDBC 常用的操作,简化了 JDBC API 的使用和开发人员的工作,提供了便捷、安全和高效的访问数据库的方式。

简单示例:
首先在 pom.xml 文件中添加以下配置:

<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.25</version>
</dependency>

然后创建一个带有 id 和 name 属性的 JDBC 表:
在这里插入图片描述

再根据 JDBC 表定义一个与之相映射的 JDBC 类:

package cn.edu.springdemo.jdbc;public class JDBC {public int id;public String name;public JDBC() {super();}public JDBC(int id, String name) {this.id = id;this.name = name;}public int getId() {return id;}public String getName() {return name;}public void setId(int id) {this.id = id;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "JDBC{" +"id=" + id +", name='" + name + '\'' +'}';}
}

接着,定义一个接口 JDBCDao ,声明一系列常用访问数据库的方法:

package cn.edu.springdemo.jdbc;import java.util.List;public interface JDBCDao {public void add(JDBC jdbc);public void delete(int id);public void update(JDBC jdbc);public JDBC select(int id);public List<JDBC> selectAll();
}

再创建该接口的实现类 JDBCDaoImpl :

package cn.edu.springdemo.jdbc;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.stereotype.Repository;import java.util.List;@Repository("JDBCDao")
public class JDBCDaoImpl implements JDBCDao {@Autowiredprivate NamedParameterJdbcTemplate namedParameterJdbcTemplate;@Autowiredprivate JdbcTemplate jdbcTemplate;//增添public void add(JDBC jdbc){String sql = "INSERT INTO `jdbc` (`name`) VALUES (:name);";SqlParameterSource sqlParameterSource = new BeanPropertySqlParameterSource(jdbc);namedParameterJdbcTemplate.update(sql,sqlParameterSource);}/***     增添或者使用如下方法*     public void add(JDBC jdbc){*         String sql = "INSERT INTO `jdbc` (`name`) VALUES (?);";*         Object[] args = {jdbc.getName()};*         jdbcTemplate.update(sql,args);*     }*///删除public void delete(int id){String sql = "DELETE FROM `jdbc` WHERE `id`=?;";jdbcTemplate.update(sql,id);}//修改public void update(JDBC jdbc){String sql = "UPDATE `jdbc` SET `name`=? WHERE `id`=?;";Object[] args = {jdbc.getName(),jdbc.getId()};jdbcTemplate.update(sql,args);}//id查询public JDBC select(int id){String sql = "SELECT `id`,`name` FROM `jdbc` WHERE `id`=?;";RowMapper<JDBC> list = new BeanPropertyRowMapper<>(JDBC.class);return jdbcTemplate.queryForObject(sql,list,id);}//查询public List<JDBC> selectAll(){String sql = "SELECT `id`,`name` FROM `jdbc`;";RowMapper<JDBC> rowMapper = new BeanPropertyRowMapper<>(JDBC.class);List<JDBC> list = jdbcTemplate.query(sql,rowMapper);return list;}
}

另外在 resources 目录下创建 jdbc.properties ,添加以下内容:

jdbc.driverClass=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/student?useSSL=false&serverTimezone=UTC
jdbc.user=root
jdbc.password=0123
acquireIncrement=5
initialPoolSize=10
minPoolSize=5
maxPoolSize=100
maxStatements=2
maxStatementsPerConnection=5

xml配置:

<?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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsd"><context:component-scan base-package="cn.edu.springdemo.jdbc" /><!-- 在 Bean 的外部属性文件的使用中有所提及 --><!-- 使用context命名空间,通过 location 属性指定 properties 文件位置 --><context:property-placeholder location="classpath:jdbc.properties" /><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><!-- 连接MySQL数据库的基本信息的配置 --><!-- 驱动程序类名:com.mysql.jdbc.Driver --><property name="driverClass" value="${jdbc.driverClass}" /><!-- JDBC URL:jdbc:mysql://<host>:<port>/<database_name> --><property name="jdbcUrl" value="${jdbc.url}" /><!-- 数据库用户名 --><property name="user" value="${jdbc.user}" /><!-- 数据库用户密码 --><property name="password" value="${jdbc.password}" /><!-- 若数据库中的连接数量不足时,向数据库申请的连接数量 --><property name="acquireIncrement" value="${acquireIncrement}" /><!-- 初始化数据库连接池时连接的数量 --><property name="initialPoolSize" value="${initialPoolSize}" /><!-- 数据库连接池最小的数据库连接数 --><property name="minPoolSize" value="${minPoolSize}" /><!-- 数据库连接池最大的数据库连接数 --><property name="maxPoolSize" value="${maxPoolSize}" /><!-- C3P0数据库连接池可以维护的Statement数量 --><property name="maxStatements" value="${maxStatements}" /><!-- 每个连接同时可以使用Statement的数量 --><property name="maxStatementsPerConnection" value="${maxStatementsPerConnection}" /></bean><!-- 配置jdbcTemplate,注入dataSource --><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource" /></bean><!-- 配置namedParameterJdbcTemplate,注入dataSource --><bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate"><constructor-arg type="javax.sql.DataSource" ref="dataSource"/></bean>
</beans>

最后测试结果:

package cn.edu.springdemo.jdbc;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class JDBCTest {public static void main(String[] args) {ApplicationContext applicationContext = new ClassPathXmlApplicationContext("jdbc.xml");JDBCDao jdbcDao = (JDBCDao) applicationContext.getBean("JDBCDao");System.out.println("第一次查询:" + jdbcDao.selectAll());JDBC jdbc = new JDBC();jdbc.setName("赵子龙");jdbcDao.add(jdbc); //新增jdbc.setId(10106);jdbc.setName("赵云");jdbcDao.update(jdbc); //修改System.out.println("第二次查询:" + jdbcDao.selectAll());System.out.println("id查询:" + jdbcDao.select(10101));jdbcDao.delete(10104); //删除}
}

结果如图:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/52511.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数学知识(二)

一、裴蜀定理 对于任意整数a,b&#xff0c;一定存在非零整数x,y&#xff0c;使得 ax by gcd(a,b) #include<iostream> #include<algorithm>using namespace std;int exgcd(int a,int b,int &x,int &y) {if(!b){x 1,y 0;return a;}int d exgcd(b,a %…

大数据Flink(五十五):Flink架构体系

文章目录 Flink架构体系 一、 Flink中的重要角色 二、Flink数据流编程模型 三、Libraries支持

落地数字化管理,提升企业市场竞争力

数字化企业管理方案是一种利用数字技术和信息系统来提升企业管理效率和运营效果的策略。 潜在的数字化企业管理方案 1、企业资源规划&#xff08;ERP&#xff09;系统&#xff1a;建立一个集成的ERP系统来统一管理企业的各项业务流程&#xff0c;包括采购、销售、库存管理、财…

Webpack开启本地服务器;HMR热模块替换;devServer配置;开发与生成环境的区分与配置

目录 1_开启本地服务器1.1_开启本地服务器原因1.2_webpack-dev-server 2_HMR热模块替换2.1_认识2.2_开启HMR2.3_框架的HMR 3_devServer配置3.1_host配置3.2_port、open、compress 4_开发与生成环境4.1_如何区分开发环境4.2_入口文件解析4.3_区分开发和生成环境配置 1_开启本地服…

【雕爷学编程】MicroPython动手做(31)——物联网之Easy IoT

1、物联网的诞生 美国计算机巨头微软(Microsoft)创办人、世界首富比尔盖茨&#xff0c;在1995年出版的《未来之路》一书中&#xff0c;提及“物物互联”。1998年麻省理工学院提出&#xff0c;当时被称作EPC系统的物联网构想。2005年11月&#xff0c;国际电信联盟发布《ITU互联网…

ip网络广播系统网络音频解码终端公共广播SV-7101

SV-7101V网络音频终端产品简介 网络广播终端SV-7101V&#xff0c;接收网络音频流&#xff0c;实时解码播放。本设备只有网络广播功能&#xff0c;是一款简单的网络广播终端。提供一路线路输出接功放或有源音箱。 产品特点 ■ 提供固件网络远程升级■ 标准RJ45网络接口&…

【数据结构】“单链表”的练习题

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

VS2017中Qt工程报错:无法解析的外部符号 __imp_CommandLineToArgvW,该符号在函数 WinMain 中被引用

工程报错:无法解析的外部符号 __imp_CommandLineToArgvW&#xff0c;该符号在函数 WinMain 中被引用 解决方法&#xff1a; 在输入的附加依赖项中增加 shell32.lib

删除这4个文件夹,流畅使用手机无忧

在现代社会中&#xff0c;手机已经成为我们生活中不可或缺的一部分。然而&#xff0c;随着使用时间的增长&#xff0c;我们可能会遇到手机卡顿和内存不足的问题&#xff0c;让我们感到十分困扰。手机卡顿不仅影响使用体验&#xff0c;还可能导致应用程序运行缓慢&#xff0c;甚…

使用mysql容器创建主从同步

1、主数据库设置 创建主数据库容器&#xff1a; docker run -d --restartalways --name mysql-master -p 3306:3306 -v /home/apps/mysql-master/conf:/etc/mysql/conf.d -v /home/apps/mysql-master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD123456 mysql:8.0.16 --lower…

JVM之垃圾回收器

1.如何判断对象可以回收 1.1 引用计数法 什么是引用计数器法 在对象中添加一个引用计数器&#xff0c;每当有一个地方引用它时&#xff0c;计数器值就加一&#xff1b;当引用失效时&#xff0c;计数器值就减一&#xff1b;任何时刻计数器为零的对象就是不可能再被使用的。 …

采用 SpringDoc、javadoc 无注解零入侵基于java注释

今天在gitee上学习到一个&#xff0c;个人觉得非常使用的功能。就是采用 SpringDoc、javadoc 无注解零入侵基于java注释&#xff0c;只需把注释写好 无需再写一大堆的文档注解了。 下面是源码的地址 RuoYi-Vue-Plus: 后台管理系统 重写RuoYi-Vue所有功能 集成 Sa-TokenMybati…