JDBC-Dao层模式

分层思维

    分层思维是软件架构设计的一种重要思想,它通过将应用程序划分为多个相互独立且依赖关系的层。

    通常分为以下三层关系。

web层:主要负责与用户进行交互,处理请求。

service层:业务逻辑层,主要负责处理应用程序的业务逻辑,它接收来自web层的数据进行业务处理,然后调用数据访问层来访问数据库。

dao层:数据访问层,主要负责与数据库进行交互,实现数据的增删查改。

    分层目的:

  1. 提高代码的可维护性:通过分层,可以将代码按照功能进行划分,使得每个层次都更加清晰和易于维护。当需要修改某个功能时,只需要关注相关的层次,而无需了解整个系统的全部代码。
  2. 提高代码的可扩展性:分层架构使得新的功能可以更容易地添加到系统中。例如,如果需要添加一个新的业务逻辑,只需要在业务逻辑层中进行修改,而无需影响其他层次。
  3. 促进团队协作:通过分层,可以将系统划分为多个相对独立的模块,每个模块可以由不同的团队或开发人员来负责。这有助于促进团队协作和分工,提高开发效率。
  4. 降低系统风险:由于分层架构将系统划分为多个层次,每个层次都承担不同的职责,因此可以降低系统风险。例如,当数据库结构发生变化时,只需要修改数据访问层,而无需影响其他层次。

Dao模式

步骤:

1. 根据表创建对应的实体类,数据库的数据类型要对应类的数据类型。数据库中的decimal对应BigDecimal。

2. 数据库中的命名规范通常使用下划线,而在类中使用小驼峰命名法。

3. 编写dao层,dao层通常由dao接口定义数据访问的抽象方法和dao接口的实现类

                                               


示例:

UserDao接口的内容:

package com.fs.dao;
import com.fs.entity.Student;
import java.util.List;public interface UserDao {/****根据id查询用户*/Student findById(int id);/*** 查询所有*/List<Student> findAll();/*** 添加学生*/int save(Student student);/***删除学生*/int delete(int id);
}

UserDaoimpl实现类的内容:

package com.fs.dao.impl;
import com.fs.dao.UserDao;
import com.fs.entity.Student;
import com.fs.util.jdbcUtil;import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;public class UserDaoImpl implements UserDao {@Overridepublic Student findById(int id) {String sql = "select stu_no,name,sex,age from student where stu_no = ?";ResultSet resultSet = null;try {resultSet = jdbcUtil.executeQuery(sql,id);Student student = new Student();while(resultSet.next()){student.setStuNo(resultSet.getInt("stu_no"));student.setName(resultSet.getString("name"));student.setSex(resultSet.getString("sex"));student.setAge(resultSet.getInt("age"));}return student;} catch (SQLException e) {throw new RuntimeException(e);}finally {jdbcUtil.close(resultSet);}}@Overridepublic List<Student> findAll() {String sql = "select stu_no,name,sex,age from student ";ResultSet resultSet = null;List<Student> students = new ArrayList<>();try {resultSet = jdbcUtil.executeQuery(sql);while(resultSet.next()){Student student = new Student();student.setStuNo(resultSet.getInt("stu_no"));student.setName(resultSet.getString("name"));student.setSex(resultSet.getString("sex"));student.setAge(resultSet.getInt("age"));students.add(student);}return students;} catch (SQLException e) {throw new RuntimeException(e);}finally {jdbcUtil.close(resultSet);}}@Overridepublic int save(Student student) {String sql = "insert into student(name,sex,age) values(?,?,?)";int i = jdbcUtil.executeUpdate(sql,student.getName(),student.getSex(),student.getAge());return i;}@Overridepublic int delete(int id) {String sql = "delete from student where stu_no = ?";int i = jdbcUtil.executeUpdate(sql,id);return i;}
}

接下来写了一个测试类: 

import com.fs.dao.UserDao;
import com.fs.dao.impl.UserDaoImpl;
import com.fs.entity.Student;import java.util.ArrayList;
import java.util.List;public class DaoTest {public static void main(String[] args) {UserDao userDao = new UserDaoImpl();Student s1 = userDao.findById(1001);System.out.print(s1.getName()+" ");System.out.print(s1.getAge()+" ");System.out.println(s1.getSex());Student s2 = new Student("小明","男",20);userDao.save(s2);List<Student> list = userDao.findAll();for(Student s:list){System.out.print(s.getStuNo()+" ");System.out.println(s.getName());}}
}

                 

程序可以正常运行,以后写代码都需要遵从这种模式。

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

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

相关文章

三种单例实现

1、不继承Mono的单例 实现 使用 注&#xff1a; 使用需要继承BaseManager 泛型填写自己本身 需要实现无参构造函数 2、挂载式的Mono单例 实现 使用 注&#xff1a; 使用需要继承SingletonMono 泛型填写自己本身 需要挂载在unity引擎面板 3、不用挂载式的单例 实现 使…

Flink API 的层次结构

Apache Flink 提供了多层 API&#xff0c;每层 API 针对不同的抽象层次和用途&#xff0c;使得开发者可以根据具体需求选择合适的 API 层次。以下是 Flink API 的层次结构及其简要说明&#xff1a;

DHCP与DNS安全管理

一、DHCPSnooping的攻击防范功能配置&#xff08;路由器&#xff09; 1.启动设备 2.将pc设为DHCP获取IP地址 3.配置DHCP [AR1]dhcp enable //启动DHCP服务 [AR1]ip pool aaa //设置地址池 [AR1-ip-pool-aaa]network 192.168.10.0 mask 24 //设置地址范围 [AR1-ip-poo…

51c视觉~合集6

我自己的原文哦~ https://blog.51cto.com/whaosoft/11603901 #CSWin-UNet 将自注意力机制集成到UNet中&#xff01;CSWin-UNet&#xff1a;U型分割方法&#xff0c;显著提高计算效率和感受野交互&#xff01;本文提出了CSWin-UNet&#xff0c;这是一种新颖的U型分割方法&…

深度学习服务器租赁AutoDL

省钱绝招 #AutoDL #GPU #租显卡

设备接入到NVR管理平台EasyNVR多品牌NVR管理工具/设备的音视频配置参考

NVR管理平台EasyNVR是一款功能强大的安防视频监控平台&#xff0c;能够轻松实现视频流的导入、录像、存储和回放等功能。在将设备接入到海康NVR管理平台EasyNVR时&#xff0c;视音频配置是确保视频监控效果的重要步骤。本文将详细介绍如何将设备接入到EasyNVR平台&#xff0c;并…

35.3K+ Star!PhotoPrism:一款基于AI的开源照片管理工具

PhotoPrism 简介 PhotoPrism[1] 是一个为去中心化网络设计的AI照片应用,它利用最新技术自动标记和查找图片,实现自动图像分类与本地化部署,你可以在家中、私有服务器或云端运行它。 项目特点 主要特点 浏览所有照片和视频,无需担心RAW转换、重复项或视频格式。 使用强大的…

HTML之列表

练习题&#xff1a; 图所示为一个问卷调查网页&#xff0c;请制作出来。要求&#xff1a;大标题用h1标签&#xff1b;小题目用h3标签&#xff1b;前两个问题使用有序列表&#xff1b;最后一个问题使用无序列表。 代码&#xff1a; <!DOCTYPE html> <html> <he…

redis实现消息队列的几种方式

一、了解 众所周知&#xff0c;redis是我们日常开发过程中使用最多的非关系型数据库&#xff0c;也是消息中间件。实际上除了常用的rabbitmq、rocketmq、kafka消息队列&#xff08;大家自己下去研究吧~模式都是通用的&#xff09;&#xff0c;我们也能使用redis实现消息队列。…

Linux下MySQL的简单使用

Linux下MySQL的简单使用 导语MySQL安装与配置MySQL安装密码设置 MySQL管理命令myisamchkmysql其他 常见操作 C语言访问MYSQL连接例程错误处理使用SQL 总结参考文献 导语 这一章是MySQL的使用&#xff0c;一些常用的MySQL语句属于本科阶段内容&#xff0c;然后是C语言和MySQl之…

即插即用篇 | YOLOv8 引入 代理注意力 AgentAttention

Transformer模型中的注意力模块是其核心组成部分。虽然全局注意力机制具有很强的表达能力,但其高昂的计算成本限制了在各种场景中的应用。本文提出了一种新的注意力范式,称为“代理注意力”(Agent Attention),以在计算效率和表示能力之间取得平衡。代理注意力使用四元组(Q…

从0开始学PHP面向对象内容之(常用魔术方法续一)

常用魔术方法&#xff08;续&#xff09; 上期我们讲到几个常用的魔术方法&#xff0c;但是由于篇幅过程且全是文字性质地东西&#xff0c;就没写完&#xff0c;篇幅太长也会丧失阅读兴趣&#xff0c;我尽量控制一篇文章在5000字左右 一、__isset()&&__unset() 1、在…

【MySQL】数据库知识突破:数据类型全解析与详解

前言&#xff1a;本节内容讲述MySQL的数据类型&#xff0c; 我们在学习之前的建表的时候已经用过各种各样的数据类型。 比如int、varchar、char类型等等。其中它们是对表的结构的操作&#xff0c; 并没有对数据的内容进行操作&#xff0c;所以它叫做DDL。另外&#xff0c;还有…

windows 11编译安装ffmpeg(包含ffplay)

一、源码及安装包下载 1.1&#xff0c;ffmpeg源码包下载 下载地址&#xff1a;Download FFmpeg 1.2&#xff0c;mysys下载 下载地址&#xff1a;MSYS2 1.3&#xff0c;libx264源码包下载 下载地址&#xff1a;x264, the best H.264/AVC encoder - VideoLAN 二、软件安装 2.1&…

从0开始深度学习(28)——序列模型

序列模型是指一类特别设计来处理序列数据的神经网络模型。序列数据指的是数据中的每个元素都有先后顺序&#xff0c;比如时间序列数据&#xff08;股票价格、天气变化等&#xff09;、自然语言文本&#xff08;句子中的单词顺序&#xff09;、语音信号等。 1 统计工具 前面介绍…

【考研数学:高数2】数列极限

目录 前言 一、数列极限的概念 1.常见前n项和 2.等差、等比数列 3.数列的性质 &#xff08;1&#xff09;单调性 &#xff08;2&#xff09;有界性 二、数列极限的定义 三、收敛数列的性质 1.概念 2.例题 四、极限的四则运算 五、海涅定理&#xff08;归结原则&…

计算机网络分析题

网络的布置 根据具体需求布置网络 第二小题、网络的划分 根据路由表作出路由器拓扑图 ARP跨网络寻址 TCP报文段格式概念 网桥的转发表与动作 网络嗅探报文 十六进制化作十进制 嗅探以太网帧首部 除MAC帧以外&#xff0c;其他各层协议数据单元都是源地址在前&#xff0c;目…

PHP爬虫快速获取京东商品详情(代码示例)

在当今互联网时代&#xff0c;数据的重要性不言而喻。对于电商领域来说&#xff0c;获取商品信息是数据分析、市场研究和价格监控的基础。本文将介绍如何使用PHP编写一个简单的爬虫&#xff0c;以快速获取京东商品的详情信息。 1. 概述 京东是中国领先的电商平台之一&#xff…

快速学习Serde包实现rust对象序列化

在处理HTTP请求时&#xff0c;我们总是需要在数据结构对象&#xff08;可以是enum、struct等&#xff09;和序列化数据格式&#xff08;例如JSON&#xff0c;用与存储或传输&#xff0c;并可以反序列化的格式&#xff09;之间来回转换。 Serde是一个库&#xff08;crate&#x…

OLED 显示画面的变换操作——上下、左右翻转

OLED 画面旋转 OLED 写入函数定义 OLED_WR_Byte(0xA1,OLED_CMD);//--Set SEG/Column Mapping 0xa0左右反置 0xa1正常 OLED_WR_Byte(0xC8,OLED_CMD);//Set COM/Row Scan Direction 0xc0上下反置 0xc8正常OLED 显示界面转换函数如下 void OLED_DisplayTurn(u8 i) {if(i0…