学习笔记20251225

用户登录流程

控制器、服务、DAO模型之间的数据流图

flowchart TDA[客户端请求] --> B(API控制器<br>LoginController->login)B --> C{控制器<br>进行参数验证}C -->|成功| D[登录服务<br>LoginService->login]C -->|失败| E[返回错误JSON]D --> F[用户DAO<br>userDao->getOne]F --> G{服务进行<br>查询结果判断}G -->|用户存在| H[生成Token]G -->|用户不存在| EH --> I[返回成功JSON<br>附带Token]E --> J((响应端))I --> J

数据访问对象(DAO)

封装数据访问操作,提供统一接口。

基类的设计

<?php
// app/common/dao/BaseDao.phpnamespace app\common\dao;use think\Model;/*** 基础数据访问对象 - 抽象类*/
abstract class BaseDao
{// 核心:子类必须返回对应的模型实例abstract protected function getModel(): Model;// 1. 查单条 (根据ID)public function getById($id, $field = '*'){return $this->getModel()->field($field)->find($id);}// 2. 查单条 (根据条件)public function getOne(array $where, $field = '*'){return $this->getModel()->where($where)->field($field)->find();}// 3. 查列表public function getList(array $where = [], $field = '*', $order = 'id DESC', $limit = 0){$query = $this->getModel()->where($where)->field($field)->order($order);if ($limit) $query->limit($limit);return $query->select();}// 4. 新增public function create(array $data){return $this->getModel()->insertGetId($data);}// 5. 更新 (根据ID)public function updateById($id, array $data){return $this->getModel()->where('id', $id)->update($data);}// 6. 删除 (根据ID)public function deleteById($id){return $this->getModel()->where('id', $id)->delete();}/*** 魔术方法:转发到模型查询构造器,处理复杂查询* @param string $method* @param array $args* @return mixed*/public function __call(string $method, array $args){// 将未定义的方法调用转发到底层模型,保留ThinkPHP链式操作的全部能力return call_user_func_array([$this->getModel(), $method], $args);}
}

用户DAO的实现

<?php
// app/common/dao/user/UserDao.phpnamespace app\common\dao\user;use app\common\dao\BaseDao;
use app\common\model\user\User;class UserDao extends BaseDao
{// 唯一必须实现的方法:告诉BaseDao操作哪个表protected function getModel(): User{// 简单返回模型类即可return new User();// 或使用容器:return app(User::class);}// 可选:扩展自己的特殊查询方法public function getByPhone($phone){return $this->getModel()->where('phone', $phone)->find();}
}

拓展:抽象类的特点

特点 说明
不能直接实例化 最重要的特性。你不能用 new AbstractClass() 创建对象。它存在的意义就是被继承
可以包含抽象方法 使用 abstract 关键字声明(如 abstract public function save();)。只有方法签名,没有方法体(花括号 {} 部分)。子类必须实现这些方法。
可以包含具体方法 可以像普通类一样,拥有已经实现了的属性和方法。子类可以直接继承和使用这些具体实现。
通过继承实现 子类使用 extends 关键字继承抽象类。一个子类只能继承一个抽象类(单继承)。

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

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

相关文章

360一键修复所有dll缺失

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

DirectX-一键修复文件缺失-系统文件错误修复工具

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

【毕业设计】基于python-CNN深度学习机器学习识别是否有火焰

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

财联社实时监控50条

import requests import json import time from requests.adapters import HTTPAdapter referer_url = "https://www.cls.cn/telegraph" cookie = "" headers = { "Accept": "/&qu…

6 9 /10(磁介质需要) 11 12

![image](https://img2024.cnblogs.com/blog/3 20260118151018294-1259705683.png)! 保守力做正功 势能减小重点:

【课程设计/毕业设计】基于机器学习python-CNN深度学习识别是否有火焰

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【毕业设计】基于机器学习python-CNN深度学习图像识别相似的中药材

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

poly

二刷。写一点不那么宝宝的内容。 FFT 我们希望快速计算加乘卷积。FFT 是一种变换,使得卷积能转化成点值乘积,从而线性计算。大多数变换通常都是这个思路。 卷积在多项式中的意义,就是多项式乘法。 然后 FFT 在多项式…

深度学习毕设项目:基于python-CNN深度学习识别是否有火焰

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

X 下载器 2.3.10 |支持国外多平台嗅探下载 内置浏览器 高速下载

X 下载器是一款专门用于下载短视频和图片的手机软件&#xff0c;支持多个社交软件视频网站嗅探下载&#xff0c;可从TikTok、Instagram等社交平台抓取视频链接并保存到本地&#xff1b;内置浏览器&#xff0c;能直接访问目标网站并自动识别页面中的视频或图片显示下载按钮&…

Leaflet核心概念

&#x1f343; Leaflet核心概念深度解析&#xff1a;轻量级WebGIS框架的精髓 一、Leaflet核心定位与架构 Leaflet是一款轻量级、移动端优先的开源WebGIS框架&#xff0c;核心优势是体积小&#xff08;压缩后仅~40KB&#xff09;、API简洁、跨平台兼容性强&#xff08;支持IE9…

2025年 蓝桥杯省赛C++A组题解

2025年 蓝桥杯省赛C++A组题解一、寻找质数 题目大意:找出第 2025 个质数。 【题解】:\(\pi(x)\)~\(\frac{x}{lnx}\),当 x 取到 30000 时,\(\frac{x}{lnx} \ge 2025\),用 欧拉筛 或者 埃氏筛\(O(n)\)算一下即可。 …

Transmormer从零基础到精通

我们从最直觉的“故事”开始&#xff0c;再逐步拆开 Transformer 的每一层“积木”。为了让你随时能查最新资料&#xff0c;我先帮你搜几份权威讲解与代码示例&#xff0c;然后给你一份“由浅入深”的学习路线。 下面给出一份「由浅入深」的 Transformer 学习路线&#xff0c;并…

2026沪上学子提分秘籍:靠谱班课补习机构大揭秘 - 品牌测评鉴赏家

2026沪上学子提分秘籍:靠谱班课补习机构大揭秘一、上海教育竞争现状 在上海,升学竞争的激烈程度,早已是家长圈心照不宣的共识。尤其是中考赛道,堪称“千军万马过独木桥”。上海中学、华师大二附中、复旦附中、交大…

2026上海班课辅导机构红榜:5家口碑之选+3个避坑指南,家长选课不踩雷 - 品牌测评鉴赏家

2026上海班课辅导机构红榜:5家口碑之选+3个避坑指南,家长选课不踩雷一、上海家长的教育突围战:选对班课比盲目报班更重要 在魔都上海,从幼升小的名校面谈,到中考 “五五分流” 的激烈竞争,家长们陷入 “不报班焦…

计算机深度学习毕设实战-基于人工智能python-CNN深度学习的蝴蝶识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

re库使用教程

re库使用教程 在学习使用re库之前,需要先了解正则表达式的基础规则,然后再学习re库的各接口使用 正则表达式基础规则 字符匹配 . # 匹配任意单个字符,默认不匹配换行符,除非标志位有re.S支持匹配所有的单个字符 \w…

十大降重品牌均采用AI智能改写系统,免费试用保障用户享受高质量的文本处理服务。

排名 工具名称 降重效率 特色功能 适用场景 免费额度 1 aibiye ⭐⭐⭐⭐⭐ AIGC查重降重双功能 学术论文深度优化 首次免费检测 2 aicheck ⭐⭐⭐⭐ 多维度重复率分析 日常作业/论文初稿 每日3000字免费 3 笔启AI ⭐⭐⭐⭐ 长文记忆多语种支持 硕博论文/…

https://github.com/jay3-yy/BiliPai

https://github.com/jay3-yy/BiliPai

深度学习毕设选题推荐:基于python-CNN人工智能深度学习的蝴蝶识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…