济南品牌网站制作方案怎么做一个个人网页

张小明 2026/1/8 15:20:52
济南品牌网站制作方案,怎么做一个个人网页,网页上的视频怎么下载下来,新增网站推广教程目录 核心架构#xff1a;数据流转的“流水线” 1. Entity (实体类) —— com.entity 2. Controller (控制层) —— com.controller 3. Service (业务层) —— com.service 4. Dao (持久层) —— com.dao 辅助架构#xff1a;让系统更好用的“后勤部” 5. Config (配置…目录核心架构数据流转的“流水线”1. Entity (实体类) —— com.entity2. Controller (控制层) —— com.controller3. Service (业务层) —— com.service4. Dao (持久层) —— com.dao辅助架构让系统更好用的“后勤部”5. Config (配置类) —— com.config6. Interceptor (拦截器) —— com.interceptor7. Utils (工具类) —— com.utils8. Handler (异常处理) —— com.handler总结一个请求的完整一生我还是不明白实体类到底是干嘛的我们不是已经有mybatis了吗这里存在的作用是啥1. 核心逻辑ORM对象-关系映射2. 生活比喻快递员与快递盒3. 代码实战如果没有实体类会发生什么情况 A有实体类现在的主流写法情况 B没有实体类硬要用 MyBatis总结dao层和resources/mapper 下的 XML 文件到底是怎么配合使用的不理解写个伪代码举例说明一下。1. 核心概念遥控器与指令2. 伪代码举例它们是如何“暗送秋波”的A. 遥控器UserDao.java (位于 com.dao 包)B. 指令手册UserMapper.xml (位于 resources/mapper)3. 图解配合流程4. 总结三个关键匹配结合你提供的 Spring Boot 项目结构图这其实是一个非常标准的MVC 三层架构变体。为了让你深刻理解我依然沿用“餐厅”的比喻但会结合你图中的具体文件夹名称用伪代码即不纠结语法只看逻辑的代码来演示一个完整的**“用户注册”**流程。核心架构数据流转的“流水线”数据就像是餐厅里的食材在不同的层级之间被传递、加工、存储。1. Entity (实体类) ——com.entity图片标注“一张表对应一个实体类”。本质数据的模具/载体。它不干活只负责装数据。比喻盘子、菜单上的菜品介绍。伪代码Java// 这是一个模具对应数据库里的 User 表 class User { int id; // 对应表里的 id 字段 String name; // 对应表里的 name 字段 String pwd; // 对应表里的 password 字段 }2. Controller (控制层) ——com.controller本质前台接待/服务员。职责对外暴露接口URL。接收前端传来的参数拿菜单。做简单的检查必填项填没填。指挥 Service 干活绝不自己动手做菜。给前端返回结果上菜。伪代码Javaclass UserController { // 注入大厨 Service service; // 对外暴露的接口/register func register(String name, String pwd) { // 1. 接待检查名字都没填直接打回去 if (name is empty) { return 注册失败名字不能为空; } // 2. 甩手掌柜交给大厨去处理 boolean success service.registerUser(name, pwd); // 3. 反馈结果 if (success) return 注册成功; else return 注册失败; } }3. Service (业务层) ——com.service本质大厨/业务经理。职责核心逻辑都在这判断用户存不存在、密码加密、算优惠券等。指挥 Dao 层存取数据。事务控制保证一系列操作要么全成功要么全失败。伪代码Javaclass UserService { // 注入仓库管理员 Dao dao; func registerUser(String name, String pwd) { // 1. 业务逻辑判断这人是不是已经注册过了 User existUser dao.findByName(name); if (existUser ! null) { return false; // 用户已存在不能注册 } // 2. 业务加工密码不能明文存要加密 String safePwd MD5(pwd); // 3. 组装数据 User newUser new User(); newUser.name name; newUser.pwd safePwd; // 4. 指挥仓库管理员入库 dao.save(newUser); return true; } }4. Dao (持久层) ——com.dao关联通常与resources/mapper下的 XML 文件配合使用。本质仓库管理员/采购员。职责哪怕 Service 逻辑再复杂Dao 层也只听简单的指令查、存、改、删。直接和数据库Database对话。伪代码Javainterface UserDao { // 只定义接口具体 SQL 写在 resources/mapper/UserMapper.xml 里 // 指令1根据名字找人 // SQL: SELECT * FROM user WHERE name ? func findByName(String name); // 指令2保存用户 // SQL: INSERT INTO user (name, pwd) VALUES (?, ?) func save(User user); }辅助架构让系统更好用的“后勤部”你图片中还有一些非常重要的辅助层级它们保证了核心业务的稳定运行。5. Config (配置类) ——com.config本质装修队/规则制定者。职责项目启动时设定好各种规则。比如“我们的日期格式统一用 YYYY-MM-DD”、“遇到跨域请求允许通过”等。伪代码Javaclass AppConfig { func config() { // 设定规则允许所有网站访问我的接口跨域配置 setCors(true); // 设定规则文件上传最大 10MB setMaxUploadSize(10MB); } }6. Interceptor (拦截器) ——com.interceptor本质保安/安检门。职责在请求到达 Controller服务员之前先拦下来查验身份。比如判断用户是否登录。伪代码Javaclass LoginInterceptor { // 在 Controller 执行之前触发 func preHandle(Request request) { // 查验令牌 if (request.hasToken() false) { return 滚去登录; // 拦截不让进 } return true; // 放行 } }7. Utils (工具类) ——com.utils本质公共工具箱。职责放一些谁都能用的通用功能比如“获取当前时间”、“生成随机数”、“MD5加密”。伪代码Javaclass DateUtil { // 静态方法谁都能直接调 static func getNow() { return 2023-10-27 12:00:00; } }8. Handler (异常处理) ——com.handler本质售后客服/危机公关。职责当系统任何地方报错抛出异常时不能直接把难看的错误代码给用户看而是由它捕获然后返回一句友好的“系统繁忙请稍后再试”。伪代码Javaclass GlobalExceptionHandler { // 只要系统报错就来这 func handle(Exception e) { log.error(e); // 记录错误日志给自己看 return 哎呀服务器开小差了; // 友好的告诉用户 } }总结一个请求的完整一生当你点击网页上的“注册”按钮时Interceptor (安检)先看你有没有权限访问。Controller (服务员)接过你的请求确认你填了名字和密码。Service (大厨)确认你没注册过把你密码加密。Dao (仓库)把你的信息写入数据库。Utils (工具)Service 可能会借用工具箱里的“加密工具”。Handler (客服)如果中间数据库挂了它会跳出来安抚你。Entity (盘子)你的数据一直装在这个对象里在大家手中传来传去。这就是你图片中每一个文件夹存在的意义。我还是不明白实体类到底是干嘛的我们不是已经有mybatis了吗这里存在的作用是啥这是一个非常棒的问题这也是很多刚开始接触 ORM对象关系映射框架的同学最容易卡住的地方。简单直接的回答是MyBatis 是“搬运工”而实体类Entity是“箱子”。如果没有箱子搬运工MyBatis从仓库数据库里把东西搬出来后该往哪里放呢散落一地吗下面我用三个维度来帮你彻底打通这个概念。1. 核心逻辑ORM对象-关系映射MyBatis 的全称涉及一个概念叫ORM (Object-Relational Mapping)。Object (对象) Java 里的实体类 (Entity)Relational (关系) 数据库里的表 (Table)Mapping (映射)MyBatisMyBatis 的作用就是充当那个“中间人”把数据库表里的一行数据Table Row自动变成 Java 里的一个对象Java Object。数据库只认识id1, name张三, age18这是数据。Java 代码只认识User user new User();这是对象。实体类的作用它就是 Java 世界里对数据库那张表的镜像。如果没有实体类MyBatis 查出来的name张三就没法变成user.getName()你的 Java 代码就没法处理这数据。2. 生活比喻快递员与快递盒想象一下网购的场景数据库 (Database)电商的大仓库里面堆满了散乱的商品数据。MyBatis快递员。他负责去仓库把商品找出来送到你手上。实体类 (Entity)快递盒子。Controller/Service你消费者。流程是这样的你Service告诉快递员MyBatis“我要买一个手机”。快递员去仓库数据库找到了手机。关键点来了快递员不能直接把裸露的手机扔给你吧他需要一个盒子实体类把手机装进去封好口才能给你。你拿到盒子Entity打开盒子getPhone()才能使用手机。如果你问“为什么要有实体类”这就像在问“为什么要有快递盒子快递员不能直接把手机零件散着拿给我吗”答案是可以用 Map但非常不安全容易丢件而且你拿到手也不好拿。3. 代码实战如果没有实体类会发生什么为了证明实体类的重要性我们看看如果没有它代码会变成什么样。情况 A有实体类现在的主流写法因为有User实体类MyBatis 知道要把数据放进User模具里。Java// 1. 定义模具实体类 public class User { private String name; private int age; // getter, setter... } // 2. MyBatis 只要配置一下 resultTypeUser // 3. 业务代码Service User user userMapper.getUserById(1); // ★★★ 这里的代码非常清晰编译器会帮你检查错误 ★★★ System.out.println(名字是 user.getName()); System.out.println(年龄是 user.getAge());情况 B没有实体类硬要用 MyBatisMyBatis 支持不使用实体类而是用MapString, Object来接收数据相当于用一个软塌塌的塑料袋装快递。Java// 1. 没有 User 类了 // 2. MyBatis 返回一个 Map MapString, Object userMap userMapper.getUserById(1); // 3. 业务代码Service // ★★★ 噩梦开始了 ★★★ // 这里的 name 必须手写万一你手抖写成了 Name 或者 nmae // 编译器不会报错程序运行起来才会崩溃空指针异常 String name (String) userMap.get(name); // 你必须记得数据库里 age 是数字如果强转错了也会崩 int age (Integer) userMap.get(age); System.out.println(名字是 name);总结MyBatis 是工具铲子/搬运工它负责干活。实体类是容器桶/箱子它负责装干活挖出来的数据。存在的作用类型安全防止你把年龄当成名字处理。代码提示IDE 会提示你user.getName()而不会提示你map.get(哪来着)。规范它是数据库表在 Java 世界的“身份证”。所以MyBatis 越强它越需要一个标准的实体类来配合它这样它才能自动把数据库里的脏活累活比如ResultSet的解析全帮你干了直接给你一个干干净净的 Java 对象。dao层和resources/mapper 下的 XML 文件到底是怎么配合使用的不理解写个伪代码举例说明一下。这是一个非常核心的问题初学者最容易晕的地方就在这“为什么我写了个接口Interface没写实现类代码居然能跑起来”简单来说Dao 层接口和 XML 文件SQL是**“遥控器”和“执行指令”**的关系。1. 核心概念遥控器与指令Dao 接口 (UserDao.java)这是遥控器。上面只有按钮方法名比如“开机”、“换台”。它只规定了**“能做什么”**但它内部是空的没有任何代码实现。Mapper XML (UserMapper.xml)这是指令手册。它详细记录了当按下“开机”按钮时电路板具体该怎么走SQL 语句怎么写。它们是如何配对的依靠**全限定名Namespace和方法名ID**来精确对接。2. 伪代码举例它们是如何“暗送秋波”的假设我们要实现一个功能根据 ID 查用户。A. 遥控器UserDao.java(位于com.dao包)Javapackage com.dao; // 1. 注意这个包名 public interface UserDao { // 2. 注意这个方法名 // 3. 注意这个参数 (int id) User getUserById(int id); }B. 指令手册UserMapper.xml(位于resources/mapper)XML!-- 1. namespace 必须完全等于 Dao 接口的“全路径” -- !-- MyBatis 就是靠这个知道本文件是专门给 com.dao.UserDao 这个接口服务的 -- mapper namespacecom.dao.UserDao !-- 2. id 必须完全等于 Dao 接口里的“方法名” -- !-- MyBatis 看到 UserDao.getUserById() 被调用就会来这就找 idgetUserById 的 SQL -- !-- 3. #{id} 里的 id 对应接口里的参数 -- !-- 4. resultType 对应接口的返回值类型 (User) -- select idgetUserById resultTypecom.entity.User SELECT * FROM user WHERE id #{id} /select /mapper3. 图解配合流程你可以把这个配合过程想象成一次**“查字典”**的操作代码调用Service 层调用了userDao.getUserById(1)。MyBatis 接管MyBatis 发现这是一个接口它会立刻去resources/mapper下的所有 XML 文件里翻找。第一步找文件它看 XML 的mapper namespace...。哎发现有一个 XML 的 namespace 是com.dao.UserDao跟你的接口名一模一样锁定这个文件第二步找方法它接着在这个文件里找有没有一个标签的id是getUserById哎找到了锁定这段 SQL执行 SQLMyBatis 把参数1填进 SQL (SELECT ... WHERE id 1)扔给数据库执行。返回结果数据库返回数据MyBatis 根据resultType把它自动封装成User对象扔回给 Service。4. 总结三个关键匹配要想让它们配合成功三个地方必须一模一样错一个字符都会报错文件匹配XML 的namespace 接口的全类名包名类名。方法匹配XML 标签的id 接口的方法名。类型匹配XML 的resultType 接口的返回值类型。这就是为什么你不需要写 Dao 的实现类比如UserDaoImpl因为 MyBatis 在运行的时候自动帮你生成了一个“代理对象”帮你把这套查找和执行的流程全干了。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

邹城有做网站的吗如何做可以赚钱的网站

Linux 系统文件服务器搭建与资源监控指南 在 Linux 系统的使用过程中,文件服务器的搭建以及系统资源的监控是至关重要的技能。下面我们将详细介绍文件服务器的搭建方法以及如何监控系统资源。 1. 文件服务器搭建 1.1 使用 noauto 选项手动挂载资源 在某些情况下,例如使用…

张小明 2026/1/1 9:32:46 网站建设

网站页面维护手机微信网页版

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

张小明 2026/1/2 15:19:26 网站建设

顺德网站制作案例如何设计感的网站

Qdrant向量数据库自动化运维:从零开始构建智能数据管家 【免费下载链接】qdrant Qdrant - 针对下一代人工智能的高性能、大规模向量数据库。同时提供云端版本 项目地址: https://gitcode.com/GitHub_Trending/qd/qdrant 你是否曾经因为向量数据库的维护而熬夜…

张小明 2026/1/4 12:50:32 网站建设

网站k深入浅出php

2025年最佳IDM永久试用方案:3种方法彻底解决激活问题 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script 还在为IDM频繁弹出的序列号警告而困扰吗&#x…

张小明 2026/1/6 5:07:56 网站建设

ps 做儿童摄影网站首页门户网上登录入口

LangFlow实时预览机制揭秘:调试LLM流程从未如此便捷 在构建大语言模型(LLM)应用的今天,开发者常面临一个尴尬局面:明明只是改了一行提示词,却要重新运行整个链式流程才能看到效果。等待API响应、日志滚动、…

张小明 2026/1/7 13:33:58 网站建设