JavaStudy总结

总!

  • ## 7月9号:

    1. 学习的整体框架:

      preview

    2. Java 定义了 4 种整数类型变量:字节型(byte)、短整型(short)、整型(int)和长整型(long)。

      常量:final 数据类型 常量名

    3. 重要规范:

      • {}大括号里要有四个空格的缩进
      • 函数和函数中间应该有一个空行 空一行
      • if和else即使只有一句话,也要加上{}
      • 类名首个单词的首字母大写StudentManager,一般是名词
      • 函数首个单词的首字母小写printStudentInfo(),一般以动词开头 驼峰命名法
    4. 强制类型转换:

      ​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wiKhaBvv-1658893825559)(C:\Users\xuezihan123\AppData\Roaming\Typora\typora-user-images\image-20220711105935597.png)]

    5. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-87SaFFAj-1658893825561)(C:\Users\xuezihan123\AppData\Local\Temp\type.png)]

      1个字节=8位

      byte: 1个字节,不考虑负数能表示范围是:0255(2的八次方=256),考虑正负表示范围:-128127
      short:2个字节,16位 65536 0~65535
      int: 4个字节,考虑正负:-21亿~+21亿
      long:8个字节
      float: 4个字节
      double:8个字节
      char字符型:2个字节,采用的是Unicode编码每个字符在编码表里面都对应一个int整数
      Boolean: 只有true和false两种情况
    6. 数据类型转换:

      1、从小到大自动类型转换

      2、从大到小需要强制类型转换,可能会丢失精度

      byte->short(char)->int->long->float->double

    7. &&:两边的结果都是true,结果才是true

      ||:两边只要有一个是true,结果就是true

    8. 在程序运行前进行判断,若有非法输入,则使用:System.exit();

    9. **三目运算符号:**语法:boolean ? 数1 : 数2。

  • ## 7月11号

  1. 数组:int[] array = new int[4];

  2. java.lang.Array Index OutOf Bounds Exception: 4

    数组下标越界异常(Index:bounds:边界 OutOf:超出 Exception:异常)

  3. 数组的排序:冒泡排序 (双重For循环)

  4. 快捷键集合笔记链接:D:\思途笔记\笔记\快捷键集合.md

  5. instanceof:是二元运算符

    instanceof是Java中的二元运算符,左边是对象,右边是类;当对象是右边类或子类所创建对象时,返回true;否则,返回false。

  • ## 7月12号:

  • OOP: Object Oriented Programming 面对对象编程

  1. 类和对象:抽象、封装、继承、多态

  2. 数据类型的默认值:

    int类型默认值是:0

    double类型默认值是:0.0

    boolean类型默认值是:false

    String类型默认值是:null

    int[]类型默认值是:null

    Student[]类型默认值是:null

    boolean[]类型默认值是:null

  3. 属性私有,通过get、set方法访问。

  4. 构造方法:

    特点:1、方法名和类名一样 2、没有返回值

    //无参构造方法

    //如果不写,Java默认提供这样一个无参构造方法.

    //如果你写了,Java就不会再提供这个无参构造方法

  5. this代表当前对象,把通过构造方法传递过来的值,赋值给当前对象的id。

  • ## 7月13号

继承,重载,重写,抽象,多态

  1. 你继承谁你就是谁,继承是一种严格的父子关系(在父类里面抽取的属性和方法一定是所有子类所共有)

  2. private:只在当前类里面可以访问(子类也不能访问)

    public:任何地方都可以访问

    protected:提高代码复用性。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6hBOM7NR-1658893825561)(C:\Users\xuezihan123\AppData\Local\Temp\707_0 (1)].png)

  3. super();

  4. 重载(overload):

    在同一个类里面,允许存在一个以上同名方法,只要他们参数类型和参数个数不同即可。

    同一个类中看同名方法的参数列表。(构造方法重载)

  5. 重写/覆盖(@Override):

    1、子类覆盖父类,必须保证子类权限大于父类权限才可以覆盖,否则会编译失败。

    2、如果父类是private的方法,子类是默认方法,那么子类是不知道这个方法的,不是覆盖。

  6. 多态:

    在子类中重写父类方法,在测试类中创建方法时,声明写父类 如Cal cal;

    ​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K1c46CUU-1658893825562)(C:\Users\xuezihan123\AppData\Roaming\Typora\typora-user-images\image-20220713161349596.png)]

  7. 抽象类:

    1、抽象方法是没有方法体method),如果这个类里面有抽象方法,这个类必须变成抽象类。

    2、如果这个类是抽象类,并不要求这个类一定要有抽象方法

    3、抽象类里面可以有普通方法,也可以有抽象方法。

    4、如果一个类是抽象类,那么这个类就不能被new实例化,只能被其他类继承。

    5、抽象方法可以理解为父类(抽象类)定义的一个模板或者规范(自己本身不实现),子类必须实现这个抽象方法,如果子类不想实现这个方法,那么这个子类也必须要变成抽象类。

  8. 接口interface:

    1.接口是一个纯粹的抽象类(接口里面所有的方法都是抽象方法),接口里面的方法都是抽象方法 public abstract。

    2.接口里面所有的属性public static final

  9. 接口与抽象类的区别:🤕

    接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。另外,接口和抽象类在方法上有区别:

    ​ 1.抽象类可以有构造方法,接口中不能有构造方法。

    ​ 2.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。

    ​ 3.抽象类中可以有普通成员变量,接口中没有普通成员变量

    1. 抽象类中的抽象方法的访问类型可以是public,protected和默认类型

    2. 抽象类中可以包含静态方法,接口中不能包含静态方法

    3. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型

    4. 一个类可以实现多个接口,但只能继承一个抽象类。

  10. final:(最终的意思)

final变量:这个变量就不能被修改,常量 ,接口里面: public static final double PI = 3.1415;

final类:这个类就不能被继承

final方法:这个方法就不能被重写

  • 7月14号:
  1. static静态属性、静态方法:(经常被写成静态类Math,ArrayUtil)

    1、静态方法:如果一个static方法则最好使用【 类名 点 方法 】Student.print(),此静态方法属于这个类。静态方法中没有实例时,不能调用this super 。

    2、静态属性:

    3、静态的方法只能访问静态的方法和静态的属性(因为当前对象的实例可以没有创建,所以静态的方法是没办法调用非静态的方法和属性的)

    4、静态的方法中不能写this、super关键字(因为当前的对象实例可能还没有创建,代表当前类对象的this还有代表父类对象的super可能都还没有创建)

    5、非静态的属性和方法(实例属性和方法)必须通过new对象访问,而静态的属性和方法是属于类的,在类加载到内存中就可以访问,被所有对象所共享。

  2. String:

    • == 比较的是地址 equals 比较的是内容

    • s1 = “aBC”;

    • s1 = “AbC”;

    • s1.equals(s2); // false 不忽略大小写

    • s1.equalsIgnorecase(s2); // true 忽略大小写

  3. 常量池问题:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wQOTebGr-1658893825563)(C:\Users\xuezihan123\AppData\Local\Temp\701_0.png)]

  4. String API:

    startswith(String prefix/suffix) 以······开头 prefix 前缀 suffix 后缀

  5. String、StringBuffer、StringBuilder异同点:

    相同点:都是final类,都不能被继承。

    不同点:1、String长度是不可改变的,StringBuffer、StringBuilder长度是可变的。

    ​ 2、StringBuffer是线程安全(需要加锁,效率低)、StringBuilder是线程不安全(没有加锁,效率高)。

  6. 包装数据类型:

    Java是纯面向对象语言,int、double都是基本数据类型。

    int Integer

    char Character

    double Double

    long Long

    short Short

    boolean Boolean

    byte Byte

    定义全局的变量是用Integer ,局部方面的话

  7. 🆘Static静态代码块知识点笔记 ⭐️

    链接:https://app.yinxiang.com/fx/31dc0cd8-c357-4674-b331-c77128ebd79e

  8. ArrayList LineList HashMap HashSet:

    Collecton接口常用的子接口有:List接口、Set接口

    List接口常用的子类有:ArrayList类、LinkedList类(链表)

    Set接口常用的子类有:HashSet类、LinkedHashSet类

    List允许有重复的元素,有序。

    Set不予许有重复元素,无序。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mcTbacxk-1658893825563)(C:\Users\XUEZIH~1\AppData\Local\Temp\17200016-b868ad987c4947ceb76c42b44887c783.png)]

  9. 值传递和引用传递:💖

    又错了的人来回答一下:

    String a = “a”;

    String b = “a”;

    这样定义的a和b指向的是字符串常量区变量,地址是一样的,即用equals为true,用==也为true。

    但是

    String a =new String( “a”);

    String b = new String( “a”);

    这样是定义了两个堆内存对象,只能equals,不能==

    例题:

    String s1=new String( ” xyz ” );

    String s2=new String( ” xyz ” );//在堆中建了两个“xyz”,不是同一个

    Boolean b1=s1.equals(s2);

    Boolean b2=(s1==s2);

    System .out.print(b1+ ” ” +b2);

    答案:

    TRUE FALSE

  10. ​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CJDQQyPa-1658893825564)(C:\Users\xuezihan123\AppData\Roaming\Typora\typora-user-images\image-20220715092234861.png)]

    synchronized是Java中的关键字,是一种同步锁。

    它修饰的对象有以下几种:

    1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;

    2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;

    3. 修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象;

    4. 修改一个类,其作用的范围是synchronized后面括号括起来的部分,作用主的对象是这个类的所有对象。

  • ## 7月15号 MySql
  1. 主键:关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一

    标识一条记录,该属性组就可以成为一个主键 。

  2. 外键:如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外

    键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被

    称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。

  3. 字段属性设置:

    1、not null: 不为空,表示该字段不能放“null”这个值。不写,则默认是可以为空

    2、auto_increment: 设定int类型字段的值可以“自增长”,即其值无需“写入”,而会自动获得并增加

    此属性必须随同 primary key 或 unique key 一起使用。primary key = unique key + not null

    3、primary] key: 设定为主键。

    是唯一键“加强”:不能重复并且不能使用null,并且可以作为确定任意一行数据的“关键值”,

    最常见的类似:where id= 8; 或 where user_name=‘zhangsan’;

    通常,每个表都应该有个主键,而且大多数表,喜欢使用一个id并自增长类型作为主键。

    但:一个表只能设定一个主键。

    4、unique [key] : 设定为唯一键:表示该字段的所有行的值不可以重复(唯一性)。Duplicate entry ‘zhangsan’ for key ‘name’

    5、default ‘默认值’: 设定一个字段在没有插入数据的时候自动使用的值。

    6、comment ‘字段注释’

  4. PRIMARY KEY 主键,不能重复,唯一确定一条记录 (unique+not null)

    AUTO_INCREMENT 自动增长

    varchar(10) char(10)区别:

    同点:都可以最大放10个字符

    不同点:char(10)不管输入的是多少都会占10个字符,例如输入名字“张三”只有两个字符,

    但是使用char(10)在数据库里面还是占10个字符的空间。

    使用varchar(10)最大支持是10个字符,但是实际长度就是输入字符长度,例如输入名字“张三”只有两个字符,

    那么在varchar(10)里面就只占两个字符。

  5. 联合主键:

    PRIMARY KEY(banji_id,course_id), -- 联合主键  
    
    FOREIGN KEY(banji_id) REFERENCES banji(id), -- banji_id既是联合主键又是外键  
    FOREIGN KEY(course_id) REFERENCES course(id) -- course_id既是联合主键又是外键);
    
  6. 多表查询:

    SELECT * FROM student WHERE banji_id=2;
    SELECT id FROM banji WHERE `name`='java1812';
    SELECT * FROM student WHERE banji_id=(SELECT id FROM banji WHERE `name`='java1812');
    
  7. inner join(关联查询):

    ​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pGwxi0rc-1658893825565)(C:\Users\xuezihan123\AppData\Local\Temp\668_0.png)]

  8. **select查询:**group by之后使用having

    -- 4、查询该店每个栏目下挤压的货款 > 20000
    SELECT cat_id,SUM(goods_number*shop_price) AS total_price
    FROM goods GROUP BY cat_id HAVING total_price>20000;-- having
    
  9. 模糊查找:like

    1、like模糊查找用于对字符类型的字段进行字符匹配查找。

    2、要查找的字符中,有两个特殊含义的字符:% , _:

    ​ 2.1: %含义是:代表0或多个的任意字符

    ​ 2.2: _含义是:代表1个任意字符

    ​ 2.3: 这里的字符都是指现实中可见的一个“符号”,而不是字节。

    3、语法:like ‘%关键字%’

    SELECT * FROM student WHERE `name` LIKE '张%'; -- 以张开头
    SELECT * FROM student WHERE `name` LIKE '张_'; -- 以张开头,而且名字是两个字
    SELECT * FROM student WHERE `name` LIKE '%张%'; -- 名字里面只要有张就可以
    
  10. 分组查询:

  11. 范式

    第一范式原子性

    第二范式唯一性(消除非主键依赖联合主键中的部分字段)

    第三范式独立性,消除传递依赖(非主键值不依赖于另一个非主键值,都应该依赖于主键)

  12. 异常:

    • ArrayIndexOutofBoundsException 数组下标越界异常

    • NullPointerException 空指针异常

    • StringIndexOutofBoundsException 字符串下标越界异常

    • ArithmeticException 算数异常

    • ClassCastException 类型转换异常

    ​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PANw0IjR-1658893825565)(C:\Users\XUEZIH~1\AppData\Local\Temp\Image.png)]

    ​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ChHjrvFR-1658893825566)(C:\Users\xuezihan123\AppData\Roaming\Typora\typora-user-images\image-20220719091038345.png)]

    多重捕获块(多个catch)

    try {

    ​ 需要检测的代码(可能会抛出异常,也可能不会抛出异常)

    } catch (异常的类型1 异常类型的变量1) {

    ​ 捕获异常后处理异常

    } catch (异常的类型2 异常类型的变量2) {

    ​ 捕获异常后处理异常

    } catch (异常的类型3 异常类型的变量3) {

    ​ 捕获异常后处理异常

    } finally {

    ​ 一定会被执行的代码(不管异常抛不抛出都会执行,例如数据库释放连接)

    }

    自定义异常:

    1、所有的异常的都是Throwable的子类

    2、如果写一个运行时异常,需要继承RuntimeException

    3、如果要写一个编译时异常,继承Exception

    案例:模拟银行转账,可以实现存钱和取钱的功能取钱时候如果余额不够就抛出异常

    MeiQianException

  13. JDBC

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QPjuX6Vj-1658893825567)(C:\Users\xuezihan123\AppData\Roaming\Typora\typora-user-images\image-20220718160638014.png)]

  14. JDBC开发步骤:😵

    1、加载驱动Class.forName(“”);

    2、获得连接对象Connection

    3、写sql语句

    4、创建Statement(一艘船)

    5、执行sql语句

    ​ (1) 更新类(更改了表里面数据):delete/update/insert executeUpdate()

    ​ 返回值:int,表示你影响的行数

    ​ (2)查询(没有改变表里面数据): select executeQuery()

    ​ 返回值:结果集ResultSet6、关闭连接

  • ## 7月19日

  • HTML:超文本标记语言 定义页面结构

  • CSS:层叠样式表 页面显示的样式

  • BootStrapJS: JavaScript 界面交互(动态交互) JQuery

  1. HTML:


      1.  
         &lt ; less than <  &gt great than > &copy &copy; 
             &lt; h1 &gt; 在HTML页面输出:<h1>
        

        table:

        th:table head

        tr:table row

        td:table data 单元格

        1. form表单:
    • Css:

      **语法:**选择器 { 属性名1:属性值1; 属性名2:属性值2; 属性名3:属性值3; 属性名4:属性值4;}

      **CSS使用:**1、通过选择器选择上标签2、在选择的标签上设置样式

      **选择器分类:**标签选择器: p{}类选择器: .className{}id选择器: #id{}

      一些常见的样式:

      color:red; 文字颜色 font-size:40px; background-color:blue;

      text-decoration:underline;//下划线 text-decoration:none; //去掉下划线

      1. CSS高级选择器:(直接看代码)前三个重要

        s1 s2 后代选择器

        s1,s2 并集选择器(选择器组)

        s1s2 交集选择器(既满足选择器1也满足选择器2)

        s1>s2 直接儿子选择器,和后代选择器不一样

        s1+s2 下一个兄弟选择器,后面紧挨着的第一个兄弟

    • 盒模型:

      盒子中主要的属性就5个:width、height、padding、border、margin。

      padding:内边距 margin:外边距

    • **border:**就是边框。

      边框有三个要素:粗细、线型、颜色。

      实线:solid 点:dotted 虚线: dashed

      颜色如果不写,默认是黑色。另外两个属性不写,显示不出来边框。

      border是一个大综合属性:border:1px solid red;

      border属性能够被拆开,有两大种拆开的方式:

      1) 按3要素:border-width、border-style、border-color

      2) 按方向:border-top、border-right、border-bottom、border-left

    • 什么是Bootstrap? 简洁、直观、强悍的前端开发框架,让web开发更迅速、简单。

  • ## 7月20号:
  1. JS:解释型语言

    • 变量都用var,console.log();用来输出值。使用网页端的F12查看

    • DOM:

      元素节点的获取:document.getElementById( id属性值);document.getElementsByTagName(“标签名”);

    • 关系运算符:

      全等:===

      不全等:!==

      判断值是不是相等 ,还有类型是不是相等。

      Image

    • String和java一样使用:String常用的方法:

      1、大小写转换

      str.toLowerCase();

      str.toUpperCase();

      var str = “Hello jS!”;

      console.log(str.toLowerCase());//hello js!

      console.log(str.toUpperCase());//HELLO JS!

      2、获取指定字符:

      str.charAt(index)

      返回指定位置的字符index:字符位置

      console.log(str.charAt(6));//j

      3、查询指定字符串出现索引

      str.indexOf(findstr, [index]);

      str.indexOf(findstr);

      str.indexOf(findstr,index);

      str.indexOf(findstr,[index])

      str.lastIndexOf(findstr, [index]);

      使用说明:

      findstr:查找的字符串index:开始查找的位置索引,可以省略

      返回findstr在x中出现的首字符位置索引,如果没有找到则返回-1

      lastIndexOf:从后面找起
      4、split() 方法用于把一个字符串分割成字符串数组。

      x.split(separator,howmany)

      separator : 字符串或正则表达式,从该参数指定的地方分割 stringObject

      howmany:指定返回数组的最大长度,可以省略返回分割后的字符串数组

    • Boolean

      Java中条件表达式必须返回布尔类型

      2<3

      JS中表达式可以是任意表达式.

      Image

      1107_0

      1不是0,就是非空值,表示true。

      在JS里面一切表示空的值都是false,非空的值都是true。

    • eval:

      console.log(eval(‘2+3’)); //5

      eval(‘var x=10;var y=20;console.log(x*y);’); //200

    • innerText 直接当成一个字符串展示

      innerHtml 将内容当成html来解析

    • 数组:

      push pop 输入输出数据

  2. Servlet:

    • ​ 实现步骤:1、创建类继承HttpServlet 2、覆盖未实现的方法–service方法[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3lHI776j-1658893825568)(C:\Users\xuezihan123\AppData\Local\Temp\1146_0.png)]

    • JSP:

      Servlet的作用: 用java语言开发动态资源的技术!!!

      JSP的作用:用java语言(+html语言)开发动态资源的技术!!!

      JSP就是servlet!!!

      JSP的脚本:(脚本就是一段代码)

      语法:<%java代码 %>

      作用: 执行java代码

      JSP表达式:

      语法:<%=变量或表达式%>

      作用: 向浏览器输出变量的值或表达式计算的结果

  • ## 7月21号(servlet连接jsp 可以页面显示了)
  1. Servlet生命周期使用的方法:(面试会问)

    构造方法:创建servlet对象的时候被调用。默认情况下,第一次访问这个servlet的时候调用构造方法创建对象。

    构造方法只被调用一次,servlet对象在tomcat是单实例的。

    init方法:initial 创建完servlet对象时候调用。只调用1次。

    service:每次浏览器发出请求时候调用这个方法。调用n次。

    destroy:销毁servlet对象的时候调用。停止服务器或者重新部署web应用时候会销毁servlet对象。只调用1次。

  2. 给超链接添加点击事件并触发:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vfsk5P4P-1658893825569)(C:\Users\xuezihan123\AppData\Local\Temp\1148_0.png)]

  3. Servlet中的Get和Post对比:

    1. Get:

      1、采用URL请求路径传输参数。参数拼接在URL后面。

      2、参数传输过程中隐私性较差,直接在URL后面。

      3、路径可以容纳的数据有限,只能传递少量参数。

      4、所有请求默认就是get。

    2. POST:

      1、采用实体内容传参数。

      2、参数在传输过程中不可见,隐私性好。

      3、实体内容专门用来传输数据,大小没有限制。

      4、使用:在form上加method=“post”

    不管是Get方式还是POST方式传参数,后台代码获取参数的方式都是一样的。

    req.getParameter(“name”);

  4. 乱码问题解决:去网上搜

  5. 转发:(用于SelectAll的servlet)

    req.setAttribute(“list”, list);

    req.getRequestDispatcher(“student_list.jsp”).forward(req, resp);

  6. 重定向:(操作完成后返回之前的页面)

    一般添加、删除、修改之后重定向到:查找所有

    resp.sendRedirect(req.getContextPath() + “/student?method=selectAll”);

    重定向的地址最终是由浏览器发送这个请求,浏览器只能定位到服务器上的tomcat,tomcat下面可能会有多个项目,无法确定是哪个项目,所以需要加上项目名。

    重定向:是服务器把这个请求地址告诉浏览器,然后浏览发送这个请求/JavaWeb/student?method=selectAll

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-09XkKZVl-1658893825571)(C:\Users\XUEZIH~1\AppData\Local\Temp\chrome_drag2028_12940\Image.png)]

  7. 前台往后台发请求方式:

    1、form表单

    2、超链接

    <a href="/JavaWeb/student?method=delete&id=1">删除</a>
    

    3、location.href

    4、ajax

  8. 总结以下:

    1. 建表,明确属性;

    2. Mysql可以使用工具类JDBCUtil。(包含连接数据库的静态方法,异常抓取和关闭全部链接connection之类的)

    3. 创建pojo文件,写清私有属性(和数据库对应好),set get方法写全;

    4. 明确对数据的操作,具体是什么如何实现,创建servlet文件,对应操作写方法。

      • 先创建值为空的connection,statement
    5. 写出对应的jsp,传值取值要注意。

      跳转到一个JSP页面有两种方式:

      1、浏览器直接请求这个JSP页面,一般这个页面不需要数据(查询页面等不需要输入的页面)
      2、先访问Servlet,然后转发到这个JSP页面,访问Servlet可以可以查询数据,放到req中,转发到JSP页面展示(最常用的方法)
  • ## 7月22日 分页
  1. 使用到的SQL语句:select * from student LIMIT 0,5;(LIMIT offset, rows:分别表示偏移到哪个位置,rows表示往下数多少个数。)

    pageNo,pageSize 2,5 3,5

    *limit (pageNo-1)pageSize ,pageSize

    示例图:

    1153_0 1163_0
  2. 需要封装一个方法类PageInfo,作用是存储用到的数据,如:pageNo,pageSize,totalCount, totalPage

  3. 测试main函数:

    public static void main(String[] args) {
        int totalCount = 12;
        int pageSize = 5;
        int totalPage = (int)Math.ceil((double)totalCount / pageSize);
        System.out.println(totalPage);// 2
    }
    
  • 7月25日
  1. Cookie、Session、ServletContext

  2. 域对象:

  3. 过滤器filter与登陆:

  4. MVC

    Controller:完成接收的数据的封装(就是之前的servlet,不过少了数据库的那一部分)

    在此之前需要new一个service:

    private IStudentService studentService = new StudentServiceImpl();//类型是接口 new的是接口的实现
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SPO5kC8i-1658893825572)(C:\Users\xuezihan123\AppData\Roaming\Typora\typora-user-images\image-20220725170926717.png)]

    Service和ServiceImpl:实现业务逻辑(举例分页的实现)

    public interface IStudentService {
        List<Student> selectAll();
        void deleteById(Integer id);
        void add(Student student);
        Student selectById(Integer id);
        void update(Student student);
    }
    
    public class StudentServiceImpl implements IStudentService {
        private IStudentDao studentDao = new StudentDaoImpl();
    
        @Override
        public List<Student> selectAll() {
            return studentDao.selectAll();
        }
    
        @Override
        public void deleteById(Integer id) {
            studentDao.deleteById(id);
        }
    
        @Override
        public void add(Student student) {
            studentDao.add(student);
        }
    
        @Override
        public Student selectById(Integer id) {
            return studentDao.selectById(id);
        }
    
        @Override
        public void update(Student student) {
            studentDao.update(student);
        }
    }
    

    Dao和DaoImpl:最基本的增删改查

    public interface IStudentDao {
        List<Student> selectAll();
        void deleteById(Integer id);
        void add(Student student);
        Student selectById(Integer id);
        void update(Student student);
    }
    
     @Override
        public void add(Student student) {
            Connection connection = null;
            PreparedStatement statement = null;
            try {
                connection = JDBCUtil.getConnection();
                String sql = "insert into student(name,age,gender) values(?,?,?)";
                statement = connection.prepareStatement(sql);
                statement.setString(1, student.getName());
                statement.setInt(2, student.getAge());
                statement.setString(3, student.getGender());
                System.out.println(statement);
                int count = statement.executeUpdate();
                System.out.println(count);
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            } finally {
                JDBCUtil.close(connection, statement, null);
            }
        }
    
  5. 4354635

  6. 45234

  7. 534

  8. 53243

  9. 55

  10. 43

  • 7月26日 Day13
  1. JS DOM

  2. JQuery

    toggle开关;若开则关,若关则开。

  • 7月27号 Day14
  1. Ajax
  • 打个梵蒂冈

  • 发多少郭德纲

  • 工时费

  • 发多少刚发的

  • 发多少刚刚的

  • afdsg

  • 发多少郭德纲

  • 钢塑复合管的话

  • [x]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值