案例整理(呕心沥血的教训)

其他的我大部分还是不知道那里出了问了,我这个新建的项目must3终于成功了

  1. 那个品牌名称和企业名称没有,是要在BrandMapper里加注解@ResultMap

  2. 一直报那个com.alibaba:fastjson,找不到,最后在Project->Artifacts->xxx:war exploded->lib->library中把三个都加进去servlet才 显示数据

第二天的问题

  1. 这Servlet中的这里面可能不能有中文,有中文就识别不了

     response.getWriter().write("sss");//我原本是写的"哈哈哈添加成功了"
  2. 数据库表tb_brand写成了brand

  3. 做删除功能时,前端id传不进去

    •  int id = JSON.parseObject(params, int.class)//这个不行,int改为Integer就可以进来了
    • 上面id解决了,但是从html页面获取的id还是传不进servlet,最终用(热爱编程的小白白)的代码成功了

    • id传进去后,点删除,数据库并没有操作,后来检查发现是没有提交事务

    修改功能:

    1. servlet中response没有修改"sss"为"uuu"

    2. html中update_1()方法没有传递index,row参数

    3. BrandServiceImpl里又忘记添加事务回滚,服

    4. 最后一个问题,一直修改不成功,问题肯定初中BrandMapper里面,最后把注解的代码删掉,换成xml的,就成功了.也不知道为啥

    批量修改:

    1. BrandServiceImpl里又忘记添加事务回滚,服*2

    2.  let selectionElement = this.multipleSelection[i];//这里不能直接在multipleSelection[i].id
       this.selectIds[i] = selectionElement.id;
    3. 最后一个问题:点完确认删除后,页面没有刷新,因为reps不对

       alert("resp=" + resp.data)//resp=yeah
       alert("resp=" + resp)//resp=[object Object]
       if(resp.data === "yeah"){//这里我原本写的是resp === "yeah"

    我测试发现没有写回滚代码,也能正常提交事务的

分页查询(后端代码)

要再过一遍

问题一:

  String b = request.getParameter("b");
 int b2 = Integer.parseInt(b);//就是我再浏览器传参数写的是b2=xxx,但是应该写b=xxx

问题二:品牌名称和企业名称出不了是因为sql语句上面忘记添加@ResultMap("brandResultMap")

问题三:换页了后没有刷新查询,因为没有在方法里加this.selectAll()

  //分页,分条
  handleSizeChange(val) {
      console.log(`每页 ${val} 条`);
      this.pageSize = val;
      this.selectAll();//zh
  },
  handleCurrentChange(val) {
      console.log(`当前页: ${val}`);
      this.currentPage = val;
      this.selectAll();
  }

条件搜索

问题一:在前端ajax中传完参数重新查询时报错

Uncaught (in promise) TypeError: this.selectAll is not a function

代码:

 }).then(function (resp){//这一行代码的问题                    axios.post("http://localhost:8080/must3_war/deleteServlet",row.id).then((resp)=> {
   if (resp.data === "ddd") {
   this.selectAll();

then中使用了function callback,因此在回调函数里面,this是指向HTTP request event,已经不是外部的默认vue对象了。

简而言之就是then里面不能用this,外面可以用

详情:

https://blog.csdn.net/IT__learning/article/details/114280525

问题二:selectAll方法一直把数据传不进去,还是Mapper.xml里没有把相关字段映射

 <if test="brand.brandName != null and brand.brandName != ''">
 and brand_name like #{brand.brandName}//这里原本都没有加brand.

问题三:

 select count(*) from tb_brand//错误:select count (*) from tb_brand

这个sql语句仅仅是因为count后面加了个空格就无法实现,我艹了

总结mybatis中where查询

  • where中test为true则加入sql语句中

  • if、choose、when、otherwise比较

    • if是直接拼接,重点说一下choose语句

choose(单条件查询)

  • 只有一个条件生效,也就是只执行满足的条件when,没有满足的条件就执行otherwise,表示默认条件。

  •  <where>
     <choose>
             <when test="brand.status != null"><!--相当于case-->
                  status = #{brand.status}
             </when>
             <when test="brand.companyName != null and brand.companyName != '' "><!--相当于case-->
                  company_name like #{brand.companyName}
             </when>
             <when test="brand.brandName != null and brand.brandName != ''"><!--相当于case-->
                  brand_name like #{brand.brandName}
             </when>
     </choose>
     </where>
     limit #{begin}, #{size}

在我搜索的时候,用choose就是只要前面有值,就只查询这一个,第二个无论填什么也不报错,也不查询,相当于没有这条语句

其实就可以按照switch-case来理解,单条件查询,可以-用做下拉框单条件查询功能

where+if(多条件查询)

  •  select *
     from tb_brand
     <where>
            <if test="brand.status != null"><!--相当于case-->
                and status = #{brand.status}
            </if>
            <if test="brand.companyName != null and brand.companyName != '' "><!--相当于case-->
                and company_name like #{brand.companyName}
            </if>
            <if test="brand.brandName != null and brand.brandName != ''"><!--相当于case-->
                and brand_name like #{brand.brandName}
            </if>
     </where>
  • 记得加and

模糊查询(在service里面改一下实体)

 String brandName = brand.getBrandName();
 if (brandName != null && brandName.length() > 0) {
    brand.setBrandName("%" + brandName + "%");
 }

多条件的话记得判断数据是否为空

修改status显示的值

 public String getStatusStr_ghy() {
    if (status == null) {
        return "未知";
    }
    return status == 0 ? "禁用" : "启用";
 }

这里getStatusStr_ghy完全没有任何定义,也可以传到前端去,但是一定要注意这个S要小写,得传statusStr_ghy这个字符串

B站弹幕:

1.fastjson 将对象转为JSON字符串,用的应该是get方法,键是方法名去掉get首字母小写

2.虽然实体类中没有定义statusStr变量,但有getStatusStr这个方法,这里应该是通过get的方法获取prop的

3.而prop对应的status属性,在mabtis中查询的时候对应getStatus方法,同样改为statusStr则对应GetStatusStr方法

 

黑马程序员Javaweb综合案例错误总结整理的更多相关文章

  1. 大数据-将MP3保存到数据库并读取出来《黑马程序员_超全面的JavaWeb视频教程vedio》day17

    黑马程序员_超全面的JavaWeb视频教程vedio\黑马程序员_超全面的JavaWeb教程-源码笔记\JavaWeb视频教程_day17-资料源码\day17_code\day17_1\ 大数据 目 ...

  2. 【黑马18期Java毕业生】黑马程序员Java全套资料+视频+工具

        Java学习路线图引言:        黑马程序员:深知广大爱好Java的人学习是多么困难,没视频没资源,上网花钱还老被骗. 为此我们历时一个月整理这套Java学习路线图,不管你是不懂电脑的小 ...

  3. 黑马程序员:Java基础总结----泛型(高级)

    黑马程序员:Java基础总结 泛型(高级)   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 泛型(高级) 泛型是提供给javac编译器使用的,可以限定集合中的输入类型 ...

  4. 黑马程序员:3分钟带你读懂C/C++学习路线

    随着互联网及互联网+深入蓬勃的发展,经过40余年的时间洗礼,C/C++俨然已成为一门贵族语言,出色的性能使之成为高级语言中的性能王者.而在今天,它又扮演着什么样重要的角色呢?请往下看: 后端服务器,移 ...

  5. 黑马程序员+SQL基础(上)

    黑马程序员+SQL基础 ---------------<a href="http://edu.csdn.net"target="blank">ASP ...

  6. 黑马程序员+Winform基础(上)

    黑马程序员+Winform基础 ---------------<a href="http://edu.csdn.net"target="blank"> ...

  7. 黑马程序员:Java基础总结----枚举

    黑马程序员:Java基础总结 枚举   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 枚举 为什么要有枚举 问题:要定义星期几或性别的变量,该怎么定义?假设用1-7分别 ...

  8. 黑马程序员:Java基础总结----GUI图形化界面

    黑马程序员:Java基础总结 GUI图形化界面   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流!   GUI(Graphical User Interface)图形化界 ...

  9. 黑马程序员:轻松精通Java学习路线连载1-基础篇!

    编程语言Java,已经21岁了.从1995年诞生以来,就一直活跃于企业中,名企应用天猫,百度,知乎......都是Java语言编写,就连现在使用广泛的XMind也是Java编写的.Java应用的广泛已 ...

  10. 【黑马程序员C++ STL】学习记录

    黑马程序员 2017 C++ STL 教程(STL 部分已完结) 基于黑马STL课程整理:黑马程序员2017C++STL教程 视频链接 专栏:本STL专栏目录 文章目录 黑马程序员 2017 C++ ...

随机推荐

  1. JavaScript的闭包和作用域

    作用域相关 作用域的概念: 作用域是在运行时代码中的某些特定部分中变量,函数和对象的可访问性.换句话说,作用域决定了代码区块中变量和其他资源的可见性: 作用域的类型: 全局作用域: 最外层函数和在最外 ...

  2. react 高效高质量搭建后台系统 系列 —— 结尾

    其他章节请看: react 高效高质量搭建后台系统 系列 尾篇 本篇主要介绍表单查询.表单验证.通知(WebSocket).自动构建.最后附上 myspug 项目源码. 项目最终效果: 表单查询 需求 ...

  3. Shell命令-基础

    Shell命令 1 变量 定义变量时,变量名不加美元符号$,注意,变量名和等号之间不能有空格 a="myname" 用语句给变量赋值时, for file in `ls /etc` ...

  4. 关于dynamic类型

    动态类型是从C#4才开始有的,随着DLR一起引人的. 大部分时候的行为如同object类型,对应的IL代码也是object类型. 它的特点是编译时会忽略在dynamic上进行的操作,如调用方法,读写属 ...

  5. 代码随想录算法训练营day17 | leetcode ● 110.平衡二叉树 ● 257. 二叉树的所有路径 ● 404.左叶子之和

    LeetCode 110.平衡二叉树 分析1.0 求左子树高度和右子树高度,若高度差>1,则返回false,所以我递归了两遍 class Solution { public boolean is ...

  6. Postgresql动态共享内存类型

    一.简介 linux为多个进程通信提供了不同的IPC机制,如:System V , POSIX 和 MMAP,所以Postgresql共享内存管理也支持以上类型. 在Postgresql中可以使用dy ...

  7. Python实战项目6-后端多方式登录接口/手机登录接口

    为开源项目共享代码 步骤: 1先fork开源项目 2clone下来,修改代码,进行提交 3提交pr,等作者同意 Pycharm 使用Git 右键文件会列出Git命令 登录注册功能分析 多方式登录接口: ...

  8. getUserInfo和getUserProfile被废弃

    之前得知获取用户头像和昵称的两个接口getUserInfo和getUserProfile被废弃了,于是我就想深入探究一下. 一直抱有一个疑问,为啥有getUserInfo和getUserProfile ...

  9. mysql版本升级 5.7.21-8.0.30

    当前MySQL版本为:5.7.21 升级前准备,了解5.7和8.0版本有何区别,本文主要为升级操作文档,具体建议参考官方文档,概括性的有以下几点: >默认字符集由latin1变为utf8mb4 ...

  10. 面向对象继承---复习:包含继承关系,里氏转换,ArrayList与Hashtable集合,文件处理

    using System; using System.Collections; using System.Collections.Generic; using System.IO; using Sys ...