SSM框架训练 实现各个功能时遇到的常见问题

news2024/11/19 5:53:20

快速复制当前代码到下一行:ctrl+D

格式化代码(快速整理代码):ctril+alt+L

一步一步来,后续会不停添加功能。

先创建项目结构:搭建框架

(36条消息) SSM框架模板(高配:一次性配完所有需要的配置文件)_one day321的博客-CSDN博客

登录与注册 功能实现 的问题:

登录很简单,这里就不详述了。可以参考上一个博客的内容,里面有关登录的介绍。

主要看注册的问题:

第一个问题:没有进行 判断数据是否为空,就插入数据到数据库里面了,这个时候插入的数据都是null。

原因:通过logger.ingo("user")  。我们可以发现。原来我们的判断语句是:

if(user ==null)   。但是日志输出的user 是一个 po.user类型,里面各个数据存放的是null。但不是user为null。

修改:  改为user.getAccount() ==null

第二个问题:插入了三次

在插入语句里面,插入了三次。是因为,这个里面,使用了三次插入 (userDao.register(user)尽管 ) 

修改:将userDao.register语句只保存一个就可以了。

第三个问题:从表单提交给Controller的数据。需要有model的属性指定。

在浏览器输入/register 的时候,它的modelAttribute是user。表示,它提交的表单,其中会有一个user的model属性。所以这里要像下面一样修改。

第四个问题:从service层提交给view层的数据。也需要有相应的model属性指定

 像下面,service层返回给login.jsp。然后login.jsp存在modelAttribute("login")。所以这里必须也要指定login的model属性。

第三个和第四个问题,分别是 从两个方向提交数据,如果缺少上述属性的指定,就会造成,浏览器500,并提示,找不到bean标签。

第五个问题:是有关数据库的属性指定。

比如,这里指定id 不能为空,所以。在Mapper.xml文件里面,需要首先对sql语句里面的id进行赋值,否则,就会报错。

 比如这里,就必须先进行赋值null。

第二个功能:实现 商品类型的展现 和商品类型的添加。

第一个问题:404

商品类型和商品类型的添加都属于一个商品类型的表。  然后我在做的时候,把SQL语句放在了UserMapper.xml文件里面(UserMapper.xml 文件的映射是dao.userDao。)不符合我们属于商品类型的表。

修改:需要创建一个商品类型的Mapper.xml。需要创建 一个POJO类型的商品类型。在mybatis-config.xml文件里面添加 对商品类型的映射。

修改完后,就不会出现404的问题了。

第二个问题:代码层不建议多写。一个表对应一类代码层。比如:这次的商品类型。那么就写GoodsType。(dao层就是TypeGoodsDao、service层就是TypeService、controller层就是TypeController)

关于代码层,我一开始的作法是分了两个模块,一个添加,一个展示。但是书上要求是在同一个页面展示,最后越做越乱。直到我把代码层的代码全部删除,重新放在一个模块来思考,问题得到解决。

第三个问题:我想知道,数据是如何在这个里面进行传输和储存的。

小结自己的感悟:

1.Controller层 的方法参数要和 Service层 一一对应。

2.像SQL语句这些。若没有从view层传送数据过来,那么controller层的POJO类型始终为空,当然Service层也始终为空。例如:查询所有语句。没有view层传递数据。只需要在view层使用dao层的方法就能获取到数据。但POJO数据始终为空。

3.从view层传递数据过来了(view层数据绑定POJO的属性),那么POJO始终 有这么一条数据。也仅有这一条数据。

4.有一点需要重视,像多个功能放在同一个页面下,那么view层就会存在多个model属性。那么对应功能的方法也会有对应几个的model.add属性。

(并不是对应一个功能,那么在一个方法里面就只写一个model属性。因为最终返回的界面有多个model属性,那么尽管是一个功能的方法,它也要写上所有 和返回界面 里面有的所有model.add属性。否则,只写一个model属性,它最后返回到界面里面会因为发现不了其它model属性而导致报错。并提示,此bean未找到。)

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

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

相关文章

指针进阶1

目录 本章将学习 1字符指针 2数组指针与指针数组 3数组传参与指针传参 复习指针初阶基本知识点 1指针是个地址(编号),指针变量是存放指针的变量,但是我们平常所说的指针就是指的指针变量,指针变量的大小有4(32位平…

解决Quixel Bridge导出到Blender3.1失败port 28888

文章目录 前言一、错误情景二、解决办法总结 前言 解决Quixel Bridge导出到Blender3.1报错无法经由端口28888导出. 一、错误情景 导出插件显示已安装完成: 但是点击右下角导出报错无法从端口28888执行该操作. 我尝试过把MSPlugin插件手动安装到Blender3.1但这并不奏效. 二、解…

聚观早报|Threads上线7小时注册破千万;兰博基将终结燃油车生产

今日要闻:Threads上线7小时注册破千万;兰博基尼宣布将终结燃油车生产;腾讯旗下企鹅FM9月6日正式停止运营;ChatGPT暂停接入必应搜索功能;首个国产GLP-1“减肥药”获批 Threads上线7小时注册破千万 7 月 6 日消息&#…

Windows 基本概念和术语

Windows 基本概念和术语 Windows APIWindows API 的风格Windows 运行时.NET Framework 服务、函数和例程进程使用任务管理器查看进程信息父进程 线程纤程用户模式调度线程 作业虚拟内存内核模式和用户模式虚拟机监控程序固件终端服务和多会话对象和句柄安全性注册表Unicode总结…

google软件测试之道

目录 前言: 一、Google软件测试介绍 1)质量不等于测试 2)角色、职责 3)组织结构 4)测试版本 5)测试类型: 二、软件测试开发工程师,SET 1)SET的工作 2&#xff…

JVM 三色标记算法

我们要进行垃圾回收,就需要弄明白哪些对象是需要回收的,哪些对象是不需要回收的。针对这个问题,其实业界已经有几种常见的解决方法了。 第一种是计数法 第一种是计数法,就是每个对象都有一个计数器,被引用了加一&…

4.2 x64dbg 针对PE文件的扫描

通过运用LyScript插件并配合pefile模块,即可实现对特定PE文件的扫描功能,例如载入PE程序到内存,验证PE启用的保护方式,计算PE节区内存特征,文件FOA与内存VA转换等功能的实现,首先简单介绍一下pefile模块。 …

uuid-golang中的使用---借鉴使用官网的办法--推荐

写在最前面的话,golang因为是国外开发的,官网,github都是网速卡或者不能使用的,这个时候可以使用国内的,搜索软件包或者下载 https://gitee.com/ 如果可以使用的话,建议从下面两个网站使用, …

Petronas 使用 SAP EWM 的 Liquid UI 离线将运营效率提高了 70%

背景 Petroliam Nasional Berhad(也称为“Petronas”)总部位于马来西亚,是一家充满活力的国际能源公司,业务遍及100多个国家,在各种石油相关活动方面拥有30多年的经验。马来西亚国家石油公司生产在道德和可持续方面推…

数据结构【树】

数据结构与算法之树结构 树的定义树的基本术语树结构和线性结构的比较树的应用 树的定义 树是一种非线性的数据结构,它是一个包含n(n>1)个节点,(n-1)条边的有穷集合。树有多种表现形式,把它叫做“树”是因为它看起来像一个倒挂的树&#…

redis主从(windows版本)

1. 下载redis 1.1、Github下载地址:Releases microsoftarchive/redis GitHub 1.2、百度网盘下载地址:Redis-x64-3.2.100.zip 密码:kdfq 1.3、也可以自行从其它地方下载 2.配置redis主,设置服务,然后启动 端口…

【Vue3】学习笔记-Composition API 的优势

1.Options API 存在的问题 使用传统OptionsAPI中(配置型API),新增或者修改一个需求,就需要分别在data,methods,computed里修改 。 这张图告诉我们,我们在v2的时候功能放到配置中。它想告诉我们所有的功能都拆散了。 …

0基础学习VR全景平台篇 第58篇:高级功能-AI人像合成

功能位置示意 一、本功能将用在哪里? AI人像合成是蛙色VR商业级方案中,重要的裂变推广功能之一; 选取对应照片,通过后台生成实现个人与场景的合影留念,一键转发分享快速传播裂变。 观者者使用本功能时,将…

基于OpenCV 和深度学习实现微笑检测-附免费源码

文末提供免费的源代码下载链接 我们将使用 SMILES 数据集来训练我们的卷积神经网络。一旦我们的模型训练完毕,我们将按照与上一个教程中相同的步骤来检测图像和视频中的微笑: 我们将使用 Haar 级联来检测图像中的人脸。从图像中提取人脸区域。将面部区域传递给我们的网络进行…

Spring Boot 中的 JPA 是什么,如何使用

Spring Boot 中的 JPA 是什么,如何使用 简介 JPA (Java Persistence API) 是一种标准的 ORM (Object Relational Mapping) 规范,用于将 Java 对象映射到关系型数据库中。它提供了一种面向对象的方式来操作数据库,使得开发者可以更加方便地进…

【openGauss5.0企业版一主一备集群】—运维

【openGauss5.0企业版一主一备集群】—运维 🔻 一、openGauss5.0主从集群的维护🔰 1.1 查看单个节点状态🔰 1.2 查看集群所有节点状态🔰 1.3 集群启停🔰 1.4 switchover 主备切换🔰 1.5 模拟主库宕机&#…

Git gui教程---第三篇 Git gui的使用 配置提交信息

配置提交信息 配置好提交的信息,跑路的话,别人也能找到你,哈哈哈。点击“编辑”,选择“选项”,需要关注的地方有三个,一个是全局的版本库,一个是TEST版本库,一个是合并工具。 全局代…

数据库表的创建以及操作

1.创建数据库Market,在Market中创建数据表customers,customers表结构如表4.6所示,按要求进行操作。 (1)创 建数 据库 Market。 (2)创建数据表custo mers, 在c_num字段 上添加主键约束 和自增 约束,在c_birth字段 上添加非空约束。 (3)将c_c…

梯度流(Gradient Flow):探索通往最小值之路

©PaperWeekly 原创 作者 | 苏剑林 单位 | 追一科技 研究方向 | NLP、神经网络 在这篇文章中,我们将探讨一个被称为“梯度流(Gradient Flow)”的概念。简单来说,梯度流是将我们在用梯度下降法中寻找最小值的过程中的各个点连…

【Linux】进程信号之信号的产生

进程信号 一 一、信号入门1、信号的一些特性2、信号的处理方式信号捕捉初识 3、Linux下的信号 二、信号的产生1、通过终端按键产生信号2、调用系统函数向进程发信号a、kill函数b、raise函数c、abort函数 3. 由软件条件产生信号4、硬件异常产生信号 结语 一、信号入门 什么是信号…