知识梳理加项目优化

技术的语言表达

JavaSE

程序逻辑流程

面向对象(OOP):编程思想;编码量,使用一些封装继承,工作后理解会越来越深

API:后面学的都是API(servlet和后面的框架也是API),不可能从底层开始写代码,要调用方法

如:
类.属性.方法()

System.out.println()

二阶段

数据库:最大优点为查询方便

JDBC:一个用java连接数据库的api

开启数据库服务:net start mysql

image-20200817095245962

装软件是安装MySQL的服务

前端:HTML CSS JavaScript jQuery

只写前端中小型公司做不到

我们要求把前端页面做规整,稍微美化一下,看到舒服一些

JavaWeb:和服务器具有交互功能的动态网站

一、数据库

image-20200817101324568

retrieve检索,查询

DBA:大型公司有的数据库管理员

权限:grant授予 revoke收回 deny拒绝

transaction:事务

CRUD

image-20200817100600492

约束:保证数据完整性(真实有效)

​ 主键

​ 唯一键

​ 外键:引用完整性,降低冗余(把表分出去),查询变慢(传统项目,三界范式)

​ 默认值

​ 非空

​ 检查约束:MySQL

公司不差钱,都放一个表里面,但也不是一个外键都没有,会变少:

image-20200817103441103

单表查询

image-20200817101621682

顺序不可更改

image-20200817112305721

标准写法

image-20200817112330815

多表查询

外连接

image-20200817112904402

完全外连接(项目里没什么意义)

UINON:自动去重;可以用UINON来模拟效果

image-20200817113819035

image-20200817113854799
子查询(最灵活,什么都可以用)

用外连接查询,内连接是查询不出来的

image-20200817115235485

用子查询

image-20200817115225752

相关子查询(用函数):括号内用到外层的东西,不能单独执行

exists 嵌套子查询,有数据为真,没有就为假

image-20200817115554479

不用函数的相关子查询

image-20200817120703727

image-20200817121216692

临时表必须有别名

image-20200817121501879

image-20200817121718481

解决乱码

乱码本质:编码和解码不一致

编码和解码设置成一样的就不会乱码

image-20200817143721132

数据库设置一下编码格式

image-20200817144127535

练习:

4题.

image-20200818094129462

6题:两张临时表

image-20200818095210726

9题

image-20200818100145712

image-20200817152444398

函数替换null

image-20200817152520037

二、JDBC

2.1 Eclipse使用详讲

还有很多公司在用Eclipse(免费)

1.test不能有参数和返回值

image-20200817161747055

2.2 打jar包

java只设计了接口,但不实现,让数据库生成厂商去实现

image-20200817163721204

把工具项目打成包,不要选择test包

右键打成jar包,搜索jar

ctrl+shift+o自动优化包

测试类,和src同级别

image-20200817164502788

​ 每一个方法对应一个测试类

image-20200817164529641

2.4 配置连接池

image-20200817165940919

C3P0管理连接池

image-20200817171519872

类路径就是src下

image-20200817170021988

配置成自己的信息

image-20200817170044578

理解含义,不用改

image-20200817170329582

用连接池获取连接

image-20200817170645112

2.5 封装CRUD

JMeter;Maven后面要学的;都是apache阿帕奇的

beanUtils明天用;DBCP也是连接池

我们用dbutils

以后数据库增删改这么写

后获取连接源

image-20200817172022379

先获取连接源

image-20200817172217012

  • 查询自己上网查怎么写

2.6 使用JDBC连接MySQL数据库需要的jar包

image-20200817172513779

A都要自己写

B连接不需要自己写

C增删改查不需要自己写

D都不需要自己写

2.7 关闭数据源

执行test方法之前创建TxQueryRunner对象

image-20200818103712828

基本类型都用包装类型

image-20200818103935009

一个类的对象就是一个bean

image-20200818104437198

2.8 查询

1.查询一个

image-20200818104527207

2.查很多

alt+shift+L;

image-20200818105005202

3.单行单列查询

image-20200818105728987

4.转map

image-20200818105520682

5.转ListMap

image-20200818105744981

6.连表查询

image-20200818111557613

用map接收

在把map转成bean,使用工具包

image-20200818111938524

image-20200818112334460

image-20200818112820347

teacher封装的类(就这么写)

image-20200818113152330

里面帮你新建了对象,而且帮你抛了异常,直接用new对象接受就可以了

image-20200818213343330

7.三表查询

增加一个中间表,转换成两个多对多

image-20200818224231457

image-20200818171332646

image-20200818160648614

查询一门成绩

image-20200818160244583

所有成绩

image-20200818160528051

image-20200818160608347

查询某号课程和选择这门课程的所有学生

后面连表查询可不可以用map来写?

image-20200818172327054

查询所有课程,和选择这门课程的所有学生

image-20200818172646156

查询指定的学生和该学生选修的所有课程

查询所有学生和该学生选修的所有课程

敲熟,就这么点事

image-20200818171228241

  • 练习:

image-20200818115435711

1.查询所有员工

image-20200818152733680

2.不能用连表(用Map做),查出来是两个bean,应该是一个bean

image-20200818153605207

image-20200818153435040

3.查询所有部门及部门里的所有员工

image-20200818154056073

2.9 分层建包

建立外键关联关系:

关系模型:数据库中体现关系的只有一个字段;子表体现关系,主表中没有

对象模型:一般不写id(如private Integer sid),而是写对象,用的时候就查,不用可以不查;多对一就是一个集合

一对一:在外键类新建一个主键对象

一对多:在主键类建立一个外键类对象的集合

多对多:转成一对多或多对一

image-20200818111319323

2.10 规则

属性指的是get和set,起名要规范,属性和字段要对上,

如name对应getName和setName,否则或报各种错误

image-20200818142018702

创建有参,一定把无参的构造器写上

image-20200818142327112

注意:对象名和列名不能一样:score一样,赋值时会报错

image-20200819093751058

三、JavaWeb

image-20200819093630807

3.1 Eclipse配置tomcat环境

3.2 创建JavaWeb项目

2.5没有注解,3.0有注解

连接源码

3.3 Servlet

image-20200819101459416
3.3.1三个生命周期方法两个使用方法

image-20200819112153766

把封装好的config接收一下,返回就不为null了

image-20200819112652017

image-20200819112223939

3.1.2.servlet继承HttpServlet

1.约束文件和配置

image-20200819110350890

image-20200819104937617

2.init方法

调用父类GenericHttp中,给定义好了,就不为空了

image-20200819112652017

image-20200819113252012

要自己定义用下面的模板方法(重载方法)

image-20200819114847427

image-20200819113438330

初始化:第一次惩罚,现在一般都配上

默认第一个用户访问的时候初始化,配置好这个默认启动tomcat时全部加载好

image-20200819110921316

3.配置自定义初始化参数

获取自定义参数(获取一个和获取所有)

image-20200819115935910

4. doGetimage-20200819153646259

重写service,里面会强转servletrequest,然后调用doget和dopost

image-20200819155140187

5. doPostimage-20200819153657441

6.状态码

302重定向

image-20200819153742359

3.4 XML

html:浏览器显示效果

xml:存储数据,配置文件

1.基本语法规范

image-20200819105520730

2.约束文件:用别人的框架,去配资文件要遵循一定的规则

image-20200819105626872

有两种:.dtd和.xsd

3.5 MVC模式

3.5.1 Module(逻辑层+数据层)

数据

3.5.2 View(表示层)

页面

3.5.3 Controller(表示层)

Servlet

三层

表示层:UI用户界面(控制台,Windows,Web)

业务逻辑层:处理特定业务需求:中间层,实际商业项目最复杂的是业务

数据访问层:执行数据库CRUD

3.6 分层—注册

3.6.1 控制层(service+dao)

uid主键

​ 自动增长

​ 业务主键 学号 学员代码-系代号-入学年份-班级编号-01

三个方法

按规范建立test类

image-20200820111144223

dao层直接操作数据库

image-20200820111548308

登录,注册判断没必要返回boolean值,抛个异常就好了,新建一个userexception类

其实没必要打印异常信息,这里是为了方便开发者自己查看,加了个打印

image-20200820112352188

具体逻辑

image-20200820112518632

1.三个异常是平级的,但前两个是用户异常,捕获的是dao异常,不会捕获到用户异常,最终都抛给调用者来处理

image-20200820112851869

2.或者在dao层直接抛系统异常

image-20200820141307830

捕获抛的对应的异常,抛出自定义异常

image-20200820141359519

3.或者test测试:最上层的调用者(跟service是同层的)来处理异常(测试,获取异常信息)

image-20200820113147085

在spring框架里非受查异常最简单,受查异常有一套处理方法,平时还是写非受查异常

最复杂的是业务,要求越多,逻辑越复杂;业务要去公司去了解,根据客户的需求来分析业务,没做过这个行业根本不懂其中的细节怎么用业务实现,首先要去理解客户的专业名词,搞清楚客户行业的流程

如借书,每个业务都需要操作好几张表

image-20200820115044091

如论坛发帖

image-20200820115224701

3.6.2 表示层

1.数据验证

前端验证:js或jQuery,验证插件

​ οnsubmit=“boolean”

​ 不要相信前端,传过来的信息是有问题的,用户可以绕过前端

​ 前端也要有验证,可以减轻服务器的压力,例如格式,长度,一致等这些验证

​ 内网部署可以不写后端,都是自己人,没人攻击网络

后端验证:Servlet使用Java代码验证

​ 确保执行业务之前,数据有效

​ 部署到外网的必须有后端

ajax验证:提高用户体验,还是靠

​ js(XmlHttpRequest)请求服务器

2.注册验证

同步请求流程

image-20200820160624471

image-20200820155939423

验证格式用正则表达式:

image-20200820160251714

没有通过

image-20200820160840092

通过验证

image-20200820161324903

回显一个验证的信息到注册页面

image-20200820161424043

数据回显:通过el

image-20200820162648747

添加数据回显

image-20200820162853015

3.7 登录

image-20200820165449376

image-20200821093441031

验证码,要给一个流,传图片用字节流,传文本一般用字符流

image-20200821095029331

流程

image-20200821121022826

得到验证码文本,要先调用getImage,才有getText

image-20200821095653221

切换图片验证码

changeImage():

image-20200821100533366

调用登录

image-20200821143514750

3.8 分页

3.8.1 sql语句

3.8.2 pageBean<T>

image-20200821121440447

totalPage的set可以不要,get是算出来的

image-20200821111812182

image-20200821143157182

image-20200821114504439

image-20200821121537569

jsp页面

image-20200821121622534

image-20200821121641812

页面控制

image-20200821121703585

页码数量的控制,把begin和end加入pageBean,也不需要get和set,写一个方法进行赋值

image-20200821152911123

这个注意要放在最后,要用到前面的值

image-20200821155113973

把totalpage改成getTotalPage()

image-20200821153952687

3.9 多条件组合查询(分页)

关键拿到dao层的条件,在外面拿到一个sql

方法为进行sql的拼接

image-20200821170445438

因为不知道有多少个参数,用数组也不好用,所以用集合转成数组来传参

image-20200821170623767

image-20200821170819367

在params里面再添加两个参数,limit后面的

画红线的写错了,要接收一个新的sql,不然语句没有变,还是原来的

image-20200821171655674

封装成一个完整的pageBean,跟前面分页是一样的

3.10 uuid加密

uuid:可以按照特定的算法,生成一个不重复的32位

的字符串,算上-是36位

数据库里:(有是有,但是最终用java来做)

image-20200820104954109

image-20200820105827177

java

image-20200820105041643

image-20200820105101864

MD5加密,做了一个转换,核心方法是diget()

image-20200820105901569

下面是CommomUtils里

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值