java web2(黑马)

数据库设计

简介

1.软件的研发步骤

2.数据库设计概念

>  数据库设计就是根据业务系统的具体需求,结合我们所选用的DBMS,为这个业务系统构造出最优

的数据存储模型

>  建立数据库中的表结构以及表与表之间的关联关系的过程,

简单来说就是有哪些表?表里有哪些字段?表和表之间有什么关系?

3.数据库设计的步骤

① 需求分析   (数据是什么?数据具有哪些属性? 数据与属性的特点是什么)

② 逻辑分析  (通过ER图对数据库进行逻辑建模,不需要考虑我们所选用的数据库管理系统)

③ 物理设计  (根据数据库自身的特点把逻辑设计转换为物理设计)

④ 维护设计  (1.对新的需求进行建表; 2.表优化)

表关系

>  一对一
 如:  用户和用户详情
( 一对一关系多用于表拆分,将一个实体中经常使用的字段放张表,不经常使用的字段放另一张

表,用于提升查询性能)

实现方式:在任意一方加入外键,关联另一方主键,并且设置外键为唯一。

>  一对多(多对一)

 如:  部门和员工
    (一个部门对应多个员工,一个员工对应一个部门)

实现方式:在多的一方建立外键,指向一的一方的主键。

>  多对多

 如:商品 和 订单

(一个商品对应多个订单,一个订单包含多个商品)

实现方式:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键。

多表查询

概念

>  笛卡尔积:取 A,B集合所有组合情况

多表查询:从多张表查询数据。

   1.连接查询:
          > 内连接:相当于查询A 、B交集数据
          > 外连接:

              左外连接:相当于查询A表所有数据和交集部分数据

              右外连接:相当于查询B表所有数据和交集部分数据
   2.子查询

内连接

1.内连接查询语法

        >   隐式内连接

         SELECT 字段列表 FROM 表1,表2..WHERE 条件;

        >   显示内连接

         SELECT 字段列 表 FROM 表1 [INNER] JOIN 表2 ON 条件;

注:INNER可以省略不写

外连接

1.外连接查询语法

              >  左外连接

    SELECT 字段列表 FROM 表1 LEFT [OUTER] J0IN 表2 ON 条件;

              >  右外连接

    SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件;

注:OUTER可以省略不写

子查询

1.概念:查询中嵌套查询,称嵌套查询为子查询

2.子查询根据查询结果不同,作用不同:

     >  单行单列:作为条件值,使用= != > <等进行条件判断

  SELECT 字段列表 FROM 表 WHERE 字段名 = (子查询);

     >  多行单列:作为条件值,使用in 等关键字进行条件判断

  SELECT 字段列表 FROM 表 WHERE 字段名 in (子查询);

     >  多行多列:作为虚拟表

  SELECT 字段列表 FROM (子查询) WHERE 条件;

事务

简介

>  数据库的事务(Transaction)是一种机制、一个操作序列,包含了一组数据库操作命令

>  事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么同

时成功,要么同时失败

>  事务是一个不可分割的工作逻辑单元

> 语法:

          -- 开启事务

START TRANSACTION;    或者    BEGIN;

          -- 提交事务

COMMIT;

          -- 回滚事务

ROLLBACK;

特征

事务四大特征

原子性: 事务是不可分割的最小操作单位,要么同时成功,要么同时失败

一致性: 事务完成时,必须使所有的数据都保持一致状态

隔离性: 多个事务之间,操作的可见性

持久性: 事务一旦提交或回滚,它对数据库中的数据的改变就是永久的

JDBC

简介

1.JDBC就是使用Java语言操作关系型数据库的一套API

2.全称(Java DataBase Connectivity)   Java 数据库连接。

3.本质:

      >  官方(sun公司)定义的一套操作所有关型数据库的规则,即接口

      >  各个数据库厂商去实现这套接口,提供数据库驱动jar包

      >  我门可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类

快速入门

JDBC API详解

DriverManager

DriverManager(驱动管理类)作用:   1. 注册驱动    2. 获取数据库连接

1.注册驱动

Class.forName("com.mysql.jdbc.Driver");


提示:
MySQL5之后的驱动包,可以省略注册驱动的步骤

自动加载jar包中META-INF/services/java.sql.Driver文件中的驱动类

2.获取连接
      static Connection         getconnection(strimg url,string uer, string password)
     > 参数
  1.url: 连接路径
              语法:jdbc:mysql:/ip地址(域名):端口号/数报库名称?参数健值对1&参数健值对2...
              示例:jdbc:mysq!://127.0.0.1:3306/db1
              细节:
                 >如果连接的是本机mysql服务器,并且mysql服务默认口是3306,则url可以简写                                    为:jdbc:mysql:///数据库名称?参数键值对

                >配置 useSSL=false 参数,禁用安全连接方式,解决警告提示
2.user:用户名
3.password:密码

Connection

Connection(数据库连接对象)作用:1. 获取执行 SQL 的对象   2.管理事务

1. 获取执行 SQL 的对象

         >  普通执行SQL对象

  Statement createStatement()

         >  预编译SQL的执行SQL对象:防止SQL注入

  PreparedStatement prepareStatement (sql)

         >  执行存储过程的对象

  CallableStatement prepareCall (sql)

2. 事务管理

>  MySQL 事务管理

              开启事务:BEGIN; / STARTTRANSACTION:

              提交事务:COMMIT;

              回滚事务:ROLLBACK;

   注:MySQL默认自动提交事务

>  JDBC 事务管理: Connection接口中定义了3个对应的方法

              开启事务:setAutoCommit(boolean autoCommit):  true为自动提交事务;false为手动提交事

务,即为开启事务

              提交事务:commit()

              回滚事务:rollback()

Statement

Statement作用:  1. 执行SQL语句

1. 执行SQL语句

       int executeUpdate(sql): 执行DML、DDL语句

     返回值:(1)DML语句影响的行数

                 (2)DDL添句执行后,执行成功也可能返回0

       ResultSet executeQuery(sql): 执行DQL语句

     返回值: ResultSet结果集对象

ResultSet

>ResultSet(结果集对象)作用:

      1.封装了DQL查询语句的结果

ResultSet stmt.executeQuery(sql): 执行DQL语句,返回 ResultSet 对象

>获取查询结果
       boolean next():(1)将光标从当前位置向前移动一行

                               (2)判断当前行是否为有效行
       返回值:  true:有效行,当前行有数据
                       false:无效行,当前行没有数据

       xxx   getXxx(参数): 获取数据
              >  xxx:数 据类型; 如:int getnt(参数); Sting getSting(参数)
              > 参数:  Int: 列的编号,从1开始
                           Sting: 列的名称

>使用步聚:

         1.游标向下移动一行,并判断该行否有数据:next0)

         2.获取数据:getXxx(参数)

//循环判断游标是否是最后一行末尾
       whlle(rs.next(){
    //获取数据
       rs.getXxx(参数);

}

PreparedStatement

PreparedStatement作用:  1.预编译SQL语句并执行: 预防SQL注入问题

注:SQL注入是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击

的方法

1.预编译SQL并执行SQL语句

获取 PreparedStatement 对象

        //SQL语句中的参数值,使用?占位符替代

String sql = "select * from user where usemame = ? and password = ?";

       //通过Connection对象获取,并传入对应的sql语句

PreparedSlatement pstmt = conn.prepareSlatement(sql);

设置参数值

PreparedStatement对象:setXxx(参数1,参数2):给?赋
   > Xxx:数据类型;  如 setlnt(参数1,参数2)
   参数:
              参数1: ? 的位置编号,从1开始
              参数2: ? 的值

执行SQL

executeUpdate():/ executeQuery(); : 不需要再传递sql

2.PreparedStatement 原理

在获取PreparedStatement对像时,将sgl语句发送给mysql服务器,进行检查,编译(这些步票很耗时)

执行时就不用再进行这些步票了,速度更快

如果sgl模板一样,则只需要进行一次检查、编译

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

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

相关文章

Meta 宣布加入 Kotlin 基金会,将为 Kotlin 和 Android 生态提供全新支持

近日 Meta 正式宣发加入了 Kotlin 基金会&#xff0c;如果你对 Meta 不熟悉&#xff0c;那么对于开源了 React Native 的 Facebook 应该不陌生了吧&#xff1f;现在它也正式加入了 Kotlin 领导者的阵营&#xff1a; Kotlin 基金会 是由 Jetbrains 和 Google 共同成立的基金会&a…

缓存系统-淘汰策略

目录 一、LRU&#xff08;最近最少使用&#xff09; 工作原理 操作流程 基本特征 二、LFU&#xff08;最不常使用&#xff09; 工作原理 操作流程 基本特征 三、ARC 自适应 工作原理 操作流程 基本特征 四、TTL&#xff08;生存时间&#xff09; 工作原理 操作流…

TypeScript 安装使用教程

一、TypeScript 简介 TypeScript 是由微软开发的开源编程语言&#xff0c;是 JavaScript 的超集&#xff0c;添加了静态类型、接口、枚举、类等特性&#xff0c;使开发大型应用更安全、可维护、可扩展。最终会被编译为标准的 JavaScript 代码在浏览器或 Node.js 中运行。 二、…

强化学习系列--dpo损失函数

DPO 概要 DPO&#xff08;Direct Preference Optimization&#xff0c;直接偏好优化&#xff09;是由斯坦福大学等研究团队于2023年提出的一种偏好优化算法&#xff0c;可用于LLM、VLM与MLLM的对齐训练。 算法基于PPO的RLHF基础上进行了大幅简化。DPO算法跳过了训练奖励模型这…

UniApp完全支持快应用QUICKAPP-以及如何采用 Uni 模式开发发行快应用优雅草卓伊凡

UniApp完全支持快应用QUICKAPP-以及如何采用 Uni 模式开发发行快应用优雅草卓伊凡 一、UniApp 对快应用的支持深度 UniApp 已完全支持快应用的开发和发布&#xff0c;具体包括&#xff1a; 两种渲染模式&#xff1a; Webview 渲染&#xff08;快应用 Light 版&#xff09;&a…

js 允许生成特殊的变量名 基于字符集编码混淆的 XSS 绕过漏洞 -- Google 2025 Lost In Transliteration

题目实现了一个字符转换工具 在/file路由用户可以通过 ct 参数自定义 Content-Type // 文件路由 - 提供静态文件服务&#xff08;JS和CSS&#xff09;&#xff0c;支持内容类型验证 app.MapGet("/file", (string filename "", string? ct null, string?…

【仿muduo库实现并发服务器】LoopThreadPool模块

仿muduo库实现并发服务器 1.LoopThread模块1.1成员变量1.2构造函数13线程入口函数1.4获取eventloop对象GetLoop() 2.LoopThreadPool模块2.1成员变量2.2构造函数2.3配置线程数量2.4按照配置数量创建线程2.5依次分配Eventloop对象 1.LoopThread模块 这个模块是为了将EventLoop与…

华为云Flexus+DeepSeek征文|基于Dify构建文本/图像/视频生成工作流

华为云FlexusDeepSeek征文&#xff5c;基于Dify构建文本/图像/视频生成工作流 一、构建文本/图像/视频生成工作流前言二、构建文本/图像/视频生成工作流环境2.1 基于FlexusX实例的Dify平台2.2 基于MaaS的模型API商用服务 三、构建文本/图像/视频生成工作流实战3.1 配置Dify环境…

相机-IMU联合标定:IMU更新频率

文章目录 📚简介⚠️ IMU频率参数错误设置的影响❌ 相机-IMU联合标定失败:Optimization failed!🚀 确定IMU更新频率直接通过 rostopic hz 检查实际频率检查 IMU 驱动或数据手册从 bag 文件统计频率在这里插入图片描述修改 `update_rate` 的注意事项**最终建议****常见问题…

动手实践:如何提取Python代码中的字符串变量的值

要提取Python代码中所有变量类型为字符串的变量的值&#xff0c;但不执行代码&#xff08;避免安全风险&#xff09;&#xff0c;可以通过静态分析代码的抽象语法树&#xff08;AST&#xff09;来实现。以下是完整的解决方案&#xff1a; 本文由「大千AI助手」原创发布&#xf…

Python中字符串isalpha()函数详解

在 Python 中&#xff0c;isalpha() 是字符串&#xff08;string&#xff09;类型的内置方法&#xff0c;用于检查字符串中的所有字符是否都是字母字符&#xff08;alphabetic character&#xff09;。以下是详细说明&#xff1a; 一、基本功能 返回值&#xff1a;布尔值&…

Gradio全解13——MCP详解(4)——TypeScript包命令:npm与npx

Gradio全解13——MCP详解&#xff08;4&#xff09;——TypeScript包命令&#xff1a;npm与npx 第13章 MCP详解13.4 TypeScript包命令&#xff1a;npm与npx13.4.1 概念区分1. npm概念与运行逻辑2. npx概念及特点 13.4.2 操作示例1. 使用npm执行包2. 使用npx执行包3. 常用npm命令…

《推客小程序全链路开发指南:从架构设计到裂变运营》

在移动互联网流量红利逐渐消退的今天&#xff0c;如何低成本获客成为企业营销的核心痛点。推客小程序作为一种基于社交关系的裂变营销工具&#xff0c;正成为企业突破增长瓶颈的利器。本文将为您全面解析推客小程序的开发定制全流程&#xff0c;帮助您打造专属的社交裂变营销平…

中钧科技参加中亚数字经济对话会,引领新疆企业数字化新征程!

6月27 日&#xff0c;乌鲁木齐成为数字经济领域的焦点&#xff0c;中国新疆 - 中亚国家数字经济和数字贸易企业对话会在此盛大举行。 来自中亚国家及新疆数字经济领域的100 余位核心代表齐聚一堂&#xff0c;围绕数字经济时代的机遇、挑战与策略展开深度探讨。 本次对话会由新…

k8s一键部署tongweb企业版7049m6(by why+lqw)

声明 1.此贴仅供参考&#xff0c;请根据自身需求在测试环境测试和修改。 安装准备 1.获取对应的安装包和授权,并将授权和安装包放在同一个目录下 2.docekr已配置远程仓库 3.提前拉取jdk的镜像&#xff08;这里配置了使用openjdk:8&#xff09; 安装 将以下内容复制到k8s_…

Qt 与 Halcon 联合开发六:基于海康SDK设计完整的相机类【附源码】

在现代工业自动化、机器人视觉、等领域&#xff0c;相机模块的作用至关重要。通过相机模块采集到的图像数据&#xff0c;我们能够进行一系列的图像处理和分析。为了高效地控制相机和处理图像&#xff0c;本篇文章将介绍如何使用Qt和Halcon联合开发一个相机模块&#xff0c;帮助…

第7篇:Gin模板引擎——服务端页面渲染

作者:GO兔 博客:https://luckxgo.cn 分享大家都看得懂的博客 引言 在Web开发中&#xff0c;服务端页面渲染(SSR)依然是构建动态网页的重要方式。Gin框架虽然以API开发见长&#xff0c;但也内置了强大的模板引擎支持&#xff0c;基于Go标准库的html/template包实现。本文将深入…

RagFlow 源码部署启动指南

一、环境准备 1. 安装 uv 和 pre-commit 如果已安装&#xff0c;可跳过。推荐使用官方方式安装&#xff0c;避免报错&#xff1a; pipx install uv pre-commit export UV_INDEXhttps://mirrors.aliyun.com/pypi/simple安装报错 使用清华源安装&#xff1a; pipx install uv…

【Python基础】12 闲谈分享:Python用于无人驾驶的未来

引言&#xff1a;一个程序员的自动驾驶梦想 还记得2016年的那个秋天&#xff0c;我第一次坐进特斯拉Model S的驾驶座&#xff0c;体验Autopilot功能。当方向盘开始自己转动&#xff0c;车辆在高速公路上自动跟随前车时&#xff0c;我的内心涌起了一种奇妙的感觉——这不就是我…

为什么js是单线程?

js单线程&#xff0c;同一时间只能做一件事 。js的单线程 主要与它的用途有关。作为浏览器脚本语言&#xff0c;js的主要用途是与用户互动&#xff0c;以及操作DOM。这决定了它只能是单线程&#xff0c;否则会带来很复杂的同步问题。如果js同时有两个线程&#xff0c;一个线程在…