知识梳理加项目优化
技术的语言表达
JavaSE
程序逻辑流程
面向对象(OOP):编程思想;编码量,使用一些封装继承,工作后理解会越来越深
API:后面学的都是API(servlet和后面的框架也是API),不可能从底层开始写代码,要调用方法
如:
类.属性.方法()
System.out.println()
二阶段
数据库:最大优点为查询方便
JDBC:一个用java连接数据库的api
开启数据库服务:net start mysql
装软件是安装MySQL的服务
前端:HTML CSS JavaScript jQuery
只写前端中小型公司做不到
我们要求把前端页面做规整,稍微美化一下,看到舒服一些
JavaWeb:和服务器具有交互功能的动态网站
一、数据库
retrieve检索,查询
DBA:大型公司有的数据库管理员
权限:grant授予 revoke收回 deny拒绝
transaction:事务
CRUD
约束:保证数据完整性(真实有效)
主键
唯一键
外键:引用完整性,降低冗余(把表分出去),查询变慢(传统项目,三界范式)
默认值
非空
检查约束:MySQL
公司不差钱,都放一个表里面,但也不是一个外键都没有,会变少:
单表查询
顺序不可更改
标准写法
多表查询
外连接
完全外连接(项目里没什么意义)
UINON:自动去重;可以用UINON来模拟效果
子查询(最灵活,什么都可以用)
用外连接查询,内连接是查询不出来的
用子查询
相关子查询(用函数):括号内用到外层的东西,不能单独执行
exists 嵌套子查询,有数据为真,没有就为假
不用函数的相关子查询
临时表必须有别名
解决乱码
乱码本质:编码和解码不一致
编码和解码设置成一样的就不会乱码
数据库设置一下编码格式
练习:
4题.
6题:两张临时表
9题
函数替换null
二、JDBC
2.1 Eclipse使用详讲
还有很多公司在用Eclipse(免费)
1.test不能有参数和返回值
2.2 打jar包
java只设计了接口,但不实现,让数据库生成厂商去实现
把工具项目打成包,不要选择test包
右键打成jar包,搜索jar
ctrl+shift+o自动优化包
测试类,和src同级别
每一个方法对应一个测试类
2.4 配置连接池
C3P0管理连接池
类路径就是src下
配置成自己的信息
理解含义,不用改
用连接池获取连接
2.5 封装CRUD
JMeter;Maven后面要学的;都是apache阿帕奇的
beanUtils明天用;DBCP也是连接池
我们用dbutils
以后数据库增删改这么写
后获取连接源
先获取连接源
- 查询自己上网查怎么写
2.6 使用JDBC连接MySQL数据库需要的jar包
A都要自己写
B连接不需要自己写
C增删改查不需要自己写
D都不需要自己写
2.7 关闭数据源
执行test方法之前创建TxQueryRunner对象
基本类型都用包装类型
一个类的对象就是一个bean
2.8 查询
1.查询一个
2.查很多
alt+shift+L;
3.单行单列查询
4.转map
5.转ListMap
6.连表查询
用map接收
在把map转成bean,使用工具包
teacher封装的类(就这么写)
里面帮你新建了对象,而且帮你抛了异常,直接用new对象接受就可以了
7.三表查询
增加一个中间表,转换成两个多对多
查询一门成绩
所有成绩
查询某号课程和选择这门课程的所有学生
后面连表查询可不可以用map来写?
查询所有课程,和选择这门课程的所有学生
查询指定的学生和该学生选修的所有课程
查询所有学生和该学生选修的所有课程
敲熟,就这么点事
- 练习:
1.查询所有员工
2.不能用连表(用Map做),查出来是两个bean,应该是一个bean
3.查询所有部门及部门里的所有员工
2.9 分层建包
建立外键关联关系:
关系模型:数据库中体现关系的只有一个字段;子表体现关系,主表中没有
对象模型:一般不写id(如private Integer sid),而是写对象,用的时候就查,不用可以不查;多对一就是一个集合
一对一:在外键类新建一个主键对象
一对多:在主键类建立一个外键类对象的集合
多对多:转成一对多或多对一
2.10 规则
属性指的是get和set,起名要规范,属性和字段要对上,
如name对应getName和setName,否则或报各种错误
创建有参,一定把无参的构造器写上
注意:对象名和列名不能一样:score一样,赋值时会报错
三、JavaWeb
3.1 Eclipse配置tomcat环境
3.2 创建JavaWeb项目
2.5没有注解,3.0有注解
连接源码
3.3 Servlet
3.3.1三个生命周期方法两个使用方法
把封装好的config接收一下,返回就不为null了
3.1.2.servlet继承HttpServlet
1.约束文件和配置
2.init方法
调用父类GenericHttp中,给定义好了,就不为空了
要自己定义用下面的模板方法(重载方法)
初始化:第一次惩罚,现在一般都配上
默认第一个用户访问的时候初始化,配置好这个默认启动tomcat时全部加载好
3.配置自定义初始化参数
获取自定义参数(获取一个和获取所有)
4. doGet
重写service,里面会强转servletrequest,然后调用doget和dopost
5. doPost
6.状态码
302重定向
3.4 XML
html:浏览器显示效果
xml:存储数据,配置文件
1.基本语法规范
2.约束文件:用别人的框架,去配资文件要遵循一定的规则
有两种:.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类
dao层直接操作数据库
登录,注册判断没必要返回boolean值,抛个异常就好了,新建一个userexception类
其实没必要打印异常信息,这里是为了方便开发者自己查看,加了个打印
具体逻辑
1.三个异常是平级的,但前两个是用户异常,捕获的是dao异常,不会捕获到用户异常,最终都抛给调用者来处理
2.或者在dao层直接抛系统异常
捕获抛的对应的异常,抛出自定义异常
3.或者test测试:最上层的调用者(跟service是同层的)来处理异常(测试,获取异常信息)
在spring框架里非受查异常最简单,受查异常有一套处理方法,平时还是写非受查异常
最复杂的是业务,要求越多,逻辑越复杂;业务要去公司去了解,根据客户的需求来分析业务,没做过这个行业根本不懂其中的细节怎么用业务实现,首先要去理解客户的专业名词,搞清楚客户行业的流程
如借书,每个业务都需要操作好几张表
如论坛发帖
3.6.2 表示层
1.数据验证
前端验证:js或jQuery,验证插件
οnsubmit=“boolean”
不要相信前端,传过来的信息是有问题的,用户可以绕过前端
前端也要有验证,可以减轻服务器的压力,例如格式,长度,一致等这些验证
内网部署可以不写后端,都是自己人,没人攻击网络
后端验证:Servlet使用Java代码验证
确保执行业务之前,数据有效
部署到外网的必须有后端
ajax验证:提高用户体验,还是靠
js(XmlHttpRequest)请求服务器
2.注册验证
同步请求流程
验证格式用正则表达式:
没有通过
通过验证
回显一个验证的信息到注册页面
数据回显:通过el
添加数据回显
3.7 登录
验证码,要给一个流,传图片用字节流,传文本一般用字符流
流程
得到验证码文本,要先调用getImage,才有getText
切换图片验证码
changeImage():
调用登录
3.8 分页
3.8.1 sql语句
3.8.2 pageBean<T>
totalPage的set可以不要,get是算出来的
jsp页面
页面控制
页码数量的控制,把begin和end加入pageBean,也不需要get和set,写一个方法进行赋值
这个注意要放在最后,要用到前面的值
把totalpage改成getTotalPage()
3.9 多条件组合查询(分页)
关键拿到dao层的条件,在外面拿到一个sql
方法为进行sql的拼接
因为不知道有多少个参数,用数组也不好用,所以用集合转成数组来传参
在params里面再添加两个参数,limit后面的
画红线的写错了,要接收一个新的sql,不然语句没有变,还是原来的
封装成一个完整的pageBean,跟前面分页是一样的
3.10 uuid加密
uuid:可以按照特定的算法,生成一个不重复的32位
的字符串,算上-是36位
数据库里:(有是有,但是最终用java来做)
java
MD5加密,做了一个转换,核心方法是diget()
下面是CommomUtils里