小工具知识网

当前位置: 首页 > 行业知识 > 关于web学习的一些过程记录

行业知识

关于web学习的一些过程记录

2026-11-04 02:21:09 来源:互联网转载

Web开发基础知识

前端

HTML,CSS

JavaScript

基础语法
  • 定义变量

    • let

  • 处理字符串

    • 在 字符串 中找 字符

    • let x = "ZoranSunburst";x[0];// x[0]=Z
    • 在 字符串 中找 子字符串

      • 一些方法:

        • .length:获取字符串长度

        • .indexOf("..."):获取子字符串的首个字符在字符串中的索引,不存在这个子字符串时,会返回-1

        • .slice()

          • .slice(x,y)

            • 获取从x索引开始到索引为y的字符结束的子字符串

          • .slice(x)

            • 获取从x索引开始到字符串结束的子字符串

        • .toLowerCase()

          • 把字符串中所有字符转换为小写字母

        • .toUpperCase()

          • 把字符串中所有字符转换成大写字母

        • .replace("xxx","yyy")

          • 将字符串中xxx,替换成yyy

    后端

    SpringBoot入门

    简述

    • 世界上最流行的web框架技术

    • 快速搭建一个web项目

      idea中简单配置

      1. 创建工程勾选spring initializr

        由于3.x的spring boot只支持Java17以上的版本,所以将Server URL改为阿里云,不使用官网

      2. 选择Java,Maven(Java版本根据需求选择)

        如果需要修改坐标也可以一并修改

      3. 在依赖页中勾选Web --> Spring Web(在使用Java8、Java11时,选择2.x版本的spring boot)

      http协议

      这一块儿需要p60-p63多听几次,多记一下

      • http请求

        • GET 、POST 请求的区别

          • GET 请求有大小限制,参数放在请求行中

          • POST 无大小限制,参数在请求体中

        • 请求行

          • 请求方式(GET/POST),资源路径,协议

          • get请求的请求参数放在这里

        • 请求头

          • 格式:key : value

        • 请求体

          • post请求特有,存放请求参数

      • http响应

        • 相应结构

          • 响应行

            • 协议,状态码,描述

          • 响应头

            • 第二行开始,格式:key:value

          • 响应体

            • 最后一部分,存放响应数据

        • http 协议状态代码

          • 最常用代码:

            • 200 --> OK --> 正常运行

            • 404 --> URL NO FOUND --> 找不到请求的地址

            • 503 --> 服务器出现了一些问题

        • http协议解析

          • 不懂

        Tomcat

        • 是web应用服务器

        • 也被称之为Web容器,Servlet容器

          使用tomcat
          • spring boot的起步依赖已经内嵌了tomcat服务器

            原理是maven 依赖传递

            请求

            • 原始方法获取参数

              • Controller方法形参中声明HttpServletRequest对象

              • 调用对象的getParameter(参数名)

            • SpringBoot请求简单参数

              • servlet方式请求响应

              • spring boot方式请求

            • @RquestParam 注解

              • 方法形参名称与请求参数名称不匹配,通过该注解完成映射

              • 该注解的required属性默认是true,代表请求参数必须传递

            • 数组集合参数

              • 数组:请求参数名与形参中数组变量名一致

              • 集合:请求参数名与形参中集合变量名相同,通过@RquestParam 注解绑定参数关系

            • 日期参数

            • json参数

              • POST请求

              • 在请求体中

              • raw

              • 一般使用实体对象接受json,key键名要和形参属性名一致

            • 路径参数

              • 使用@PathVariable接收参数,请求路径格式:"/path/{...}/{...}/..."

                几种常见的HTTP请求的应用场景: Get:查看,具有幂等性,发起无论多少次get请求都不会改变服务器资源

                Post:创建,非幂等,通常用于创建新资源,如注册用户,发布帖子,请求订单

                Put:更新,具有幂等性,整体替换资源,而不是部分更新,请求正确执行的

                Delete:删除

                响应 p73

                • Controller的作用就是发出请求,设置响应数据

                  设置响应

                  • return 设置响应的内容

                    • 可以返回字符串给浏览器

                    • 可以返回对象给浏览器(返回的结果会是一个json格式的数据 )

                  • 设置了注解为RespondBody的类的返回值都会是响应的数据

                    • 元注解是修饰注解的注解

                  • @

                    响应实例

                    • Springboot项目的静态资源(html,css,js....)默认存放目录是:classpath:/static、classpath:/public、classpath:/resources

                      • classpath指的是类路径

                      分层解耦

                      • 三层架构

                        • 单一职责原则

                        • 什么是三层架构

                          • 控制层(Controller)

                            • 接收前端发送的请求,处理请求,响应数据

                          • 业务逻辑层(Service)

                            • 处理具体业务逻辑

                          • 数据访问层(持久层)(Dao)

                            • 负责数据访问操作,包括i增删改查

                      • 分层解耦

                      • IOC & DI入门

                        • 控制反转(IOC):对象的创建控制权由程序自身转移到外部(容器)

                        • 依赖注入(DI):容器为应用程序提供运行时,所依赖的资源,称之为依赖注入

                        • Bean对象:IOC容器中创建,管理的对象,称之为bean

                      • IOC详解

                      • DI详解

                        听不懂听不进去哈哈哈完蛋了

                        Mybatis

                        • 持久层开发(Dao)框架,用于简化JDBC的开发(减少代码编写)

                        • Mybatis可以写sql

                          案例 -> 使用Mybatis查询所有用户数据

                          • 步骤

                            1. 创建springboot工程,数据库表uesr,实体类User

                            2. 引入Mybatis依赖,配置Mybatis

                            3. 编写sql(注解/XML)

                              • 在使用注解方式时,使用@Mapper注解标注为持久层接口(数据访问层DAO的接口,也叫Mapper接口),定义方法后也要在注解上标明执行的sql类型(查询语句的注解为@Select,并在注解后的括号内写入SQL语句),SQL执行结果会自动封装到方法返回值

                              • 只需要定义接口,不需要编写实现类,Mybatis会自动生成对应的实现类

                          • 在连接Mybatis时,和jdbc的连接逻辑一致,需要配置:

                            • 驱动

                            • URL

                            • 用户名

                            • 密码

                            Lombok

                            简化实体类程序,省略编写getset方法,构造方法等方法,可以自动生成日志变量

                            最常用的注解是@Data(提供@Getter+@Setter+@ToString+@EqualsAndHashCode)

                            Mybatis基础操作(增删改查)

                            什么是pojo?po,vo是什么?

                            “Plain Old Java Object”“简单java对象”。POJO的内在含义是指那些没有从任何类继承、也没有实现任何接口,更没有被其它框架侵入的java对象。

                            PO是指持久对象(persistant object持久对象)。

                            VO是指值对象或者View对象(Value Object、View Object)。View Object。

                            • 如果Mapper接口方法形参只有一个普通类型的参数,#{...}里面的属性名可以随便写,如#{id},#{value},但是建议无论如何都保持两者一致

                            • Mapper注解会为Mapper接口创建代理对象,并将代理对象放入IOC容器

                              SQL预编译
                              • 防止sql注入问题

                              • 在定义SQL的时候使用 #{} 占位符就可以生成预编译SQL

                                有两种参数占位符:#{}、${}

                                #{}:

                                1. 执行SQL时会把#{...}替换成?,生成预编译SQL,自动设置参数值

                                2. 使用时机:参数传递,都使用#{...}

                                ${}:

                                1. 拼接SQL,直接将参数拼接在SQL语句中,存在SQL注入的问题

                                2. 使用时机:如果对表名,列表进行动态设置时使用

                                3. 相较于前者,它生成的不是预编译的SQL,性能会低,且存在SQL注入的风险

                                mybatis删除操作

                                1. Mapper接口类中:

                                   //根据ID删除数据 @Delete("DELETE FROM emp.emp WHERE id = #{id}")    //public int delete(Integer id); //参数占位符:#{参数} public void delete(Integer id);
                                2. Test 测试类中:

                                   @Autowired private EmpMapper empMapper; @Test public void testDelete() {​//        int delete = empMapper.delete(16);//        System.out.println(delete);     empMapper.delete(16); }

                                mybatis添加操作

                                1. Mapper接口类

                                @Insert("INSERT INTO emp.emp(username, name, gender, image, job, entrydate, dept_id, create_time, update_time)" + "VALUES (#{username},#{name},#{gender},#{image},#{job},#{entrydate},#{deptId},#{createTime},#{updateTime})")public void insert(Emp emp);
                                1. Test类

                                @Testpublic void testInsert(){ //Construct Emp object Emp emp = new Emp(); emp.setUsername("Taylor"); emp.setName("斯威夫特"); emp.setImage("1.jpg"); emp.setGender((short)2); emp.setJob((short)1); emp.setEntrydate(LocalDate.of(2000,1,1)); emp.setCreateTime(LocalDateTime.now()); emp.setUpdateTime(LocalDateTime.now()); emp.setDeptId(1);​ //Add new emp empMapper.insert(emp); //这个是调用empMapper接口类中的insert方法,向emp表插入了一个emp对象}
                                1. 主键返回

                                  • 在数据添加成功后,需要获取插入数据库数据的主键。如:添加套餐数据时,还需要维护套餐菜品关系表数据

                                @Options(useGeneratedKeys = true,keyProperty = "id")@Insert("INSERT INTO emp.emp(username, name, gender, image, job, entrydate, dept_id, create_time, update_time)" + "VALUES (#{username},#{name},#{gender},#{image},#{job},#{entrydate},#{deptId},#{createTime},#{updateTime})")public void insert(Emp emp);

                                就是在方法的上面加上一个Option注解,指定两个属性:useGeneratedKeys ,keyProperty

                                mybatis更新

                                • 更新分为查询和更新两个部分

                                • 代码大体上跟插入操作一致,只是在Mapper接口类中要用@Update注解

                                  @Update("UPDATE emp.emp SET username = #{username}, name = #{name}, gender = #{gender}, image = #{image}, job = #{job}, entrydate = #{entrydate}, dept_id = #{deptId}, update_time = #{updateTime} WHERE id = 1;")public void update(Emp emp);​// 测试类代码​​ @Test public void testUpdate(){     //Construct Emp object     Emp emp = new Emp();     emp.setId(13);     emp.setUsername("OldTaylorSwift");     emp.setName("旧泰勒斯威夫特");     emp.setImage("1.jpg");     emp.setGender((short)2);     emp.setJob((short)1);     emp.setEntrydate(LocalDate.of(2000,1,1));     emp.setCreateTime(LocalDateTime.now());     emp.setUpdateTime(LocalDateTime.now());     emp.setDeptId(1);​     //Add new emp     empMapper.update(emp); }​

                                  mybatis查询(根据ID查询)

                                  • 数据封装

                                    • 表中字段名和实体类的属性名一致时,可以自动进行封装

                                    • 不一致时无法封装

                                      • 解决不能自动封装的方法:

                                        1. 给字段起别名,让别名和实体类属性名一致

                                        2. 使用@Results,@Result注解手动映射封装(只用对字段名和实体类的属性名不一致的字段单独标注)

                                        3. 开启mybatis的驼峰命名自动映射开关(最好用这个方法)

                                        • 下划线命名会自动映射成驼峰命名

                                        • e.g. a_column --> aColumn

                                        • 在application.properties文件中输入camel,会自动联想这个开关

                                    mybatis查询(条件查询)

                                    • 查询结果可能是多个对象,要用List集合进行对象的封装

                                    • 接口方法:

                                      @Select("SELECT * FROM emp.emp WHERE name LIKE '%${name}%' and gender = #{gender} and entrydate BETWEEN #{begin} AND #{end} ORDER BY update_time DESC ")public List list(@Param("name")String name, @Param("gender")Short gender, @Param("begin")LocalDate begin, @Param("end")LocalDate end);

                                      XML映射文件

                                      • 作用是编写sql语句

                                      • 三点规范

                                        1. XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)

                                        2. XML映射文件的namespace属性为Mapper接口全限定名一致

                                          • 这个接口全限定名的获取方法:

                                        3. XML映射文件中sql语句的id与Mapper接口中的方法名一致,并保持返回类型一致

                                          • 当有返回值时,比如SELECT语句,就要额外加上“resultType”属性值,输入返回值的类型(要全限定名,获取方式跟上图一样)

                                      • 遇到的问题与解决:mybatis常见异常:Invalid bound statement (not found): com.ruoyi.news.mapper.RuoyiNewsMapper.selectRuoyiNe_invalid bound statement (not found): com.ruoyi.sys-CSDN博客

                                        总结:需要让xxxmapper.xml的层级结构和xxxmapper.class完全一致!否则在生成的target目录下就会发生错乱

                                        动态SQL

                                        • 随着用户输入或者外部条件而变化的SQL叫动态SQL

                                        • 动态SQL的三个标签

                                            • 使用test属性进行条件判断

                                            • 条件成立时拼接sql,否则不拼接

                                              where 标签作用

                                              1. 动态生成where关键字

                                              2. 自动去除条件前多余的or或者and

                                              3. 当where标签内所有条件都不成立时,连where子句都不会生成!

                                            • 未完待续 : )

                                          concat 函数 --> MySQL中字符串拼接函数

上一篇:万和燃气热水器品质揭秘,性能与质量双重保障,值得信赖!

下一篇:GPAC操作秘籍,上手快速掌握使用技巧!