JavaWeb基础(黑马配套)

本文详细介绍了SQL的基本查询、去重、别名、范围查询、null值处理、模糊查询、排序、聚合函数、分组与聚合、分页、约束与连接,以及Mybatis的Mapper XML配置、动态SQL、事务管理与API使用。适合初学者和进阶者学习数据库和ORM操作。
摘要由CSDN通过智能技术生成

本篇笔记仅供学习使用

SQL简单查询

在这里插入图片描述

  • select DISTINCT 属性 from 表名; //查询并去除重复记录

  • select NAME as 姓名,math as 数学成绩,english as 英语成绩 FROM stu; //起别名展示查询的数据

  • select id,name,age,sex,address,math,english,hire_date from stu WHERE age BETWEEN 20 and 30; //查询年龄20到30之间

  • select id,name,age,sex,address,math,english,hire_date from stu WHERE age in (18, 20, 22); //查询年龄为18或20或22的数据

  • select id,name,age,sex,address,math,english,hire_date from stu WHERE english IS null; //SQL语句中与null值比较要用is和is not

  • select id,name,age,sex,address,math,english,hire_date from stu WHERE name like ‘马%’; //模糊查询中 "_"代表一个字符 "%"代表随意个字符

  • 排序查询格式 : select 字段列表 from 表名 order by 排序字段 排序方式1, 排序方式2
    // asc升序 desc降序, 如果有多个排序条件,当前面条件一样才会根据后面的条件进行排序
    select id,name,age,sex,address,math,english,hire_date from stu GROUP BY age DESC;

  • 聚合函数 : count(列名) //求数量 max(列名) //求最大值 min(列名) //求最小值 sum(列名) //求和 avg(列名) //求平均值
    注意 : null值不参与任何聚合函数的计算

  • 分组查询语法 : select 字段列表 from 表名 [where 分组前条件限定] group by 分组字段名 [having 分组后条件过滤]
    select sex,avg(math),count() as 人数 from stu WHERE math > 70 GROUP BY sex desc HAVING count() > 2; //按性别分组查询分组后人数大于2的数学分数大于70的人的平均分和各组人数.

  • 分页查询语法 : select 字段列表 from 表名 limit 起始索引, 查询条目数;
    计算公式 : 起始索引 = (当前页码 - 1) * 每页显示的条数

约束

  • NOT NULL 非空约束
  • UNIQUE 唯一约束
  • PRIMARY KEY 主键约束
  • CHECK 检查约束
  • DEFAULT 默认约束 //不传值才生效
  • FOREIGN KEY 外键约束 //语法格式 : CONSTRAINT 外键名称 FOREIGN KEY(外键列名) REFERENCES 主表(主表列名)
  • PRIMARY KEY auto_increment 主键自增长 //不传值或传NULL才生效

多表查询

  • 隐式内连接 : select 字段列表 from 表1,表2 where 条件;
  • 显示内连接 : select 字段列表 from 表1 [inner] join 表2 on 条件
  • 左外连接查询 : SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件;
  • 右外连接查询 : SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件;

子查询

  • 即查询中嵌套查询
  • 子查询语句结果是单行单列,子查询语句作为条件值,使用 = != > < 等进行条件判断
  • 子查询语句结果是多行单列,子查询语句作为条件值,使用 in 等关键字进行条件判断
  • 子查询语句结果是多行多列,子查询语句作为虚拟表

事务

  • 开启事务 : BEGIN
  • 提交事务 : COMMIT
  • 回滚事务 : ROLLBACK

Connection API 功能

  • 获取执行SQL的对象
  • 管理事务 ① setAutoCommit(false) //开启事务
    ② rollback() //事务回滚 ③ commit() //事务提交

PreparedStatement API

  • 防止SQL注入
  • 预编译, 默认关闭, 开启需要在SQL连接的URL中加入useServerPrepStmts=true

Mapper.xml中实体类与数据库字段名称不一致

  • 使用resultMap标签映射数据库属性到实体类的属性
    <resultMap id="BrandReslutMap" type="Brand">
        <result column="brand_name" property="brandName"/>
        <result column="company_name" property="companyName"/>
    </resultMap>
	// colum 数据库列  property 实体类属性
  • 在xml文件中写数据库语言,占位符有两种,一为 #{}, 作用是替换为 ? , 二为 ${}, 作用是直接拼接字符串
  • CDATA区用以转义字符, 例如<, 在xml中会识别为标签起始符, 会报错, 用区可有效化解

动态SQL

  • if 标签
        <if test="status != null">
            status = #{status}
        </if>
        <if test="companyName != null and companyName !=''">
            and company_name like #{companyName}
        </if>
        <if test="brandName != null and brandName != ''">
            and brand_name like #{brandName};
        </if>
        /*存在问题: 第一个条件为空时报错
        解决方法: where 后加入 1 = 1 恒等式拼接and
                  使用<where>标签*/           
  • chose(when, otherwise) : 相当于Java的switch
<where>
            <choose>
                <when test="status != null">
                    status = #{status}
                </when>
                <when test="companyName != null and companyName !=''">
                    company_name like #{companyName}
                </when>
                <when test="brandName != null and brandName != ''">
                    brand_name like #{brandName}
                </when>
            </choose>
</where>
  • 主键返回 :
    <insert id="add" useGeneratedKeys="true" keyProperty="id">
        insert into tb_brand (brand_name, company_name, ordered, description, status)
        values (#{brandName}, #{companyName}, #{ordered}, #{description}, #{status});
    </insert>
  • update修改 使用set标签达到动态SQL效果
<update id="updateAll">
        update tb_brand
        <set>
        <if test="brandName != null and brandName != ''">
            brand_name = #{brandName},
        </if>
        <if test="companyName != null and companyName != ''">
            company_name = #{companyName},
        </if>
        <if test="ordered != null">
            ordered = #{ordered},
        </if>
        <if test="description != null and description != ''">
            description = #{description},
        </if>
        <if test="status != null">
            status = #{status}
        </if>
        </set>
        where id = #{id};
    </update>
  • 多条数据删除
<update id="updateAll"> //Mybatis会将集合数据封装为Map集合对象,所以要传递array
    <delete id="deleteByIdAll">
        delete from tb_brand
        where id in
        <foreach collection="array" item="id" open="(" close=")" separator=",">
            #{id}
        </foreach>
    </delete>
  • @Param注解 : 参数指向mapper.xml文件中传递的值的名称
  • @Param注解的作用是修改Map集合中的键值

Mybatis 使用

  • 首先获取SqlSessionFactory对象
  • 第二步获取SqlSession对象
  • 第三步获取Mapper
  • 第四步使用Mapper调用方法
  • 第五步释放资源
        //第一步
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //第二步
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //第三步
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //第四步
        User user = userMapper.selectUser(username,password);
        //第五步
        sqlSession.close();

form表单

  • 单选框 redio 提交要设置value属性, 才能将我们设置的值提交上去

Javascript语言

  • var定义变量特点 : ①全局有效 ②可以重复定义
  • let定义变量特点 : ①局部代码块有效 ②不可重复定义
  • const : 用来申明常量

五种原始数据类型 (类似Java基本数据类型)

  • number:数字(整数、小数、NaN(Not a Number))
  • string:字符、字符串,单双引皆可
  • boolean:布尔。true,false
  • null:对象为空
  • undefined:当声明的变量未初始化时,该变量的默认值是 undefined

  • == 判断进行类型转换 ===判断不进行类型转换

Javascript中的 String字符串

  • trim()方法可以清除字符串两端的空白字符

DOM获取Element对象

  • getElementById() :根据id属性值获取,返回单个Element对象
  • getElementsByTagName() :根据标签名称获取,返回Element对象数组
  • getElementsByName() :根据name属性值获取,返回Element对象数组
  • getElementsByClassName() :根据class属性值获取,返回Element对象数组

Servlet生命周期

  • Servlet方法实例化后,首先调用init()方法, 初始化该对象
  • 每次请求Servlet后, Servlet服务器会调用service()方法, 没请求一次就调用一次
  • 对象终止或服务终断后, 调用distroy()方法,仅调用一次
  • @WebServlet( loadOnStartup = x) 设置x的值可以设置Servlet对象创建的时机, 设置为负数则在第一次创建Servlet对象的时候创建, 设置为0或正数则在服务器启动的时候创建, 数字越小优先级越高
    在这里插入图片描述

想要提取出局部变量, 只需在成员变量声明一个同类型变量, 然后将局部变量赋值给成员变量就行

GET 和 POST 获取传递参数

  • GET会携带参数到URL, 直接用方法getQureyString()获取请求参数
  • POST参数在请求体中, 所以获取POST请求的参数要用获取字节输入流或者字符输入流
  • POST请求获取参数乱码采用先编码再解码的方式, 如下:
        //获取请求参数username
        String username = req.getParameter("username");
        System.out.println(username);
        //将username编码, 表现为二进制存入byte数组
        byte[] bytes = username.getBytes(StandardCharsets.ISO_8859_1);
        //将编码后的username再进行utf-8格式的解码
        username = new String(bytes, StandardCharsets.UTF_8);
        System.out.println(username);
  • GET请求获取参数, 直接设置输入流的格式, 即 : req.setCharacterEncoding(“UTF-8”);
    在这里插入图片描述

Java 提供的URL编码 解码

在这里插入图片描述

Request请求资源转发

在这里插入图片描述

Response重定向

在这里插入图片描述

Response响应字节数据

在这里插入图片描述

Response响应字符数据

    response.setContentType("text/html;charset=utf-8");
    PrintWriter writer = response.getWriter();
    writer.write("你好啊宝");

JSP页面

  • Tomcat内部会将JSP页面转换成一个类在编译展示出来
JSP三种脚本
①<%… %>内容放在_jspService方法中
②<%=… %>内容放到out.print中, 作为其参数输出
③<%!.. %>内容放到类的成员位置

三层架构

Cookie使用

在这里插入图片描述

  • setMaxAge()方法, 设置cookie的存活时间
  • cookie存储中文要使用URL编码和解码
  • cookie存储在浏览器中

Session使用

在这里插入图片描述

  • session存储在服务端中
  • sesion在服务端正常关闭的情况下会保存其中数据, 但默认保存时间为半小时

Session使用细节及自动销毁设置

在这里插入图片描述

Cookie和Session区别

在这里插入图片描述

Filter拦截器

  • 拦截资源路径设置
    在这里插入图片描述
  • 拦截器拦截代码分为放行前代码和放行后代码, 服务器提起请求执行放行前代码, 客户端给出响应执行放行后
    所以对request数据处在在放行前代码处理, 对response数据处理在放行后处理
  • 放行代码 : chain.doFilter(request, response)
  • 过滤器链没用在xml文件中配置,将按照类名排序决定先后执行顺序

拦截器设置未登录拦截时, 使用request获取URL会获取整个路径, 在进行放行资源时, 要用contains比对是佛出现在字符串中, 而不是用equal比对, 代码如下:

        String[] utls = {"/css/","/login.jsp","/imgs/","/loginServlet","/register.jsp"
                ,"/registerUserServlet", "/yanzhenServlet"};
        String url = res.getRequestURL().toString();
        System.out.println(url);
        for (String u : utls) {
            if (url.contains(u)) {
                chain.doFilter(request, response);
                return;
            }
        }

Ajax 快速入门使用

在这里插入图片描述

			//1. 创建对象
            var name = document.getElementById("username").value;

            var xhttp;
            if (window.XMLHttpRequest) {
                xhttp = new XMLHttpRequest();
            } else {
                // code for IE6, IE5
                xhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }

            //2. 发送请求
            xhttp.open("GET", "http://localhost:8080/brand-demo/selectUserServlet?username=" + name);//发送请求到对应URL
            xhttp.send();

            //3. 获取响应
            xhttp.onreadystatechange = function () {
                if (this.readyState == 4 && this.status == 200) {
                    if(this.responseText == "true"){//this.responseText即Servlet返回参数, 判断参数做出相应操作  Servlet用response.getWriter().write()方法返回参数
                        document.getElementById("username_re").style.display = "";
                    }else{
                        document.getElementById("username_re").style.display = "none";
                    }
                }
            };

Axios 快速入门使用

在这里插入图片描述
在这里插入图片描述

JSON 基础语法

在这里插入图片描述

JSON 和 Java对象转换

在这里插入图片描述

response响axios传递json数据流要设置中文, 使用response.setContentType(“text/json;charset=utf-8”);设置, 才能识别json数据流

Servlet获取前端发来的JSON数据, 因为JSON数据在request请求体中, 所以Servlet可以通过request获取字符输入流, 再读取一行数据即可得到JSON数据

    // 获取请求体数据
    BufferedReader br = request.getReader();
    String params = br.readLine();

Vue的快速入门

在这里插入图片描述

Vue常用指令

在这里插入图片描述

  • v - bind
    在这里插入图片描述
  • v - on
    v-on
  • v - if // v - elese - if // v - else // v - show
     v - if  // v - elese - if  // v - else // v - show
  • v - for 在标签上加了for循环, 所以div标签也会遍历多次
    v - for
  • vue生命周期
    vue生命周期

Vue中 v - on 绑定方法, 在new Vue中的JSON数据的键值为 methods, 而不是method

ELement快速入门

Element

  • 官网: https://element.eleme.cn/
  • 而prop对应的status属性,在mabtis中查询的时候对应getStatus方法,同样改为statusStr则对应GetStatusStr方法
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值