SQL语句的封装

article/2025/9/13 22:56:12

本篇供个人学习使用,有问题欢迎讨论

封装SQL语句

​ 在封装SQL语句之前,我们得知道什么是DAO封装与实体类以及JDBC工具类的封装与连接数据库的具体流程。

​ 关于JDBC工具类的封装可以查看我的另一篇博文 JDBC工具类的封装

​ 想了解具体的连接数据库的具体流程可以看 简单了解java连接数据库的操作步骤

​ 封装SQL语句后就可以导包,给其他的工程使用,大大降低开发的强度,减少代码的冗余。如何导包给其他工程使用请看 IDEA的JAR包生成

一、DAO封装

1、介绍

(1)DAO( DataBase Access Object ):数据库访问对象

(2)作用:数据库访问对象在开发时提供针对某张表的操作细节【增删改查】

(3)优点:

优点1,在管理系统开发时,通过数据库访问对象可以避免反复的 SQL 命令书写

优点2,在管理系统开发时,通过数据库访问对象可以避免反复的 JDBC 开发步骤书写

(4)DAO类:提供数据库访问对象的类

2、DAO类开发规则

(1)一个DAO类封装的是一张表操作细节

(2)DAO类命名规则:表名 + Dao。比如封装 emp 表操作细节:EmpDao;封装Dept表操作细节:DeptDao

(3)DAO类所在包命名规则:公司网站域名.dao , 比如 com.bjpowernode.dao
在这里插入图片描述

二、实体类

1、一个实体类用于描述一张表结构

2、实体类的类名应该与关联的表名保持一致,但是可以忽略大小写

DEPT -----------> public class Dept{ }

3、实体类的属性应该与关联的表文件字段保持一致

Dept:

DEPTNOINT
DNAMEVARCHAR(20)
LOCVARCHAR (20)
public class Dept{private Integer deptNo;private String dname;private String 1oc;
}

4、实体类的一个实例对象用于在内存中存储对应的表文件中一个数据行

Dept:

DeptNodnameloc
10AccountNew York
20salesBeiJing

JVM内存:

Dept dept1 = new Dept(10,"Account","New York");
Dept dept2 = new Dept(20,"Sales","BeiJing");

三、封装SQL语句

1、在数据库中建表

(1)对表内容的设计

列名数据类型允许Null值
管理员编号int
管理员姓名nvarchar(10)
管理员密码nvarchar(20)

(2)命名为 “ 管理员信息表 ”,表中内容如下表所示:

管理员编号管理员姓名管理员密码
1王五123456
3qwe123
5qin456

2、实体类的封装

public class Manager{private Integer ManagerNo;private String ManagerName;private String managerPw;//带参构造public Manager(Integer mangerNo, String managerName, String managerPw) {this.managerNo = mangerNo;this.managerName = managerName;this.managerPw = managerPw;}//无参构造public Manager() {}//setter and getter方法public Integer getMangerNo() {return managerNo;}public void setMangerNo(Integer mangerNo) {this.managerNo = mangerNo;}public String getManagerName() {return managerName;}public void setManagerName(String managerName) {this.managerName = managerName;}public String getManagerPw() {return managerPw;}public void setManagerPw(String managerPw) {this.managerPw = managerPw;}
}

3、DAO的封装

​ 以下代码都是写在一个程序中,这里为了方便阅读理解分别都一个一个拆开来写。

(1)添加数据行
public class ManagerDao {JDBCUtil util = new JDBCUtil();public int add(String managerNo,String managerName,String managerPw){String sql = "insert into 管理员信息表(管理员编号,管理员姓名,管理员密码) values(?,?,?)";int result = 0;try{PreparedStatrment ps = util.creatStatement();ps.setInt(1,Integer.valueOf(managerNo));ps.setString(2,managerName);ps.setString(3,managerPw);result = ps.executeUpdate();} catch (SQLException e){e.printStackTrace();} finally {util.close();}return result;}
(2)删除数据行
public class ManagerDao {JDBCUtil util = new JDBCUtil();public int delete(String managerNo){String sql = "delete from 管理员信息表 where 管理员编号 = ?";int result = 0;try{PreparedStatement ps = util.creatStatement();ps.setInt(1,Integer.valueOf(managerNo));result = ps.executeUpdate();} catch (SQLException e) {e.printStackTrace();} finally {util.close;}return result;}
}
(3)更新数据行
public class ManagerDao {JDBCUtil util = new JDBCUtil();public int update(String managerNo,String managerName,String managerPw){String sql = "update 管理员信息表 set 管理员姓名=?,管理员密码=? where 管理员编号=?";int result = 0;try{PreparedStatement ps = util.creatStatement();ps.setString(1,managerName);ps.setString(2,managerPw);ps.setInt(3,Integer.valueOf(mangagerNo));result = ps.executeUpdate();}atch (SQLException e) {e.printStackTrace();} finally {util.close();}return result;}
}
(4)查询数据行
public class ManagerDao {JDBCUtil util = new JDBCUtil();public List findAll(){String sql = "select * from 管理员信息表";ResultSet rs = null;//创建List集合List list = new ArrayList();try{PrepatedStatement ps = util.creatStatement();rs = ps.executeQuery();while(rs.next()){int managerNo = rs.getInt("管理员编号");String managerName = rs.getString("管理员姓名");String managerPw = rs.getString("管理员密码");//创建manager实体类对象,并把以上参数传入到实体类中Manager manager = new Manager(managerNo,managerName,managerPw);//每获得一行数据,就把这一行内容放进list集合list.add(manager);}} catch (SQLException e) {e.printStackTrace();} finally {util.close(rs);}//list放入的是表中所有数据,因此返回list集合return list;}
}

4、测试

(1)查询语句
public class Test02 {public static void main(String[] args) {//创建DAO对象ManagerDao md = new ManagerDao();//创建List集合,这里使用泛型表示只能使用Manager的类型List<Manager> managerList = md.findAdd();//使用foreach对管理员表中内容进行循环for (Manager manager:managerList) {System.out.println("管理员编号:" + manager.getMangerNo() + "   管理员姓名:" + manager.getManagerName() + "   管理员密码:" + manager.getManagerPw());}}
}

在这里插入图片描述

(2)添加语句
public class Test02 {public static void main(String[] args) {ManagerDao md = new ManagerDao();//添加管理员信息md.add("2333","heihei","123");//查询管理员表中所有信息List<Manager> managerList = md.findAdd();for (Manager manager:managerList) {System.out.println("管理员编号:" + manager.getMangerNo() + "   管理员姓名:" + manager.getManagerName() + "   管理员密码:" + manager.getManagerPw());}}
}

在这里插入图片描述

(3)更新语句
public class Test02 {public static void main(String[] args) {ManagerDao md = new ManagerDao();//对编号为2333的管理员进行修改md.update("2333","hetui","666");//查询管理员表中所有信息List<Manager> managerList = md.findAdd();for (Manager manager:managerList) {System.out.println("管理员编号:" + manager.getMangerNo() + "   管理员姓名:" + manager.getManagerName() + "   管理员密码:" + manager.getManagerPw());}}
}

在这里插入图片描述

(4)删除语句
public class Test02 {public static void main(String[] args) {ManagerDao md = new ManagerDao();//删除编号为5的管理员所有信息md.delete("5");//查询管理员表中所有信息List<Manager> managerList = md.findAdd();for (Manager manager:managerList) {System.out.println("管理员编号:" + manager.getMangerNo() + "   管理员姓名:" + manager.getManagerName() + "   管理员密码:" + manager.getManagerPw());}}
}

在这里插入图片描述

(5)附带模块创建目录

在这里插入图片描述


http://chatgpt.dhexx.cn/article/Nw27FbwT.shtml

相关文章

mysql sql delete语句_SQL Delete语句

在本教程中,您将学习如何使用SQL DELETE语句删除表中的一行或多行。 1. SQL DELETE语句简介 要从表中删除一行或多行,请使用DELETE语句。 DELETE语句的一般语法如下: DELETE FROM table_name WHERE condition; 首先,提供要删除行的表名称(table_name)。 其次,在WHERE子句中…

MySQL入门(5)——基于datagrip的SQL语句学习

目录 一、什么是SQL二、SQL约束1、主键约束&#xff08;1&#xff09;添加主键约束方式一&#xff1a;创建表时&#xff0c;在字段描述处&#xff0c;声明指定字段为主键方式二&#xff1a;创建表时&#xff0c;在constraint约束区域&#xff0c;声明指定字段为主键方式三&…

MySQL数据库增删改查及聚合查询SQL语句学习汇总

目录 数据库增删改查SQL语句 MySQL数据库指令 1.查询数据库 2.创建数据库 3.删除数据库 4.选择数据库 创建表table 查看所有表 创建表 查看指定表的结构 删除表 数据库命令进行注释 增删改查&#xff08;CRUD&#xff09;详细说明 增加 SQL库提供了关于时间的…

第一部分_SQL查询语句学习

第一部分 SQL查询语句的学习 单表查询 查询订购日期在1996年7月1日至1996年7月15日之间的订单的订购日期、订单ID、客户ID和雇员ID等字段的值 SELECT 订购日期,订单ID,客户ID,雇员ID FROM 订单 WHERE 订购日期 BETWEEN 1996-07-01 AND 1996-07-15 查询供应商的ID、公司名称、…

了解RS-232、RS-485串口通信协议

文章目录 一、串口通信协议1、RS-232标准2、RS-485标准3、RS232、485电平与TTL电平的区别4、"USB/TTL转232"模块工作原理1、工作流程2、驱动 2、总结3、参考资料 一、串口通信协议 对于通信协议&#xff0c;我们可以分为两个层面进行理解&#xff0c;分别是物理层和…

RS485通讯协议

https://blog.csdn.net/qq_29344757/article/details/71516037 1. 硬件层协议 通讯协议主要是实现两个设备之间的数据交换功能&#xff0c;通讯协议分硬件层协议和软件层协议。硬件层协议决定数据如何传输问题&#xff0c;比如要在设备1向设备2发送0x63&#xff0c;0x63的二进…

RS——485通讯协议

1、RS485通讯实验简介 RS485是一种工业控制环境中 常用的通讯协议&#xff0c;它具有抗干扰能力强、传输距离远的特点。485协议又232协议改进而来&#xff0c;协议层不变&#xff0c;只改进了物理层&#xff0c;因而保留了串口通讯协议应用简单的特点。 看图就知道了&#xf…

485Modbus协议

1.RS485 1&#xff09;485通信 --差分传输 物理层&#xff1a; 通信引脚 A B 使用双绞线通信。 发送器&#xff1a; 逻辑1&#xff1a; A>B AB之间电压为2V~6V 逻辑0&#xff1a; A<B AB之间电压为-2V~-6V 接收器&#xff1a; 逻辑1&#xff1a; A>B AB之间电…

带你认识什么是485通信

在现代工业控制系统中&#xff0c;常常需要实现分布式控制&#xff0c;而分布式控制需要实现不同设备之间的通信。其中&#xff0c;485通信协议是一种被广泛使用的通信协议之一。 1. 介绍 A. 485通信的定义 485通信协议是一种串行通信协议&#xff0c;也被称为RS-485。它是由美…

常见的通讯协议总结(USART、IIC、SPI、485、CAN)

目录 一、通讯的基本概念1、串行通讯2、并行通讯3、串行通讯与并行通讯对比4、传输模式&#xff08;单工、半双工、全双工&#xff09; 二、USART—串口通讯1、物理层2、协议层&#xff08;1&#xff09;波特率&#xff08;2&#xff09;起始和停止信号&#xff08;3&#xff0…

485通讯与MODBUS的区别与联系

最近做智能检测的项目&#xff0c;设备、串口之间的通讯比较多&#xff0c;一会儿485&#xff0c;一会儿modbus RTU&#xff0c;有点晕了&#xff0c;这里重新梳理一下RS485、485通讯协议、ModBus通讯协议、Modbus Rtu通讯这几个点的联系和区别。 先说RS485吧&#xff0c;RS48…

485通讯和modbus通讯协议

485通信&#xff1a; 采用差分信号&#xff1a;A比B电压高是1&#xff0c;A比B电压低是0&#xff0c;电压高低值在0.2V-6V之间。 硬件连接上&#xff1a;所有A接到一起&#xff0c;所有B接到一起AB之间要加匹配电阻100欧到1K之间。 485通讯配置时&#xff1a;先要使能发送TX…

MODBUS通讯协议详解(基于485)

参考&#xff1a;灵育科技Modbus课程总结 作者&#xff1a;Naunyang 时间&#xff1a;2020-11-23 13:51:58 网址&#xff1a;https://blog.csdn.net/Naunyang/article/details/108740456?spm1001.2014.3001.5502 参考&#xff1a;MODBUS用于单片机通讯 作者&#xff1a;hillch…

485通讯协议_终于有人把RS485通讯协议应用及缺点分析清楚了,看完收获多多

RS-485是工业控制环境中常用的通信协议&#xff0c;具有抗干扰能力强、传输距离长的特点。RS-485通信协议是对RS-232协议的改进。协议层不变&#xff0c;但只有物理层得到了改进&#xff0c;从而保留了串行通信协议应用简单的特点。 RS-232和RS-485的特性的不同 典型的串行通信…

Linux初学者必知的5个学习网站

1 推荐一&#xff1a;鸟哥的Linux私房菜&#xff08;http://vbird.dic.ksu.edu.tw/&#xff09; 这个不用多说吧&#xff0c;只要你学习Linux就肯定听说过鸟哥的私房菜&#xff0c;经典&#xff0c;对于初学者来说绝对是经典&#xff0c;推荐&#xff01;&#xff01;&#xff…

Linux初学者五个网站推荐

推荐一&#xff1a;鸟哥的Linux私房菜&#xff08;http://vbird.dic.ksu.edu.tw/&#xff09; 这个不用多说吧&#xff0c;只要你学习Linux就肯定听说过鸟哥的私房菜&#xff0c;经典&#xff0c;对于初学者来说绝对是经典&#xff0c;推荐&#xff01;&#xff01;&#xff01…

Linux学习网站推荐

推荐一&#xff1a;鸟哥的Linux私房菜&#xff08;http://vbird.dic.ksu.edu.tw/&#xff09; 这个不用多说吧&#xff0c;只要你学习Linux就肯定听说过鸟哥的私房菜&#xff0c;经典&#xff0c;对于初学者来说绝对是经典&#xff0c;推荐&#xff01;&#xff01;&#xff01…

如何在linux系统上搭建部署网站?

目录 前言 基础配置的更改和软件的安装 更改软件安装源 升级apt(advanced packing tool) 安装net-tools 安装openssh-server 安装vsftpd 环境配置 修改vsftpd的写入权限 安装HTTP服务软件 修改nginx配置 修改文件夹访问权限 重启nginx 测试 结语 使用云服务器&a…

Linux学习13—网站服务

文章目录 一. 网站简介1.1 前言1.2 概念1.3 名词解释1.4 网站架构 二. 静态网站2.1 Apache简介2.2 Apache基础2.3 Apache安装与配置2.4 虚拟主机 三. 动态网站3.1 简介3.2 搭建论坛系统discuz3.3 论坛系统discuz用户端测试 一. 网站简介 1.1 前言 用户UI的转变&#xff1a;B/S…

Linux学习:网站服务

目录 一、网站服务 1.网站简介 1.1名词 1.2网站架构 2、静态站点 2.1 Apache基础 2.2安装apache 2.4 虚拟主机 3、动态站点 3.1部署论坛系统dlscuz 一、网站服务 1.网站简介 1.1名词 &#xff08;1&#xff09;HTML&#xff1a;&#xff08;Hyper Text Markup Lang…