如何使用 Spring 對資料庫進行 CURD?

2020-12-25 CSDN

作者 | 阿文,責編 | 郭芮

頭圖 | CSDN 下載自視覺中國

作為一名程式設計師,CURD(增刪改查)是一件必不可少的事情,甭管你是初級程式設計師還是高級程式設計師都會和資料庫打交道。那麼在Java中如何通過Spring 框架來對資料庫進行操作呢?本文將帶你一起來學習。

Spring框架針對資料庫提供了JdbcTemplate 類,JdbcTemplate 是Spring 數據抽象層的基礎,其他更高層次的抽象類都是構建在其基礎之上,JdbcTemplate 是Spring JDBC的核心類。JdbcTemplate 繼承自抽象類JdbcAccessor,同時實現了JdbcOperations 接口,JdbcTemplate定義在了JdbcTemplate類中從而可以使用增刪改查來對資料庫進行操作。JdbcTemplate 的直接父類是JdbcAccessor,它提供了一些訪問資料庫時所需要使用的公共屬性,包括DataSource以及SQLExceptionTranslator 等。前者用於獲取資料庫連接以及引入對資料庫連接的緩衝池以及分布式事務等支出。後者是對SQLException 進行轉譯工作。

首先,我來說下本次文檔所需要準備的工具,具體如下:

idea 社區版maven,idea 自帶的mysql 或Mariadb接下來,我們先簡單介紹下Spring JDBC 模塊,它主要包括core、dataSource、object、support四個包,分別提供的功能如下:

core 包括JDBC的核心功能,例如JdbcTemplate類、simpleJdbcInsert類、simpleJdbcCall 類以及NamedParameterJdbcTemplate類。dataSource 包括了訪問資料庫的實用工具類。object 以OOP的方式訪問資料庫,它允許執行查詢操作並將返回結果作為業務對象,可以在數據表和業務對象的屬性直接映射查詢關係。support 包括core 和object包的支持類,例如提供一些SQLException類。我們了解了這些模塊的功能,接來下我們看看怎麼去配置JDBC,下面是 JDBC的XML配置文件:

<?xml version="1.0" encoding="UTF-8"?><beansxmlns="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-4.3.xsd"><!--1配置數據源 --><beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><!--資料庫驅動 --><propertyname="driverClassName"value="com.mysql.jdbc.Driver" /><!--連接資料庫的ur1 --><propertyname="url"value="jdbc:mysql://localhost:3306/spring_db" /><!--連接資料庫的用戶名 --><propertyname="username"value="root" /><!--連接資料庫的密碼 --><propertyname="password"value="root" /></bean><!--2配置JDBC模板 --><beanid="jdbcTemplate"class="org.springframework.jdbc.core.JdbcTemplate"><!--默認必須使用數據源 --><propertyname="dataSource"ref="dataSource" /></bean></beans>

在上述xml 文件中的beans 中定義了兩個bean,分別是dataSource、jdbcTemplate。

其中dataSource的類是由org.springframework.jdbc.datasource.DriverManagerDataSource 提供,包含了4個屬性分別對應的是:

driverClassName,它是資料庫的驅動,值是com.mysql.jdbc.Driver;url 資料庫的訪問地址,如上所示,jdbc:mysql://localhost:3306/spring_db 中的localhost 為你的資料庫地址 3306 為資料庫的連接斷開,斜槓後面的spring_db 表示需要連接的資料庫名稱;username 資料庫的用戶名;password 資料庫的密碼;下面我們通過實例的方式來講解如何通過JDBC來對資料庫進行操作,我們需要進行以下準備工作。

首先,我們需要配置maven的pom.xml 下載所需要的jar包,包括spring-jdbc、mysql-connector-java:

<dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>4.3.6.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.19</version></dependency>

第二步,需要有一個可以反問的資料庫,比如我的資料庫設置密碼為root

mysqladmin -u root password root

第三步.創建一個spring_db 的表,並且需要授權用戶遠程訪問,如果是本地這一步可以不用做

MariaDB [(none)]> create database spring_db;Query OK, 1 row affected (0.000 sec)

第四步,在idea 工程中新建一個com.ssm.jdbc 的包,並在該包中創建一個JdbcTempTest的測試類,首先我們加載xml 配置,配置文件就是上面的xml配置文件,我們創建一個數據表為user_table,使用jdbctemp.execute(String s) 方法執行SQL語句。

@TestpublicvoidTestJdbcTemplate(){//加載配置 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("jdbc.xml");//獲取JdbcTemplate實例 JdbcTemplate jdbctemp = (JdbcTemplate) applicationContext.getBean("jdbcTemplate"); jdbctemp.execute("create table user_table(" +"id int primary key auto_increment," +"username varchar(80)," +"password varchar(40))"); }

我們執行該測試類,然後進入資料庫,我們可以看到該表已經被創建出來了:

MariaDB [(none)]> use spring_db;Reading table information for completion of table and column namesYou can turn off this feature toget a quicker startup with -ADatabase changedMariaDB [spring_db]> show tables;+---------------------+| Tables_in_spring_db |+---------------------+| user_table |+---------------------+1 row inset (0.000 sec)MariaDB [spring_db]>

下面,我們通過jdbc 來實現增刪改查操作,首先,我們要創建一個類,名字為User,這個User 類中包含了用戶的id、用戶名和密碼信息,並設置其set和get屬性:

package com.ssm.jdbc;publicclassUser{private Integer id;private String username;private String password;public Integer getId(){return id; }publicvoidsetId(Integer id){this.id = id; }public String getUsername(){return username; }publicvoidsetUsername(String username){this.username = username; }public String getPassword(){return password; }publicvoidsetPassword(String password){this.password = password; }public String toString(){return"User [id=" + id + ", username=" + username + ", password=" + password + "]"; }}

然後我們創建一個UserDao 接口,該接口定義了添加、更新、刪除、根據ID查詢和查詢所有用戶的方法:

package com.ssm.jdbc;import java.util.List;publicinterfaceUserDao{publicintaddUser(User user);publicintupdateUser(User user);publicintdeleteUser(int id);//通過id查詢用戶public User findUserById(int id);//查詢所有用戶public List<User> findAllUser();}

接下來,我們來對UserDao的接口進行實現,在這個方法中我們對具體的增刪改查邏輯進行設置,直接看代碼吧:

package com.ssm.jdbc;import org.springframework.jdbc.core.BeanPropertyRowMapper;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.jdbc.core.RowMapper;import java.util.List;public classUserDaoImplimplementsUserDao{ private JdbcTemplate jdbcTemplate; public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate; }@Override public int addUser(User user) {String sql="insert into user_table(username,password) value(?,?)";Object[] obj=newObject[]{ user.getUsername(), user.getPassword() };intnum=this.jdbcTemplate.update(sql,obj);returnnum; }@Override public int updateUser(User user) {String sql="update user_table set username=?,password=? where id=?";Object[] params=newObject[]{ user.getUsername(), user.getPassword(), user.getId() };intnum=this.jdbcTemplate.update(sql,params);returnnum; }@Override public int deleteUser(int id) {String sql="delete from user_table where id=?";intnum=this.jdbcTemplate.update(sql,id);returnnum; }@Override public User findUserById(int id) {String sql="select * from user_table where id=?"; RowMapper<User> rowMapper=new BeanPropertyRowMapper<User>(User.class);returnthis.jdbcTemplate.queryForObject(sql,rowMapper,id); }@Override public List<User> findAllUser() {String sql="select * from user_table"; RowMapper<User> rowMapper=new BeanPropertyRowMapper<User>(User.class);returnthis.jdbcTemplate.query(sql,rowMapper); }}

然後我們在jdbc.xml 中加入bean,加入UserDao:

<!-- 定義id為userDao的Bean --><beanid="userDao"class="com.ssm.jdbc.UserDaoImpl"><!--將 jdbcTemplate注入到 userDao實例中 --><propertyname="jdbcTemplate"ref="jdbcTemplate" /></bean>

好了,一切準備就緒,我們接來下通過測試類來測試下具體的增刪改查。

首先來測試下添加用戶方法,如圖下所示:

@TestpublicvoidaddUserTest(){//加載jdbc.xml 配置文件 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("jdbc.xml");//獲取UserDao實例 UserDao userDao = (UserDao) applicationContext.getBean("userDao");//創建user實例 User user = new User();//設置屬性 user.setUsername("張三"); user.setPassword("123");//添加用戶int num = userDao.addUser(user);if (num > 0) { System.out.println("Success insert "+num+" data"); }else { System.out.println("erro"); } }

更新用戶:

@TestpublicvoidupdateUserTest(){//加載jdbc.xml 配置文件 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("jdbc.xml");//獲取UserDao實例 UserDao userDao = (UserDao) applicationContext.getBean("userDao");//創建user實例 User user = new User();//設置屬性 user.setId(1); user.setUsername("李四"); user.setPassword("12345");//更新用戶信息int num = userDao.updateUser(user);if (num > 0) { System.out.println("Success update "+num+" data"); }else { System.out.println("erro"); } }

刪除用戶:

@TestpublicvoiddelUserTest(){//加載jdbc.xml 配置文件 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("jdbc.xml");//獲取UserDao實例 UserDao userDao = (UserDao) applicationContext.getBean("userDao");//刪除,傳入ID值int num = userDao.deleteUser(1);if (num > 0) { System.out.println("Success delete "+num+" data"); }else { System.out.println("erro"); } }

查詢用戶信息,包括了根據ID查詢和查詢所有:

@TestpublicvoidfindUserTest(){//加載jdbc.xml 配置文件 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("jdbc.xml");//獲取UserDao實例 UserDao userDao = (UserDao) applicationContext.getBean("userDao");//根據ID查詢用戶 User user = userDao.findUserById(2); System.out.println(user);}@TestpublicvoidfindAllUserTest(){//加載jdbc.xml 配置文件 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("jdbc.xml");//獲取UserDao實例 UserDao userDao = (UserDao) applicationContext.getBean("userDao");//根據ID查詢用戶 List<User> list = userDao.findAllUser();for (User user:list){ System.out.println(user); }}

好了,以上就是關於如果使用Spring JDBC 操作資料庫實現增刪改查的方法。

相關焦點

  • Spring JDBC訪問關係型資料庫
    JdbcTemplate的增加/刪除/更新方法上面提到的都是查詢方法,而對於資料庫的寫操作相對於查詢來說,要簡單很多,在寫操作中,使用?使用MySQL資料庫的一個最重要的功能是持久化,所以在真正的應用環境裡,我們必須要使用MySQL這一類資料庫進行數據存儲。但是,在內存資料庫的例子中,沒有任何代碼定義了資料庫地址,Spring Boot就直接使用了H2Database。如果需要使用MySQL呢?Spring Boot在初始化DataSource對象時,會根據外部配置來進行。
  • 【SpringBoot DB 系列】Jooq 之常用函數使用姿勢
    【SpringBoot DB 系列】Jooq 之常用函數使用姿勢 在我們的實際業務開發中,某些場景下會藉助一些資料庫支持的函數來做一些簡單的操作,如針對浮點數的取整(, ),字符串的長度獲取()等,本文將介紹一下 jooq 中一些常見的函數使用姿勢 I.
  • Spring Boot 2.X 實戰--SQL 資料庫(MyBatis)
    這裡使用 MySQL,如果你想使用如:PostgreSQL 等其他的資料庫,只需要更改相對應的依賴和指定 Driver 驅動包即可。MyBatis 可以使用簡單的 XML 或註解來配置和映射原生類型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 對象)為資料庫中的記錄。
  • 一文搞懂如何在Spring Boot 正確中使用JPA
    2.配置資料庫連接信息和JPA配置下面的配置中需要單獨說一下 spring.jpa.hibernate.ddl-auto=create這個配置選項。這個屬性常用的選項有四種:create:每次重新啟動項目都會重新創新表結構,會導致數據丟失create-drop:每次啟動項目創建表結構,關閉項目刪除表結構update:每次啟動項目會更新表結構validate:驗證表結構,不對資料庫進行任何更改但是,一定要不要在生產環境使用 ddl 自動生成表結構,
  • 使用Spring框架實現資料庫事務處理
    企業級應用系統在更新資料庫數據時,一般都採用資料庫事務處理,以確保資料庫數據的一致性。本文主要討論在Spring框架中如何使用資料庫事務處理更新資料庫數據。通過本課的學習,可以達到如下目標。1、JDBC對資料庫事務處理的支持JDBC本身就提供了對資料庫事務處理的支持,使用java.sql.Connection對象完成事務的提交。使用Connection提交資料庫事務處理代碼如下。
  • SpringBoot(五) :spring data jpa 的使用
    的使用.html如有好文章投稿,請點擊 → 這裡了解詳情在上篇文章《 springboot(二):web綜合開發 》中簡單介紹了一下spring data jpa的基礎性使用,這篇文章將更加全面的介紹spring data jpa 常見用法以及注意事項。
  • 如何理解 Spring AOP 以及使用 AspectJ?
    為啥要使用 AOP在學習AOP 之前,我們先了解下為啥我們要使用AOP?那麼,在傳統的業務處理代碼中,比如你要操作資料庫,會進行事務的處理或者列印一些日誌。雖然通過OOP 也可以實現,比如通過繼承或組合的方式來達到代碼的復用,但是如果實現某些功能,比如日誌記錄,相同的代碼會分散到各個方法中,如果後面要想關閉某個功能或進行修改就必須要修改所有的方法,非常的不方便。那麼為了解決為了解決這個問題,AOP的思想隨之產生。它採取了橫向抽取機制。
  • springboot(五):spring data jpa的使用
    在上篇文章springboot(二):web綜合開發中簡單介紹了一下spring data jpa的基礎性使用,這篇文章將更加全面的介紹spring
  • 使用Spring Cloud Data Flow 來實現數據流處理
    SCDF提供可視化界面Dashboard便於進行日常管理,如註冊應用,編排數據流,執行數據流,查看執行結果和歷史等。當然也可以利用API或DSL CLI的方式進行交互。
  • Spring Boot集成JDBCTemplate
    JDBC簡介Java資料庫連接,(Java Database Connectivity,簡稱JDBC)是Java語言中用來規範客戶端程序如何來訪問資料庫的應用程式接口,提供了諸如查詢和更新資料庫中數據的方法。它由一組用Java語言編寫的類和接口組成。通常說的JDBC是面向關係型資料庫的。
  • 詳述 Spring Data JPA 的那些事兒
    使用上述實體類的註解,當運行項目的時候就會在資料庫中生成一個表名是 stu 的表。類的繼承分析下面來研究一下類之間存在繼承關係的時候,jpa 又是如何處理繼承關係的呢?這個是很值得了解清楚的,這個搞明白了我們在使用 spring data jpa 的時候可能會事半功倍。
  • 阿里P8架構師整理總結:Spring+SpringBoot+SpringCloud技術文檔
    第2部分在此基礎上介紹如何使用Spring構建Web應用程式。第3部分告別前端,介紹如何在應用程式的後端使用Spring。第4部分描述如何使用Spring與其他的應用和服務進行集成。讀者將會看到如何編寫控制器來處理請求,並使用模型數據產生響應。當控制器的工作完成後,模型數據必須要使用一個視圖來進行渲染。第6章將會探討在Spring中可以使用的各種視圖技術,包括JSP、Apache Tiles以及Thymeleaf。
  • 使用redis在SpringCloud getway中進行速率限制
    使用redis在SpringCloud getway中進行速率限制1.依存關係我們將針對較高流量下的速率限制測試示例應用程式。首先,我們需要包括一些依賴項。當然,需要Spring Cloud Gateway啟動器。
  • Spring Boot中使用Mockito進行Web測試 - 第339篇
    Mockito》進行編碼。這組工具的使用方式是函數的鏈式調用,允許程式設計師將多個測試用例連結在一起,並進行多個判斷。對於MockMvc如何初始化呢?可以使用MockMvcBuilders的build()方法進行構建,所以我們需要使用@Before在單元測試執行之前進行MockMvc對象的初始化:private MockMvc mockMvc;@Beforepublic void setupMockMvc(){ mockMvc = MockMvcBuilders.webAppContextSetup
  • 如何使用Spring Boot和DynamoDB構建聊天應用程式
    這是一個非常簡單的API,可以進行很大的改進,但目標不是實現用於聊天的完美API或處理所有可能的情況。相反,我們將看到如何將事物組合在一起。並保留較少的代碼,以便初學者更輕鬆地掌握其工作方式。在詳細介紹實現之前,建議您在本地運行該應用程式進行配置,以便您可以嘗試以後閱讀的內容。
  • 如何使用MySQL資料庫
    如何使用MySQL資料庫前言:前面我們已經了解了如何搭建MySQL資料庫,那麼接下來我們就一起來了解一下,如何使用MySQL資料庫。MySQL資料庫系統也是一個典型的C/S(客戶端/伺服器)架構應用,要訪問MySQL資料庫需要使用專門的客戶端軟體。在linux系統中,最簡單、易用的MySQL客戶端軟體是其自帶的MySQL命令工具。
  • Spring Data Redis使用
    Spring Data Redis介紹Spring Data Redis是Spring官方推出,可以算是Spring框架集成Redis操作的一個子框架,封裝了Redis的很多命令,可以很方便的使用Spring操作Redis資料庫,Spring對很多工具都提供了類似的集成,如Spring Data MongDB、Spring Data JPA等,Spring Data Redis只是其中一種
  • Postgres、R2DBC、Spring Data JDBC和Spring WebFlux的響應式API簡介
    我曾在這篇文章中-Spring WebFlux和Spring Cloud的響應式微服務描述了它如何與Spring Boot和Spring Cloud來構建響應式微服務。 Spring 5還引入了支持對NoSQL資料庫進行響應性訪問的項目,如Cassandra,MongoDB或Couchbase。但是,仍然缺乏對訪問關係型資料庫的響應性的支持。
  • 易水組件 5.2.0 發布,告別單表 CURD 重複性代碼
    易水公共組件是基於springboot的高度封裝的通用型組件,在對spring security和spring security
  • 爬蟲中如何使用關係型資料庫進行查詢
    從關係型資料庫中刪除數據刪除的操作相對來說比較簡單,直接使用DELETE語句即可,只是需要指定要刪除的目標表名和刪除條件,而且仍然需要使用db的commit( )方法才能生效。因此,推薦使用如下方法來逐條獲取數據:這樣每循環一次,指針就會偏移一條數據,隨取隨用,非常簡單高效。非關係型資料庫存儲NoSQL,全稱Not Only SQL,意為不僅僅是SQL,泛指非關係型資料庫。