Web基礎 -java操作數據庫

一、JDBC

JDBC:(Java DataBase Connectivity),就是使用Java語言操作關系型數據庫的一套API

為了使用JDBC操作數據庫,首先,我們需要在pom.xml文件中引入依賴

<dependencies><!-- MySQL JDBC driver --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.30</version></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.9.3</version><scope>test</scope></dependency>
</dependencies>

JDBC案例

    public void testUpdate() throws Exception {//1、注冊驅動Class.forName("com.mysql.cj.jdbc.Driver");//2、獲取數據庫連接String url ="jdbc:mysql://localhost:3306/web01";String username ="root";String password ="1234";Connection connection = DriverManager.getConnection(url, username, password);//3、獲取sql執行對象Statement statement = connection.createStatement();//4、執行SQLint i = statement.executeUpdate("update user set age = 25 where id =1");//DMLSystem.out.println("SQL語句執行完畢影響的記錄數為:"+ i);//5、釋放資源statement.close();connection.close();}

預編譯SQL

這是一種編寫SQL語句時,不將其中的數據寫死,而是用占位符代替,在后續需要查詢時替換占位符的方法。

conn.prepareStatement("SELECT * FROM user WHERE username = ? AND password = ?");
pstmt.setString(1, "daqiao");
pstmt.setString(2, "123456");
ResultSet resultSet = pstmt.executeQuery();

這種呢,并未將參數值在SQL語句中寫死,而是使用 ? 進行占位,然后再指定每一個占位符對應的值是多少,而最終在執行SQL語句的時候,程序會將SQL語句(SELECT * FROM user WHERE username = ? AND password = ?),以及參數值("daqiao", "123456")都發送給數據庫,然后在執行的時候,會使用參數值,將?占位符替換掉。

那這種預編譯的SQL,也是在項目開發中推薦使用的SQL語句。主要的作用有兩個:?
防止SQL注入?(例如輸入密碼時輸入引號等符號然后傳入程序,惡意更改程序內容)
性能更高

當我們使用JDBC查詢數據庫中的數據時,需要創建一個類用于存儲查詢返回的值(其中成員變量的數據類型為封裝后的數據類型)。ResultSet(結果集對象):封裝了DQL查詢語句查詢的結果。

package org.example;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@AllArgsConstructor
@NoArgsConstructor
@Data
public class User {private Integer id;private String username;private String password;private String name;private Integer age;
}
public void testSelect(){String url ="jdbc:mysql://localhost:3306/web01";String username ="root";String password ="1234";Connection conn=null;PreparedStatement stmt = null;ResultSet rs = null;        //封裝返回的結果集try {Class.forName("com.mysql.cj.jdbc.Driver");conn = DriverManager.getConnection(url, username, password);//?為占位符String sql = "SELECT id,username,password,name,age FROM user WHERE username=? AND password=?";//預編譯SQLstmt = conn.prepareStatement(sql);stmt.setString(1, "daqiao");        //為占位符賦值stmt.setString(2, "123456");rs = stmt.executeQuery();while(rs.next()){User user = new User(rs.getInt("id"),rs.getString("username"),rs.getString("password"),rs.getString("name"),rs.getInt("age"));System.out.println( user);  //用Lombol的@Data注解生成的toString()方法}} catch (Exception e) {e.printStackTrace();} finally {try{if(rs != null) rs.close();if(stmt != null) stmt.close();if(conn != null) conn.close();}catch (Exception e){e.printStackTrace();}}}

Mybatis

MyBatis是一款優秀的持久層框架,用于簡化JDBC的開發。

在IDEA中使用Mybatis需要在創建項目時引入以下三個文件。mybatis的起步依賴、mysql的驅動包、lombok。

項目工程創建完成后,自動在pom.xml文件中,導入Mybatis依賴和MySQL驅動依賴。

配置Mybatis

application.properties 中配置數據庫的連接信息。

#數據庫訪問的url地址
spring.datasource.url=jdbc:mysql://localhost:3306/web
#數據庫驅動類類名
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#訪問數據庫-用戶名
spring.datasource.username=root
#訪問數據庫-密碼
spring.datasource.password=root@1234

在創建出來的springboot工程中,在引導類所在包下,在創建一個包 mapper 。在 mapper 包下創建一個接口 UserMapper ,這是一個持久層接口(Mybatis的持久層接口規范一般都叫 XxxMapper)。

程序案例

package com.codeblossom.springbootwebmyhabitsquickstract.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@AllArgsConstructor
@NoArgsConstructor
@Data
public class User {private Integer id;private String username;private String password;private String name;private Integer age;
}
package com.codeblossom.springbootwebmyhabitsquickstract.mapper;import com.codeblossom.springbootwebmyhabitsquickstract.pojo.User;
import org.apache.ibatis.annotations.*;import java.util.List;@Mapper         //應用程序創建時,會自動為該接口創建一個實現類對象(代理對象),并且會自動將該實現類放入IOC容器 -bean對象
public interface UserMapper {//@Select("select * from user")   // 查詢所有用戶public List<User> findAll();/*** 根據id刪除*/@Delete("delete from user where id=#{id}")public Integer deleteById(int id);  //Integer返回值,表示受影響的行數/*新增一個用戶*/@Insert("insert into user(username,password,name,age) values(#{username},#{password},#{name},#{age})")public Integer Insert(User user);/*根據id更新用戶信息*/@Update("update user set username=#{username},password=#{password},name=#{name},age=#{age} where id=#{id}")public Integer updateById(User user);/*根據用戶名和密碼查詢用戶信息*/@Select("select * from user where username=#{username} and password=#{password}")public User findByUsernameAndPassword(@Param("username") String username, @Param("password") String password);  //因為用戶名唯一,所以可以直接用一個對象封裝返回
}
package com.codeblossom.springbootwebmyhabitsquickstract;import com.codeblossom.springbootwebmyhabitsquickstract.mapper.UserMapper;
import com.codeblossom.springbootwebmyhabitsquickstract.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.List;@SpringBootTest //SpringBoot中的單元測試注解,當前測試類中的測試方法運行時,會啟動Springboot項目-IOC容器
class SpringBootWebMyhabitsquickstractApplicationTests{@Autowiredprivate UserMapper userMapper;@Testpublic void testFindAll(){List<User> userlist = userMapper.findAll();userlist.forEach(user -> System.out.println(user));}@Testpublic void testDeleteById(){int result = userMapper.deleteById(1);System.out.println(result);}@Testpublic void testInsert(){User user = new User();user.setUsername("admin");user.setPassword("123456");user.setName("管理員");user.setAge(18);int result = userMapper.Insert(user);System.out.println(result);}@Testpublic void testUpdate(){User user = new User();user.setId(6);user.setUsername("admin");user.setPassword("123456");user.setName("管理員");user.setAge(19);int result = userMapper.updateById(user);System.out.println(result);}@Testpublic void testfindByUsernameAndPassword(){User user = userMapper.findByUsernameAndPassword("admin","123456");System.out.println(user);}
}

XML映射配置

使用Mybatis的注解方式,主要是來完成一些簡單的增刪改查功能。如果需要實現復雜的SQL功能,建議使用XML來配置映射語句,也就是將SQL語句寫在XML配置文件中。

在Mybatis中使用XML映射文件方式開發,需要符合一定的規范:

  1. XML映射文件的名稱與Mapper接口名稱一致,并且將XML映射文件和Mapper接口放置在相同包下(同包同名)

  2. XML映射文件的namespace屬性為Mapper接口全限定名一致

  3. XML映射文件中sql語句的id與Mapper接口中的方法名一致,并保持返回類型一致。

xml映射文件中的dtd約束,直接從mybatis官網復制即可; 或者直接AI生成。?

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace=""></mapper>

案例

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.codeblossom.springbootwebmyhabitsquickstract.mapper.UserMapper"><select id="findAll" resultType="com.codeblossom.springbootwebmyhabitsquickstract.pojo.User">
<!--        id為方法名,resultType:查詢返回單條記錄所封裝的類型(用于查詢語句上面)-->select * from user</select></mapper>

XML映射文件的namespace屬性為Mapper接口全限定名

XML映射文件中sql語句的id與Mapper接口中的方法名一致,并保持返回類型一致

若是想要在別的路徑下使用xml文件,可以在application.properties 中配置

#指定XML映射配置文件的位置
#在mapper下創建xml文件
mybatis.mapper-locations=classpath:mapper/*.xml

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

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

相關文章

cell2location復現

https://github.com/BayraktarLab/cell2location/issues/348 根據你已下載的本地 wheel 文件&#xff0c;可以通過以下方式修改安裝命令&#xff0c;優先從本地路徑安裝 jaxlib&#xff0c;同時保持其他依賴的安裝方式不變&#xff1a; 解決方案 # 安裝 jax (從遠程 PyPI 源) p…

什么是 npm、Yarn、pnpm? 有什么區別? 分別適應什么場景?

什么是 npm、Yarn、pnpm? 有什么區別? 分別適應什么場景? 在前端開發中&#xff0c;包管理工具扮演著非常重要的角色。它們幫助開發者高效地管理項目的依賴&#xff0c;確保項目中所需的所有第三方庫和工具都能按時安裝&#xff0c;并且兼容版本。npm、Yarn 和 pnpm 是三款…

深度隱匿源IP:高防+群聯AI云防護防繞過實戰

隱蔽性挑戰 黑客常通過以下手段繞過基礎防護&#xff1a; HTTPS證書嗅探&#xff1a;訪問 https://源站IP&#xff0c;通過證書域名匹配暴露真實IP歷史解析記錄追蹤&#xff1a;從DNS數據庫獲取舊A記錄CDN緩存滲透&#xff1a;利用邊緣節點回源漏洞定位源站 三重防護方案 高防I…

如何加快golang編譯速度

跟著我的步驟來&#xff1a;第一步&#xff1a;(點擊edit)第二步&#xff1a;將go tool arguments設置為-p4&#xff0c;初始值設為4&#xff0c; 代表最多同時編譯4個包&#xff08;非文件&#xff09;。電腦性能好時&#xff0c;可設為CPU最大核心數&#xff08;充分利用多核…

瀏覽器自動化方案

B端后臺列表頁自動新增素材方案 我設計了一套完整的瀏覽器自動化方案&#xff0c;使用 Puppeteer 實現B端后臺列表頁的自動新增素材功能。該方案包含數據組織、瀏覽器操作、錯誤處理等完整流程。 一、技術選型 瀏覽器自動化工具&#xff1a;Puppeteer (https://pptr.dev)任務調…

MPPT電路設計

反激的具體計算過程要寫好起碼要一天&#xff0c;所以本次先更MPPT。這章不計算具體參數&#xff0c;只做分析。 目錄 一、電路作用 二、電路設計 采樣電路和輸入電路 主體電路 驅動電路 一、電路作用 MPPT電路是一種廣泛應用于光伏發電、風力發電等新能源系統中的關鍵電…

【基于飛漿訓練車牌識別模型】

基于飛漿訓練車牌識別模型 基于飛漿訓練車牌識別模型 LPRNet&#xff08;License Plate Recognition via Deep Neural Networks&#xff09;是一種輕量級卷積神經網絡&#xff0c;專為端到端車牌識別設計&#xff0c;由Intel IOTG Computer Vision Group的Sergey Zherzdev于201…

No module named ‘sklearn‘

1、運行python數據分析庫時報錯 No module named sklearn2、原因 虛擬環境未安裝 sklearn 庫&#xff08;即 scikit-learn&#xff09;。 3、解決方案 pip install scikit-learn使用國內鏡像源&#xff1a; pip install scikit-learn -i https://mirrors.aliyun.com/pypi/simpl…

XPath注入攻擊詳解:原理、危害與防御

什么是XPath注入&#xff1f; XPath注入&#xff08;XPath Injection&#xff09;是一種針對使用XPath查詢語言的應用程序的安全攻擊技術&#xff0c;類似于SQL注入。當應用程序使用用戶提供的輸入來構造XPath查詢而沒有進行適當的過濾或轉義時&#xff0c;攻擊者可以通過構造惡…

網絡編程(套接字)

目錄 一、套接字 1、套接字的作用 2、關于TCP和UDP協議 1. TCP協議 2. UDP協議 3. 兩者的區別 2、套接字函數 1&#xff09;函數 socket&#xff08;創建套接字同文件描述符&#xff09; 2&#xff09;準備套接字用結構體 1. 套接字的結構體 2. 客戶端的套接字&…

R語言安裝包

# 在安裝過程中指定源地址 install.packages("RCurl", repos "https://mirrors.tuna.tsinghua.edu.cn/CRAN/") # 查看當前鏡像 options()$repos # 設置為中科大鏡像 options("repos" c(CRAN"https://mirrors.ustc.edu.cn/CRAN/")…

微服務引擎 MSE 及云原生 API 網關 2025 年 5 月產品動態

點擊此處&#xff0c;了解微服務引擎 MSE 產品詳情。

性能測試過程中監控linux服務器資源情況

文章目錄1. cpu使用情況&#xff08;1&#xff09;性能瓶頸類型CPU密集型瓶頸??I/O或等待瓶頸?&#xff08;2&#xff09;資源分配與競爭?資源爭用分析?虛擬化環境資源分配?&#xff08;3&#xff09;系統穩定性與異常??異常波動與毛刺??過熱降頻影響?&#xff08;4…

使用defineExpose暴露子組件的屬性和方法、頁面生命周期onLoad和onReady的使用

歡迎來到我的UniApp技術專欄&#xff01;&#x1f389; 在這里&#xff0c;我將與大家分享關于UniApp開發的實用技巧、最佳實踐和項目經驗。 專欄特色&#xff1a; &#x1f4f1; 跨平臺開發一站式解決方案 &#x1f680; 從入門到精通的完整學習路徑 &#x1f4a1; 實戰項目經…

新手必看!VSCodePyCharm 配置 OpenCV 超詳細教程(支持 Python 和 C++ 雙語言)

新手必看&#xff01;VSCode&PyCharm 配置 OpenCV 超詳細教程&#xff08;支持 Python 和 C 雙語言&#xff09; 適用對象&#xff1a;初學者&#xff0c;希望在 VSCode 與 PyCharm 兩款常用 IDE 中&#xff0c;學會配置并使用 OpenCV&#xff0c;分別實現 Python 與 C 環境…

PyTorch深度學習框架入門案例實戰

PyTorch深度學習框架詳解與實戰 1. PyTorch簡介與環境配置 1.1 安裝與導入 # 基礎導入 import torch import torch.nn as nn import torch.nn.functional as F import torch.optim as optim from torch.utils.data import DataLoader, TensorDataset import numpy as np import…

Spring Boot - Spring Boot 集成 MyBatis 分頁實現 手寫 SQL 分頁

一、準備階段 1、依賴引入 pom.xml <properties>...<postgresql.verison>42.5.6</postgresql.verison><mybatis.version>3.0.1</mybatis.version> </properties><dependencies>...<!-- postgresql 驅動 --><dependency>…

李宏毅《生成式人工智能導論》 | 第9講 AI Agent

文章目錄大模型未來趨勢&#xff1a;以大型語言模型打造的AgentAI Agent運行的可能原理有記憶的ChatGPT大模型未來趨勢&#xff1a;以大型語言模型打造的Agent 人類需要做多步驟的復雜任務&#xff0c;AI可以做到這件事嗎&#xff1f; 如果可以我們將其稱為AI Agent&#xff…

OCR 與 AI 圖像識別:協同共生的智能雙引擎

OCR 擅長提取圖像中的文字信息&#xff0c;但面對復雜背景、扭曲角度的圖片時&#xff0c;容易受干擾&#xff1b;AI 圖像識別能解析圖像場景、物體形態&#xff0c;卻難以精準捕捉文字細節 —— 兩者結合才能釋放最大價值。比如在票據處理中&#xff0c;AI 圖像識別先定位票據…

C# 按照主題的訂閱 按照類型的訂閱

安裝TinyPubSub庫&#xff0c;按照 主題發布訂閱using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Form…