Spring JdbcTemplate

一、簡介

Spring 框架對 JDBC 進行封裝,使用 JdbcTemplate 方便實現對數據庫操作。它是 spring 框架中提供的一個對象,是對原始 Jdbc API 對象的簡單封裝。spring 框架為我們提供了很多的操作模板類。

  • 針對操作關系型數據:

    • jdbcTemplate
    • HibernateTemplate
  • 針對操作非關系型數據庫:

    • RedisTemplate
  • 針對操作消息隊列:

    • JmsTemplate

二、應用

導入相關依賴

<dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.1.14.RELEASE</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>5.1.3.RELEASE</version>
</dependency>

創建數據庫表

DROP TABLE IF EXISTS `account`;
CREATE TABLE `account`  (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`money` float NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

1. JdbcTemplate 的簡單使用

public static void main(String[] args) {//準備數據源DriverManagerDataSource ds = new DriverManagerDataSource();ds.setDriverClassName("com.mysql.jdbc.Driver");ds.setUrl("jdbc:mysql://localhost:3306/test");ds.setUsername("root");ds.setPassword("123456");//1. 創建jdbcTemplate對象JdbcTemplate jdbcTemplate = new JdbcTemplate();jdbcTemplate.setDataSource(ds);//2. 執行操作jdbcTemplate.execute("insert into account(name, money) values('ccc',1000)");
}

2. JdbcTemplate 操作數據庫

1)準備工作

導入C3P0依賴

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.49</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>5.3.29</version>
</dependency>
<dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.9.5.1</version>
</dependency>

創建mysql.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"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--配置持久層--><bean id="accountDao" class="com.shiftycat.mysql.dao.impl.AccountDaoImpl"><property name="jdbcTemplate" ref="jdbcTemplate"></property></bean><!--配置jdbcTemplate--><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"></property></bean><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass" value="com.mysql.jdbc.Driver"></property><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"></property><property name="user" value="root"></property><property name="password" value="shiftlesscat"></property></bean></beans>

創建PoJo類

package com.shiftycat.mysql.pojo;public class Account {private int id;private String name;private float money;public Account() {}public Account(int id, String name, float money) {this.id = id;this.name = name;this.money = money;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public float getMoney() {return money;}public void setMoney(float money) {this.money = money;}@Overridepublic String toString() {return "Account{" +"id=" + id +", name='" + name + '\'' +", money=" + money +'}';}
}

創建持久層

/*** 賬戶持久層接口*/
public interface IAccountDao {/*** 根據id查詢賬戶*/Account findAccountById(Integer accountId);/*** 根據名稱查詢*/Account findAccountByName(String accountName);/*** 更新賬戶*/void updateAccount(Account account);
}
/*** 賬戶的持久層實現類*/
public class AccountDaoImpl implements IAccountDao {private JdbcTemplate jdbcTemplate;public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}
}
2) 添加
public void addAccount(Account account) {//1 創建sql語句String sql = "insert into account(id, name, money) values(?,?,?)";//2 調用方法實現Object[] args = {account.getId(), account.getName(), account.getMoney()};int update = jdbcTemplate.update(sql, args);System.out.println(update);
}
3)修改
public void updateAccount(Account account) {//1 創建sql語句String sql = "update account set username=?, ustatus=? where user_id=?";//2 調用方法實現Object[] args = {account.getId(), account.getName(), account.getMoney()};int update = jdbcTemplate.update(sql, args);System.out.println(update);
}
4)刪除
public void deleteAccount(String id) {//1 創建sql語句String sql = "delete from account where id=?";//2 調用方法實現int update = jdbcTemplate.update(sql, id);System.out.println(update);
}
5) 查詢返回某個值
public int selectCount() {//1 創建sql語句String sql = "select count(*) from account;";//2 調用方法實現Integer count = jdbcTemplate.queryForObject(sql, Integer.class);return count;
}
6)查詢返回對象
public Account findAccountInfo(String id) {//1 創建sql語句String sql = "select * from account where id=?;";//2 調用方法實現Account account = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Account>(Account.class), id);return account;
}
7)查詢返回集合
public List<Account> findAllAccount() {//1 創建sql語句String sql = "select * from account";//2 調用方法實現List<Account> accountList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Account>(Account.class));return accountList;
}
8)批量操作-添加
public void batchAddAccount(List<Object[]> batchArgs) {//1 創建sql語句String sql = "insert into account(id, name, money) values(?,?,?)";//2 調用方法實現int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);System.out.println(Arrays.toString(ints));
}
9)批量操作-修改
public void batchUpdateAccount(List<Object[]> batchArgs) {//1 創建sql語句String sql = "update account set name=?, account=? where id=?";//2 調用方法實現int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);System.out.println(ints);
}
10)批量操作-刪除
public void batchDeleteAccount(List<Object[]> batchArgs) {//1 創建sql語句String sql = "delete from account where id=?";//2 調用方法實現int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);System.out.println(ints);
}

前丨塵憶·夢-Spring——JdbcTemplate:https://blog.csdn.net/qq_36879493/article/details/121915176

Xiu Yan-Spring 從入門到精通系列 11 —— Spring 中的 JdbcTemplate: https://blog.csdn.net/qq_36879493/article/details/121915176

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/213780.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/213780.shtml
英文地址,請注明出處:http://en.pswp.cn/news/213780.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

A* 算法簡介

一、A* 算法簡介A* algorithm is a popular choice for graph search. Breadth First Search is the simplest of the graph search algorithms. Graph search algorithms, including A*, take a “graph” as input. A* algorithm is a modification of Dijkstra’s Algorithm…

華為OD機試 - 部門人力分配(Java JS Python C)

題目描述 部門在進行需求開發時需要進行人力安排。 當前部門需要完成 N 個需求,需求用 requirements 表述,requirements[i] 表示第 i 個需求的工作量大小,單位:人月。 這部分需求需要在 M 個月內完成開發,進行人力安排后每個月人力時固定的。 目前要求每個月最多有2個…

在k8s中部署nfs-client-provisioner

1、部署過程 1.1、環境依賴 在部署nfs-client-provisioner之前&#xff0c;需要先部署nfs服務。 因為&#xff0c;nfs-client-provisioner創建的pv都是要在nfs服務器中搭建的。 本示例中的nfs server的地址如下&#xff1a; [rootnode1 /]# showmount -e Export list for …

pinia 持久化插件使用

官方文檔 本文主要介紹 vue3組合式 api 使用持久化插件的寫法。 選項式 寫法官方已給出 安裝依賴 pnpm i pinia-plugin-persistedstate插件的使用 import { createPinia } from pinia import piniaPluginPersistedstate from pinia-plugin-persistedstateconst pinia creat…

JavaMap工具類(MapUtils)

1、Object轉Map 2、將 map 中的 value 為null的的元素轉成空字符串"" 3、map轉Object 4、MAP 判空 5、Map 排序 按key值長度進行排序 6、兩個MAP對比&#xff0c;在oldMap中移除remMap中所有的key值 備注&#xff1a;排序的話(TreeMap)是可以直接實現簡單排序的…

VR轉接線方案/VR Link串流數據線方案/VR眼鏡PD快充方案

虛擬現實技術(英文名稱&#xff1a;Virtual Reality&#xff0c;縮寫為VR)&#xff0c;又稱虛擬實境或靈境技術&#xff0c;是20世紀發展起來的一項全新的實用技術。虛擬現實技術囊括計算機、電子信息、仿真技術&#xff0c;其基本實現方式是以計算機技術為主&#xff0c;利用并…

Java:commons-lang3中的StringUtils.strip實現移除字符串首尾字符

依賴 <dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version> </dependency>示例 // 包名 import org.apache.commons.lang3.StringUtils;// 處理字符串&…

kafka支持外網訪問

kafka支持外網訪問 1.kafka正常部署之后如果不修改&#xff0c;外網是無法訪問的&#xff0c;具體如下&#xff08;這里是單節點&#xff09; 2.這個時候需要修改kafka的config中的server.properties中的 listeners 修改為0.0.0.0 監控所有網卡&#xff0c;advertised.listene…

管理空閑存儲空間

位示圖是操作系統中一種管理空閑存儲空間的方法。管理空閑除使用位示圖法還可用&#xff1a;空閑區表法&#xff0c;空閑鏈表法&#xff0c;成組鏈接法 1.空閑區表法 空閑表法屬于連續分配方法。它與內存管理中的動態分區分配方法雷同。 將外存空間上一個連續未分配區域稱為“…

[三次反轉法]循環移動數組元素

循環移動 題目描述 給定一組整數&#xff0c;要求利用數組把這組數保存起來&#xff0c;然后實現對數組的循環移動。假定供有n個整數&#xff0c;則要使前面各數順序向后移m個位置&#xff0c;并使最后m個數變為最前面的m個數(m<n)。 注意&#xff0c;不要用先輸出后m個數…

口袋參謀:如何對訂單實現一鍵批量插旗?

?在淘寶店鋪運營中&#xff0c;對寶貝訂單標注插旗&#xff0c;也算是常態了&#xff0c;至少90%的商家都不陌生&#xff0c;剩下的10%是剛入行的新手&#xff0c;正如我剛入行一樣。 01 首先我們要了解什么是插旗&#xff1f; 其實就是淘寶店鋪利用各種顏色的旗子來代表訂單…

A-23 P離子交換樹脂:高效去除無機有機污染物的新選擇

在當今水處理行業中&#xff0c;高效、環保的離子交換樹脂備受關注。本文將為您介紹一款具有卓越性能的堿性季胺基陰離子交換樹脂——Tulsion A-23 P。通過分析其特性和應用&#xff0c;展示其在水處理領域的優勢。 一、Tulsion A-23 P離子交換樹脂的特性 物理化學穩定性&#…

Vue生命周期函數執行順序(使用注意事項)

文章目錄 beforeCreatecreatedbeforeMountmountedbeforeUpdateupdatedbeforeDestroydestroyed Vue.js 是一個基于 MVVM 模式的前端框架&#xff0c;它的核心是一個響應式的數據綁定系統。在 Vue.js 中&#xff0c;組件是一個可復用的 Vue 實例&#xff0c;它擁有自己的生命周期…

input聚焦,失去焦點的那些事

需求&#xff1a; 1&#xff1a;搜索輸入時顯示清空按鈕和搜索按鈕&#xff1b; 2&#xff1a;點擊搜索按鈕失去焦點&#xff0c;并查詢&#xff1b; 3&#xff1a;點擊清空按鈕后重新聚焦&#xff1b; 需要解決的問題&#xff1a; 1&#xff1a;失去焦點需要別的處理的話要加…

Linux命令——nc

Linux命令——nc 文章目錄 Linux命令——nc例子客戶端/服務端模型數據傳輸與服務端交互端口掃描使用代理發送文件聊天工具一次性 Web Server文件夾傳輸遠程克隆磁盤shell反向 shell 參考 netcat&#xff0c;簡寫為 nc&#xff0c;是 unix 系統下一個強大的命令行網絡通信工具&a…

JS手寫Promise.all方法

測試例子 var f11 Promise.resolve("111");var f22 Promise.resolve("222");var f33 Promise.resolve("333");// var f33 Promise.reject("333");1、用原生 Promise 實現 邏輯說明&#xff1a;接收一個由多個promise方法組成的數組…

uniapp開發小程序-pc端小程序下載后端接口的二進制流文件

fileName包含文件名后綴名&#xff0c;比如test.png這種格式 api.DownloadTmtFile后端接口返回的是文件的二進制流 值得注意的是&#xff0c;微信開發者工具中是測試不了wx.saveFileToDisk的&#xff0c;需要真機或者體驗版測試 handleDownload(fileName) {if (!fileName) retu…

mysql表的字段建議加上NOT NULL約束

mysql的列加上NOT NULL約束&#xff0c;這是一個好的實踐&#xff08;但不是一個強制要求&#xff09;&#xff0c;因為它能帶來一些好處&#xff0c;例如&#xff1a; 設置為NOT NULL&#xff0c;可以確保該列沒有NULL值&#xff0c;對該列的數據的規范性進行約束。加上NOT N…

大文件傳輸軟件和傳統軟件的優缺點

在當前信息時代&#xff0c;文件和數據的傳輸已成為我們工作和生活中不可或缺的一環。無論是向同事發送報告還是與朋友分享電影&#xff0c;我們都需要依賴軟件完成這些操作。然而&#xff0c;隨著文件和數據容量的增大&#xff0c;傳統的文件傳輸軟件如FTP、HTTP、SMB、NFS等已…

pycharm中py文件設置參數

在py文件中右鍵 直接對應復制進去即可