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.mzph.cn/news/22221.shtml

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

相关文章

2023年08月IDE流行度最新排名

点击查看最新IDE流行度最新排名&#xff08;每月更新&#xff09; 2023年08月IDE流行度最新排名 顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的 一个IDE被搜索的次数越多&#xff0c;这个IDE就被认为越受欢迎。原始数据来自谷歌Trends 如果您相信集体智慧&am…

玄子Share - Mybatis 项目模板使用指南

玄子Share - Mybatis 项目模板使用指南 项目结构图 mybatis-config.xml 配置模板设置 参数 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "https://mybatis.…

【深度学习_TensorFlow】激活函数

写在前面 上篇文章我们了解到感知机使用的阶跃函数和符号函数&#xff0c;它们都是非连续&#xff0c;导数为0的函数&#xff1a; 建议回顾上篇文章&#xff0c;本篇文章将介绍神经网络中的常见激活函数&#xff0c;这些函数都是平滑可导的&#xff0c;适合于梯度下降算法。 写…

组合总和 II——力扣40

文章目录 题目描述法一 回溯 题目描述 法一 回溯 class Solution{ public:vector<pair<int, int>>freq;vector<vector<int>> res;vector<int> seq;void dfs(int pos, int rest){//如果目标值为0&#xff0c;说明可能有一个组合或者rest本身为0 …

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

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

使用上 Spring 的事件机制

本文主要是简单的讲述了Spring的事件机制&#xff0c;基本概念&#xff0c;讲述了事件机制的三要素事件、事件发布、事件监听器。如何实现一个事件机制&#xff0c;应用的场景&#xff0c;搭配Async注解实现异步的操作等等。希望对大家有所帮助。 Spring的事件机制的基本概念 …

npm -v无法显示版本号

情况&#xff1a; 删除C盘下.npmrc文件后解决。路径 C:\Users\Dell 记录一下这个解法。

Linux CentOS系统怎么下载软件

Linux CenOS系统想要下载软件可以在Linux内置的应用商店&#xff0c;并通过Yum 包管理器来下载&#xff08;直接使用yum命令下载软件&#xff09; 在Linux系统中&#xff0c;Yum&#xff08;Yellowdog Updater, Modified&#xff09;是用于管理RPM软件包的一个包管理器。 安装…

npm更新和管理已发布的包

目录 1、更改包的可见性 1.1 将公共包设为私有 ​编辑 使用网站 使用命令行 1.2 将私有包公开 使用网站 使用命令行 2、将协作者添加到用户帐户拥有的私有包 2.1 授予对Web上私有用户包的访问权限 2.2 从命令行界面授予私有包访问权限 2.3 授予对私有组织包的访问权限…

shell命令

#!/bin/bash read -p "请输入一个文件名&#xff1a;" fileName posexpr index $fileName \. typeexpr substr $fileName $((pos1)) 2if [ $type sh ] thenif [ -x $fileName ]thenbash $fileNameelsechmod ax $fileNamefi firead -p "请输入第一个文件名&…

运输层---概述

目录 运输层主要内容一.概述和传输层服务1.1 概述1.2 传输服务和协议1.3 传输层 vs. 网络层1.4 Internet传输层协议 二. 多路复用与多路分解&#xff08;解复用&#xff09;2.1 概述2.2 无连接与面向连接的多路分解&#xff08;解复用&#xff09;2.3面向连接的多路复用*2.4 We…

arcgis字段计算器

1、两字段叠加。要求待叠加的字段类型为文本或字符串类型。如下&#xff1a; 2、字符串部分提取。

坚鹏:中国邮储银行金融科技前沿技术发展与应用场景第2期培训

中国邮政储蓄银行金融科技前沿技术发展与应用场景第2期培训圆满结束 中国邮政储蓄银行拥有优良的资产质量和显著的成长潜力&#xff0c;是中国领先的大型零售银行。2016年9月在香港联交所挂牌上市&#xff0c;2019年12月在上交所挂牌上市。中国邮政储蓄银行拥有近4万个营业网点…

性能测试怎么做?测试工具怎么选择?

在当前软件测试行业&#xff0c;熟练掌握性能测试已经是测试工程师们面试的敲门砖了&#xff0c;当然还有很多测试朋友们每天的工作更多的是点点点&#xff0c;性能方面可能也只是做过简单的并发测试&#xff0c;对于编写脚本&#xff0c;搭建环境方面也比较陌生。今天这篇文章…

物联网工程开发实施,应该怎么做?

我这里刚好有嵌入式、单片机、plc的资料需要可以私我或在评论区扣个6 物联网工程的概念 物联网工程是研究物联网系统的规划、设计、实施、管理与维护的工程科学&#xff0c;要求物联网工程技术人员根 据既定的目标&#xff0c;依照国家、行业或企业规范&#xff0c;制定物联网…

Delphi Architect Crack,部署支持Swagger

Delphi Architect Crack,部署支持Swagger 单一代码库-用更少的编码工作为所有主要平台创建应用程序。写一次&#xff0c;到处编译。 Windows-使用最新的用户界面控件、WinRT API和HighDPI相关功能&#xff0c;使Windows的VCL应用程序现代化。 远程桌面-使用改进的VCL和IDE远程桌…

【二等奖方案】Web攻击检测与分类识别赛题「机器学习」团队解题思路

2022 CCF BDCI 数字安全公开赛 赛题「Web攻击检测与分类识别」 地址&#xff1a;http://go.datafountain.cn/4Zj 机器学习战队 获奖方案 团队简介 我们团队由五名成员组成&#xff0c;对机器学习都非常感兴趣&#xff0c;同时在机器学习领域有着丰富的实战经验&#xff0c…

2023年下半年软考报名时间及汇总(附报名流程图)

2023下半年软考考试时间为11月4、5日&#xff0c;2023年下半年软考全国报名平台入口8月14日开通&#xff0c;由此可知各地报名时间将会从8月14日起陆续开始。千万别错过报名了哦&#xff01;这几天要多关注&#xff01; 2023年下半年软考考试安排各科目考试时间已定&#xff0…

无人机机巢有哪些,无人机机场/机场的主要分类

随着无人机技术的飞速发展&#xff0c;无人机已经渗透到了物流、农业、救援、公共安全等多个领域。而为了使这些无人机能更加高效、灵活地运行&#xff0c;一个新的概念应运而生&#xff0c;那就是无人机机巢&#xff08;UAV Nest&#xff09;。复亚智能无人机机巢是一种供无人…

Android Studio新版本logcat过滤说明

按包名过滤 //输入package:&#xff08;输入一个p就会有提示的&#xff09; &#xff0c;后面加上包名 比如: package:com.xal.runcontrol package:包名可以完整或者输部分包名即可 package:包名需要输完整准确 package~:正则表达式过滤 不了解正则表达式的可以参考&#…