永和打印发票

news/2024/11/30 1:50:50/

目录:

day01:业务需求+开发环境

day02:HTML网页制作+CSS样式表+二维码

day03:动态技术J2ee Servlet+JSP

day04:mysql数据库+sqlyog的使用

day05: PowerDesigner的使用+Jdbc

day06:日期格式的转换和统一

day07:项目开发设计思路

Database:永和大王数据

FAQ:没有在WEB-INF\classes中生成class文件


day01:业务需求+开发环境

1.1      培优课程体系

1.2  培优的就业数据

1.3软件开发

拿到一个项目如何开发呢?从哪里入手呢?具体的技术点如何实现呢?这就是我们这次要让大家体会的,不为你理解每个技术细节,这些后期课程中都会详细讲到。只为你有大的格局,你有清晰的目标,你有真实的体验。有所了解后踏实学习java培优的课程,它能支持你在这个日益竞争激烈的世界里,安身立命,实现梦想,过上好日子!

1.3.1    开发岗位

1.3.2    软件开发流程

也称为软件开发生命周期:

l  意向

l  软件项目立项,立项报告,立项审批

l  需求调研,需求评审

l  概要设计,用例图,页面原型设计

l  数据库设计,表设计

l  详细设计,类设计

l  开发编码

l  需求变更

l  测试

l  试运行,bug满天飞(加班)

l  正式上线

l  维护期

l  项目完成

1.4      学到的技术点

1.4.1    Day01

l  Jdk的使用

l  Eclipse的使用

l  创建java工程

l  创建class

1.4.2    Day02

l  创建Web工程

l  HTML静态网页

l  CSS样式表

l  二维码

1.4.3    Day03

l  Eclipse中增加jdk支持

l  配置jdk

l  Eclipse中增加tomcat支持

l  配置tomcat

l  Servlet3.0 注解开发

l  Jsp页面

l  Pojo封装传递多个值

l  Jsp的安全访问

1.4.4    Day04

l  PowerDesinger

l  单表设计

l  数据库基本操作Dos

l  数据库基本命令Dos

l  SqlYog操作客户端

1.4.5    Day05

l  数据库导入、导出

l  关联表设计

l  Pojo对象关联

1.4.6    Day06

l  综合练习

1.5      永和大王门店管理系统

1.5.1    项目背景

《永和大王门店管理系统》实现顾客进店后选择购买的套餐,并在系统中生成订单,包括:门店名称,门店电话,订单号,并记录下订单类型及人数和收银员是谁,及下单时间和结账时间,并记录订单详情,顾客点了哪些食物,支付方式以及支付总金额等信息,最终实现打印门店小票。同时,在订单下方展示本店的二维码,方便顾客扫描二维码自助填写税务发票信息等功能。

1.5.2    还能实现什么?

票据打印

1.5.2.1         医药管理系统

1.5.2.2         税务发票系统

1.5.2.3         餐厅结账单

1.5.2.4         德克士

1.5.2.5         加油站

1.6开发工具

1.6.1    必备的开发软件

l  PowerDesinger v15.1                                  数据库表设计&UML设计

l  mysql-5.5.27-winx64.msi                      mysql数据库

l  SQLyogEnt v8.2                                     数据库客户端

l  安装双jdk1.7 & jdk1.8                                  java环境

l  Eclipse Mars.2 Release (4.5.2)              IDE 开发工具,配置jdktomcat

l  安装Tomcat                                                  Web中间件,运行web程序

1.6.2    FTP下载资料

打开浏览器访问code.tarena.com.cn   账号:tarenacode   密码:code_2017

点击CGBCODE -- > 1805 à  按阶段下载资料。

1.6.3    PowerDesinger设计工具安装

语言选择中文RPC,同意协议,其他一路next即可。

1.7      Java开发环境安装

1.1.1  安装jdk并检验

点击Window窗口,输入cmd命令,回车。

1.1.2  检查jdk版本

1.1.3  常用DOS命令:

C:\Users\Administrator>d:        切换盘符,进度d盘D:\>cd a                        进入a文件夹D:\a>dir                       显示a文件夹下的所有文件D:\a>cd ..                     返回上级目录D:\a\b\c\d>cd /                返回根目录

1.8      第一个java程序HelloWorld

1.1.4  开发环境的准备

开发工具:eclipse

1.1.5  开发步骤

1.1.5.1     创建Java工程

 

1.1.5.2     创建HelloWorld

选中src,右键,new,class,..

1.1.5.3     创建main方法

第一个段Java代码

package cn.tedu.hello;//这个类用来做Java的第一个小程序/*** public 是类的修饰符* class  用来定义一个类* HelloWorld  是类的名字*/
public class HelloWorld {//Java中的入口程序,定义一个main方法(函数)/*** public 是方法的修饰符* static 是静态的,作为方法的描述信息,*          表示了一个静态方法* void   是指定方法的返回值为空* main   叫做方法名字* (String[] args)  叫做方法的参数* String[]   叫参数的类型* args    叫参数的名字* */public static void main(String[] args){/*** System 系统指令* out    让系统做一个输出的动作* println  换行打印* "hello world~~"   打印一个字符串("")* ;   java语句结束符** 想要运行的话:* 空白处右键->run as --> java application*/System.out.println("hello world~~");}}

day02:HTML网页制作+CSS样式表+二维码

1   HTML网页制作

1.1    概述

超文本标记语言,标准通用标记语言下的一个应用。

超文本就是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。

超文本标记语言的结构包括部分(英语:Head)、和主体部分(英语:Body),其中部提供关于网页的信息,主体部分提供网页的具体内容。

1.2    如何使用

1.2.1  创建动态web工程

 

1.2.2  创建order.html

WebContent下创建,选中WebContent,右键,newhtml,order.html

<!DOCTYPE html><html><!-- 指定文件是一个网页文件 --><head><!-- 网页的头部分 --><meta charset="UTF-8"><!-- 指定编码格式 --><title>永和大王</title><!-- 指定网页的标题 --></head><body><!-- 网页的体部分 --><div>顾客联</div><div>请您留意取餐账单号</div><div>自取顾客联</div><div>永和大王(北三环西路店)</div><div>010-62112313</div><div>--结账单--</div><div>账单号:P000009</div><div>账单类型:堂食</div><div>人数:1</div><div>收银员:张静</div><div>开单时间:2018-04-17 07:24:11</div><div>结账时间:2018-04-17 07:24:22</div><hr/><div><table><!-- 向网页中插入一个表格 --><tr><!-- 表示表格中的行元素 --><td>数量</td><!-- 表格中的列元素 --><td>品项</td><td>金额</td></tr><tr><td>1</td><td>豆浆油条套餐</td><td>7.00</td></tr><tr><td>&nbsp;</td><td>1 X --非矾油条</td><td>&nbsp;</td></tr><tr><td>&nbsp;</td><td>1 X --现磨豆浆(热/甜)</td><td>&nbsp;</td></tr></table></div><hr/><div><table><tr><td>支付宝花呗一元早餐</td><td>1</td><td>-3.00</td></tr><tr><td>合计</td><td>&nbsp;</td><td>4.00</td></tr><tr><td>支付宝</td><td>&nbsp;</td><td>1.00</td></tr>   <tr><td>支付宝补贴</td><td>&nbsp;</td><td>3.00</td></tr>   </table></div><hr/><div>打印时间:2018-04-17 07:24:23</div><hr/><div>根据相关税法规定,电子发票的开票日期同网上申请电子发票的日期,如您需要当日的电子发票请务必在消费当日通过扫描下方二维码,根据指引步骤开具您的增值税电子普通发票。此二维码30天内有效,扫描时请保持小票平整。</div><div><img src=""/><!-- 向网页中插入一张图片 --></div><div>官网:www.yonghe.com.cn</div><div>加盟热线:86-21-60769397或 86-21-60769002</div></body>
</html>

2   CSS样式表

2.1    概述

层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。

2.2    如何使用

2.2.1  Html网页中内嵌css代码

缺点:使网页的结构看起来十分混乱。不易后期维护。

<!DOCTYPE html>
<html><!-- 指定文件是一个网页文件 --><head><!-- 网页的头部分 --><meta charset="UTF-8"><!-- 指定编码格式 --><title>永和大王</title><!-- 指定网页的标题 --><!-- css代码修饰网页效果 --><style>body{font-size:8px;/*设置字体大小*/width:260px;/*设置网页宽度*/margin:5px;/*设置内容和边框的距离*/}.please{font-size:28px;}.me{padding-left:60px;/*设置字和左边的距离*/}.note{text-indent:20px;/*设置首行缩进*/padding-top:15px;/*保持上边距5px*/padding-bottom:15px;/*保持下边距5px*/}</style></head><body><!-- 网页的体部分 --><div>顾客联</div><div class="please">请您留意取餐账单号</div><div class="me">自取顾客联</div><div>永和大王(北三环西路店)</div><div>010-62112313</div><div class="me">--结账单--</div><div class="please">账单号:P000009</div><div>账单类型:堂食</div><div>人数:1</div><div>收银员:张静</div><div>开单时间:2018-04-17 07:24:11</div><div>结账时间:2018-04-17 07:24:22</div><hr style="border:1px dashed;"/><div><table><!-- 向网页中插入一个表格 --><tr><!-- 表示表格中的行元素 --><td>数量</td><!-- 表格中的列元素 --><td>品项</td><td>金额</td></tr><tr><td>1</td><td>豆浆油条套餐</td><td>7.00</td></tr><tr><td>&nbsp;</td><td>1 X --非矾油条</td><td>&nbsp;</td></tr><tr><td>&nbsp;</td><td>1 X --现磨豆浆(热/甜)</td><td>&nbsp;</td></tr></table></div><hr style="border:1px dashed;"/><div><table><tr><td width="170">支付宝花呗一元早餐</td><td width="30">1</td><td>-3.00</td></tr><tr><td>合计</td><td>&nbsp;</td><td>4.00</td></tr><tr><td>支付宝</td><td>&nbsp;</td><td>1.00</td></tr>   <tr><td>支付宝补贴</td><td>&nbsp;</td><td>3.00</td></tr>   </table></div><hr style="border:1px dashed;"/><div>打印时间:2018-04-17 07:24:23</div><hr style="border:1px dashed;"/><div class="note">根据相关税法规定,电子发票的开票日期同网上申请电子发票的日期,如您需要当日的电子发票请务必在消费当日通过扫描下方二维码,根据指引步骤开具您的增值税电子普通发票。此二维码30天内有效,扫描时请保持小票平整。</div><div><img src=""/><!-- 向网页中插入一张图片 --></div><div>官网:www.yonghe.com.cn</div><div>加盟热线:86-21-60769397或 86-21-60769002</div></body>
</html>

2.2.2  Css代码提取到base.css文件里

HTML代码和css代码分隔。

body {font-size: 8px; /*设置字体大小*/width: 260px; /*设置网页宽度*/margin: 5px; /*设置内容和边框的距离*/
}.please {font-size: 28px;
}.me {padding-left: 60px; /*设置字和左边的距离*/
}.note {text-indent: 20px; /*设置首行缩进*/padding-top: 15px; /*保持上边距5px*/padding-bottom: 15px; /*保持下边距5px*/
}

2.2.3  网页中引入外部的css文件

<!DOCTYPE html>
<html><!-- 指定文件是一个网页文件 --><head><!-- 网页的头部分 --><meta charset="UTF-8"><!-- 指定编码格式 --><title>永和大王</title><!-- 指定网页的标题 --><!-- css代码修饰网页效果 --><!-- 引入外部的css文件rel 指定要引入的文件类型href 指定引入文件的路径(存放的位置)-->     <link rel="stylesheet" href="base.css"/></head><body><!-- 网页的体部分 --><div>顾客联</div><div class="please">请您留意取餐账单号</div><div class="me">自取顾客联</div><div>永和大王(北三环西路店)</div><div>010-62112313</div><div class="me">--结账单--</div><div class="please">账单号:P000009</div><div>账单类型:堂食</div><div>人数:1</div><div>收银员:张静</div><div>开单时间:2018-04-17 07:24:11</div><div>结账时间:2018-04-17 07:24:22</div><hr style="border:1px dashed;"/><div><table><!-- 向网页中插入一个表格 --><tr><!-- 表示表格中的行元素 --><td>数量</td><!-- 表格中的列元素 --><td>品项</td><td>金额</td></tr><tr><td>1</td><td>豆浆油条套餐</td><td>7.00</td></tr><tr><td>&nbsp;</td><td>1 X --非矾油条</td><td>&nbsp;</td></tr><tr><td>&nbsp;</td><td>1 X --现磨豆浆(热/甜)</td><td>&nbsp;</td></tr></table></div><hr style="border:1px dashed;"/><div><table><tr><td width="130">支付宝花呗一元早餐</td><td width="20">1</td><td>-3.00</td></tr><tr><td>合计</td><td>&nbsp;</td><td>4.00</td></tr><tr><td>支付宝</td><td>&nbsp;</td><td>1.00</td></tr>   <tr><td>支付宝补贴</td><td>&nbsp;</td><td>3.00</td></tr>   </table></div><hr style="border:1px dashed;"/><div>打印时间:2018-04-17 07:24:23</div><hr style="border:1px dashed;"/><div class="note">根据相关税法规定,电子发票的开票日期同网上申请电子发票的日期,如您需要当日的电子发票请务必在消费当日通过扫描下方二维码,根据指引步骤开具您的增值税电子普通发票。此二维码30天内有效,扫描时请保持小票平整。</div><div><img src=""/><!-- 向网页中插入一张图片 --></div><div>官网:www.yonghe.com.cn</div><div>加盟热线:86-21-60769397或 86-21-60769002</div></body>
</html>

3   创建二维码

维码又称二维条码,常见的二维码为QR CodeQR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。

3.1    导入jar


3.2    创建QR

3.3    创建create方法

package cn.tedu.qr;import org.junit.Test;/** 这个类用来创建二维码*/
public class QR {//创建单元测试的方法create@Test//选中方法名,右键,run as,junit testpublic void create(){//指定二维码图片的宽度int width=150;//指定二维码图片的高度int height=150;//指定二维码图片的内容String content="www.baidu.com";//指定二维码图片的存放位置String path = "e:\\qr.png";//调用Google的方法,用来产生二维码CreateQR.create(width,height,content,path);//打印System.out.println("二维码生成成功!!");}}

3.4    产生了二维码的图片

把指定路径下产生的二维码图片,复制到项目中。

放在WebContent/qr.png

3.5    改造order.html

<!DOCTYPE html>
<html><!-- 指定文件是一个网页文件 --><head><!-- 网页的头部分 --><meta charset="UTF-8"><!-- 指定编码格式 --><title>永和大王</title><!-- 指定网页的标题 --><!-- css代码修饰网页效果 --><!-- 引入外部的css文件rel 指定要引入的文件类型href 指定引入文件的路径(存放的位置)-->     <link rel="stylesheet" href="base.css"/></head><body><!-- 网页的体部分 --><div>顾客联</div><div class="please">请您留意取餐账单号</div><div class="me">自取顾客联</div><div>永和大王(北三环西路店)</div><div>010-62112313</div><div class="me">--结账单--</div><div class="please">账单号:P000009</div><div>账单类型:堂食</div><div>人数:1</div><div>收银员:张静</div><div>开单时间:2018-04-17 07:24:11</div><div>结账时间:2018-04-17 07:24:22</div><hr style="border:1px dashed;"/><div><table><!-- 向网页中插入一个表格 --><tr><!-- 表示表格中的行元素 --><td>数量</td><!-- 表格中的列元素 --><td>品项</td><td>金额</td></tr><tr><td>1</td><td>豆浆油条套餐</td><td>7.00</td></tr><tr><td>&nbsp;</td><td>1 X --非矾油条</td><td>&nbsp;</td></tr><tr><td>&nbsp;</td><td>1 X --现磨豆浆(热/甜)</td><td>&nbsp;</td></tr></table></div><hr style="border:1px dashed;"/><div><table><tr><td width="130">支付宝花呗一元早餐</td><td width="20">1</td><td>-3.00</td></tr><tr><td>合计</td><td>&nbsp;</td><td>4.00</td></tr><tr><td>支付宝</td><td>&nbsp;</td><td>1.00</td></tr>   <tr><td>支付宝补贴</td><td>&nbsp;</td><td>3.00</td></tr>   </table></div><hr style="border:1px dashed;"/><div>打印时间:2018-04-17 07:24:23</div><hr style="border:1px dashed;"/><div class="note">根据相关税法规定,电子发票的开票日期同网上申请电子发票的日期,如您需要当日的电子发票请务必在消费当日通过扫描下方二维码,根据指引步骤开具您的增值税电子普通发票。此二维码30天内有效,扫描时请保持小票平整。</div><div class="qrimg"><img src="qr.png"/><!-- 向网页中插入一张图片 --></div><div>官网:www.yonghe.com.cn</div><div>加盟热线:86-21-60769397或 86-21-60769002</div></body>
</html>

3.6    改造base.css

body {font-size: 8px; /*设置字体大小*/width: 260px; /*设置网页宽度*/margin: 5px; /*设置内容和边框的距离*/
}.please {font-size: 28px;
}.me {padding-left: 60px; /*设置字和左边的距离*/
}.note {text-indent: 20px; /*设置首行缩进*/padding-top: 15px; /*保持上边距5px*/padding-bottom: 15px; /*保持下边距5px*/
}.qrimg{text-align:center;/*设置图片居中*/
}

3.7    效果

4   Eclipse中配置tomcat

4.1    Eclipse配置tomcat插件

 

4.2    展示server窗口

 

4.3    发布项目到tomcat服务器

4.4    启动服务器

4.5    关闭服务器

4.6    测试

访问:http://localhost:8080/项目名称/资源名称

如:http://localhost:8080/day02/order.html

5   Eclipse中配置jdk

 

 


day03:动态技术J2ee Servlet+JSP

知识回顾:

3w1h,对每个知识点要why?

静态页面技术HTML

<!DOCTYPE html> 标识这个文件是一个HTML文件
<html> 标识一个html文件内容开始
<head> 头信息,
<meta charset="UTF-8"> 告诉浏览器我的编码utf-8
<link rel="stylesheet" href="css/base.css"> 链接样式表
<title>永和大王门店管理信息系统</title> 在浏览器上显示的标题
</head> 头信息结束
<body> 业务的内容<div>顾客联</div> 块<div class="please">请您留意取餐账单号</div> 在div属性中加入class属性,这样要在css文件中去定义这样一个样式,.please{},然后加载样式表后div就被渲染<div class="me">自取顾客联</div><div>永和大王(北三环西路店)</div><div>010-62112313</div><div class="me">--结账单--</div>     样式表定义一个样式,多处使用,如果需要变化,修改一处即可。复用!<div class="please">账单号:P000021</div><div>账单类型:堂食</div><div>人数:1</div><div>收银员:朱晓侠</div><div>开单时间:2018-04-27 07:36:05</div><div>结账时间:2018-04-27 07:38:11</div><hr class="line">   hr是一根直线,线型:直线、虚线、点线css规范中都有相应名称
直线solid,虚线dashed<div><table> 表格的开始<tr> 一行
<td width="40">数量</td> 一列,style=”width:40px;”
在html规范中字符串表达,支持双引号也支持单引号
表格中某个td设置宽度后,其他对应这列的td的宽度会随着改变
<td width="170">品项</td>
<td width="40" align="right">金额</td> align水平方向对齐left/center/right
</tr><tr><td valign="top">4</td> align水平对齐,valign垂直方向对齐top/center/bottom<td>香菇菜包套餐-ECS<br/>  <br><br/>后面的标准,换行在txt中就是换行\r \n不可见字符,HTML都是可见的4 X --香菇菜包<br/>4 X --现磨豆浆(热/无糖)</td><td valign="top" align="right">28.00</td>设置水平对齐和垂直对齐这只对当前的单元格起作用!</tr><tr><td>2</td><td>非矾油条</td><td align="right">10.00</td></tr><tr><td>2</td><td>鲜肉小馄饨</td><td align="right">20.00</td></tr></table>   <hr class="line"><table><tr><td width="40">合计</td><td width="170"></td><td width="40" align="right">56.00</td></tr><tr><td>微支付</td><td></td><td align="right">58.00</td></tr></table></div><hr class="line"><div>打印时间:2018-04-27 07:38:12</div><hr class="line"><div class="note">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;根据相关税法规定,电子发票的开票日期同网上申请电子发票的日期,如您需要当日的电子发票请务必在消费当日通过扫描下方二维码,根据指引步骤开具您的增值税电子普通发票。此二维码30天有效,扫描时请保持小票平整。</div>
特殊字符在html中需要单独标识,如果在html有多个空格,html解析时把多的空格就删除了。特殊字符转换,空格转换&nbsp;,转换的字符&作为开始;分号作为结束<img class="qrimg" src="img/qr.png">  src执向图片文件
<img></img><img/><div>官网:www.yonghe.com.cn</div><div>加盟热线:86-21-60769397 或 86-21-60769002</div>   
</body>
</html>      html文件内容的结束位置

Table标签和div差异

  1. 早期系统table布局,自适应;现今使用div+css布局,样式更加灵活,美观

  2. Table布局造成页面加载时,如果这个table很大,只有读取到table的结束标签之后,浏览器才会把这部分展现。短暂白屏,才会全部展现。

  3. Div出现后,div结束的标签浏览器就会直接展现。

表格常用标签

<table><th><tr><td>,th等价于tr,th专用于表头

HTML标签区分大小写吗?不区分

Java区分大小写吗?严格区分大小写

CSS区分大小写吗?严格区分大小写,自己写时习惯小写

  1. 样式美化CSS样式表

@CHARSET "UTF-8";       标识这个css样式字符集utf-8

body{                    全局的使用,指定标准的标签

         font-size:8px;         字体的大小,8个像素;以分号结束

         width:280px;          宽度,width:280px; width:90%;

}

.please{ font-size:28px; }

.me{ padding-left:100px; }   

.line{ border:dashed 1px;} border边线,dashed虚线 1px1个像素的宽度

.note{ padding-top:15px; padding-bottom:10px; } 上边空15个像素,下边空10个像素

.qrimg{ padding-left:60px; }

样式有三种方式

  1. (系统有一个全局的样式表)全局的标准标签body,table,tr

  2. (用的最多)在页面的标签上class=me,在样式表中.me{},局部修饰,可以多次调用,重用/复用

  3. (form表单使用)在页面的标签上id=me,在样式表中#{},局部修饰,至少在这个页面中应该保证使用一次

  1. 二维码

直接应用,java培优非常好学,这些东西都是高手写出来,在市场上广泛使用。它的稳定性,性能,安全等等指标,经过千锤百炼!拿来主义,只应用!(适应初级程序员)

Nginx(c),Redis(c),mycat+mysql阿里,rabbotmq(erlang并发,爱立信出品,在银行业和电信业广泛使用)、微服务dubbo(java)阿里、docker(go并发)容器化技术

Hadoop离线分析(java)Spark(实时分析)(scala,下一代java)jdk1.8引入函数式编程

二维码应用

  1. 图片高度和宽度

  2. 生成图片路径

  3. 调用谷歌第三方jar,有两个jar包:放在WebContent/WEB-INF/lib

core-3.3.2.jar\com\google\zxing

javase-3.3.2.jar\com\google\zxing

执行程序的方式:

  1. main函数,public static void main(String[] args){},在main还有static,运行java application

  2. @Test junit单元测试,运行Junit Test,在一个类中可以写多个@Test

@Test

public void getValue(){}    普通方法

解决未知技术应该怎么做呢?

  1. 问人,问同事,问技术好

  2. 百度,推荐demo,如果技术难度比较大,不做读百文多看评论CSDN

  3. 官网,规范,严谨; 不好的地方,写文档的人还不如普通的开发者!

  4. 书,太多垃圾,断片;看补足底蕴。会讲很多理论。

今天任务:

  1. 动态技术J2ee Servlet+JSP

Servlet被SpringMVC Controller

Servlet3.0会使用注解方式 @Web 标签

JSP(用的最多的标签就是HTML标签),EL(${name})+JSTL(taglib c:forEach做循环),

2)创建JavaWeb项目,配置自己的jdk,Servlet和jsp是有运行环境的?Web中间件Tomcat

环境配置:

  1. jdk,怎么给我们的项目指定jdk?

Jdk现在有多个版本,jdk1.4,目前jdk1.7,趋向jdk1.8

jdk1.9,jdk1.10,jdk1.11,宣布废弃java

企业追求什么样的技术?

  1. 最新技术

  2. 最稳定、安全的技术(企业最喜欢)

企业技术落伍

JavaWeb项目?怎么配置jdk的?

要把jdk放在一个目录

目录要求:a.不能有空格(新版本的jdk是支持),b.不能有中文

安装版,一路next,存在系统文件夹中,它中间有空格

D:\java\env

绿色解压版,D:\java\env\jdk1.7.0_72

给eclipse配置jdk版本

如果没有jdk1.7就给它添加

D:\java\env\jdk1.7.0_72

点击add,选择根目录即可,它会自动填写其他的内容

如果项目已经存在,要使用新的jdk怎么处理?

要修改3处

编译java保存后eclipse会自动调用编译方式就把java文件形成class文件。

还需要配置编译时的Java的版本

修改第三处

为什么我们要改这么多处?

Eclipse插件机制,base基础,其它公司可以在这个的基础上增加插件按它的规范编写代码,扩充它的功能。

很多公司的很多的插件。

配置Web中间件Tomcat

Eclipse做的不好用,配置非常啰嗦,

  1. 有一个单独的窗口来管理Servers

  1. 主流tomcat7怎么配置它,要增加到eclipse

  2. 把tomcat7和项目yh绑定,运行Servlet就放在指定tomcat中运行

没有有效server,没有一个可用server。

配置当前项目到tomcat中

先选中项目yh,点击add按钮,把项目添加到tomcat中,

这样在tomcat运行时就会自动启动yh项目,这样可用执行Servlet和JSP。

如果已经有tomcat启动,就会报端口冲突

Eclipse给我们提供了更加方便的修改server.xml的方式

修改3个端口8005,8080,8009,一般加10

访问文件的方式:

file:///D:/java/ws/jt/yh/WebContent/HelloWorld.html

通过网络的方式:

http://localhost:8090/yh/HelloWorld.html

http网络协议

localhost本机,测试,ip地址,域名

8090端口号,找到tomcat

yh是项目名称

HelloWorld.html 在WebContext下

http://localhost:8090/yh/img/qr.png

http://localhost:8090\\yh\\img\\qr.png(不要使用)

它们之间怎么隔开的,用户/

开发步骤:

  1. 保证你有一个绿色解压版的Jdk

  2. 解压到硬盘D:\java\env\D:\java\env\jdk1.7.0_72

  3. 把jdk和eclipse关联起来

  4. 把配置的jdk和项目关联起来

把tomcat配置开发步骤:

  1. 把绿色解压版解压apache-tomcat-7.0.59

  2. 把tomcat和eclipse关联

  1. 把tomcat和yh项目关联

运行环境Servlet,JSP

  1. Servlet2.3,SpringMVC Controller

  2. Servlet3.0 注解方式(京淘)@Web

  3. 利用eclipse创建Servlet

如果有错,是不能运行的,意味着必须先把所有的错误解决。

错误分为两种:

  1. 编译错误,保存文件时,自动去进行编译

  2. 运行时错误,运行时访问、调用才出错

Javax,jdk,j2ee中规定它行为,没有具体去实现,

交给第三方的Web中间件厂商去实现。

是第三方的就需要导入jar包。

怎么和我们的项目yh关联?

如果把servlet-api.jar直接放入到WebContent/WEB-INF/lib下

在tomcat启动后它就会发现有两个这个jar包,一个在上面项目中,一个在自己的lib目录中,它该调用谁?

它无法解决,就报错。

正确的姿势:

  1. 在控制台上打印Hello Servlet字符串

         protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

                   // TODO Auto-generated method stub

                   response.getWriter().append("Served at: ").append(request.getContextPath());

                   System.out.println("Hello Servlet");

         }

  1. 在浏览器上怎么访问

保证项目发布到tomcat中

启动tomcat服务,手动启动(推荐:debug模式)

在浏览器上访问

http://localhost:8090/yh/HelloServlet

注意Servlet它特殊,它就不需要后缀

什么样的第三方jar使用拷贝jar到WEB-INF/lib下?

什么样的第三方jar使用项目的引用新增额外jar包?

Servlet.jar引用lib下,是不会被拷贝到最终的tomcat中,它只在eclipse中使用。

二维码,tomcat中有吗?没有,必须放在WEB-INF/lib

剖析servlet3.0结构:

1)@WebServlet("/HelloServlet") 注解

@WebServlet规范中的,目的就是把后面的字符串作为,在浏览器访问时路径值

http://localhost:8090/yh/HelloServlet

2.JSP

最早j2ee规范中只有servlet,

简化 HTML标签这种内容

http://localhost:8090/yh/HelloServlet

jsp访问地址

http://localhost:8090/yh/helloWorld.jsp

http://localhost:8090/yh/WEB-INF/helloWorld.jsp

放在WEB-INF下的文件不能浏览器直接访问

在外面WebContext这个文件能否直接访问?能

jsp对于html,通吃!html内容在jsp中完全通用。

需求:在jsp中店名变成动态

开发步骤:

  1. 准备数据(准备店名)

  2. 在jsp中获取并展现这个信息

比较

  1. Html 纯静态,不可改变

  2. Servlet 后台运行,访问数据库获取数据

  3. Jsp 负责展现,把html都拿过来,然后加动态支持el表达式(${name})

小结:

  1. HTML静态网页,通过很多预定义标签<html><body><div>,展示了一个网页,和txt纯文本?txt是只是数据没有修饰,静态网页,可以通过标签+css样式修饰实现页面更加美好,txt不支持图片,HTML图文并茂

  2. HTML缺点,一旦写死就不能变化。出现动态页面技术纯Servlet,里面使用的java语句。

  3. Servlet它要加html标签,代码太混乱,工作量大,重复代码。出现jsp技术

  4. Jsp页面全部包容html标签,额外增加了一些el表达式${doorName}

Servlet中:

String doorName = 大钟寺店;

request.setAttribute(doorName,doorName);

转向Order.jsp

Jsp中:

Jsp页面可以获取到request对象,这个中放置doorName

Order.jsp加载时看${doorName}

这个内容就会找request中有没有doorName,就把对应值获取到。

内容就可以动态来实现

总结:servlet加工获取数据(业务逻辑)

环境配置:

在eclipse中配置jdk和tomcat

  1. jdk安装版1.8

1.7 add(arg01,arg02)

1.8 add(arg01,arg02,arg03)

1.7 update()  删除线,过期,在后期版本中就可能删除掉

1.8 没有update方法了,

在实际开发中,会规定项目的版本

在实际开发中,项目的jdk版本能升级吗?dubbo

  1. 怎么指定eclipse对应的jdk版本?

  1. 在eclipse环境中配置jdk1.7

  2. 把配置的jdk和项目yh关联

C:\programe files\java

Java代码解析,c:\\programe%20files\java

  1. 怎么指定eclipse对应tomcat版本?

Tomcat称为web中间件,支持servlet和jsp运行。不管旧三大框架struts2+spring+hibernate,新三大框架springmvc+spring+mybatis都是在servlet和jsp技术上发展起来的。

  1. 给eclipse配置一个tomcat

  2. 把tomcat和项目关联

  3. 访问

http://localhost:8090/yh/Order

http://127.0.0.1:8090/yh/Order

  1. 创建Servlet3.0 引入注解@WebServlet(/Order

  2. Servlet就按java代码来编写,写业务逻辑(加工过程)

作业:

  1. 再安装一个jdk1.9

  2. 再安装一个tomcat8

  3. 写一个servlet3.0

  4. 写一个order.jsp

  5. 把html和servlet+jsp请求过程画图


day04:mysql数据库+sqlyog的使用

知识回顾:

  1. Jdk 一台机器上可以安装多个版本的jdk。企业中有很多项目,旧的项目需要维护jdk1.6;开发新的项目jdk1.7。配置eclipse指定jdk。项目在开发时就会使用我们指定版本。

在eclipse怎么项目的jdk环境?

javaWeb配置3处:a.Build Pach,b.Compile编译,c. facets(每个功能是不同厂家完成,每个厂家的工具(eclipse 插件)都有自己的配置)

  1. Tomcat web中间件,支持servlet和jsp的运行环境。

Javax,java扩展,很多就不是java自己实现,java只是定义规范,其他厂商为了使用这个东西,就要按照规范来写一个实现。

Tomcat就实现Servlet规范

  1. 把它在eclipse中创建

  2. 我们要把tomcat和项目关联

  3. 启动tomcat,tomcat就会运行相关项目(部署、发布)

  1. Servlet

动态,可以执行业务逻辑,加工处理

利用eclipse来创建一个Servlet3.0类,利用eclipse提供模板

特点:

  1. 在它的类上有一个标识,称为一个注解@WebServlet,注解中有一个字符串,和类名完全一致,但是/HelloServlet。

  2. 类有doGet(直接在浏览器上输入地址),doPost(表单,登录)

  3. 总有两个参数HttpServletRequest request请求,HttpServletResponse response响应

  4. 返回request.getRequestDispatcher("Order.jsp")

            .forward(request, response); 通过request和response对象给jsp传递值

  1. 传值 request.setAttribute(key,value); key唯一,value随便

  1. Jsp

负责数据最后展现

  1. 完全兼容所有的html标签+css

  2. 它可以通过servlet准备数据,在jsp中利用EL表达式${doorName},它内部就去遍历request,找key 为doorName的,如果有就返回它里面的值,如果没有就不抛出错误,直接显示空。

  3. 特点就是动态,它的值可以变化。而html写死。

扩展:

Jsp文件放入到WEB-INF目录下,还能直接访问吗?

http://localhost:8090/yh/WEB-INF/Order.jsp j2ee Servlet规范放在WEB-INF下的文件不允许用户直接在浏览器上访问!保证某些信息不对外公开,安全性。

利用这个目录的特性把一些不需要对外直接展示jsp就放在其中。(工资条)主流项目都是这样。

改造让jsp不允许直接访问,根据安全!

Servlet可以访问WEB-INF下的jsp资源,因为进入Servlet中,如果需要可以进行权限校验。

开发步骤:

a.)servlet中修改,修改路径:/WEB-INF/views/Order.jsp

b.)把jsp扔到上面目录中

servlet中如果数据写死,还没有html写死方便呢?

怎么体现servlet动态呢?

Servlet是可以做到的,但是它自己不能独立完成,需要数据库来管理数据,它从数据库获取数据。

今日任务:

  1. 数据库,主流数据库mycat+mysql免费(开源),Oracle(性能最好的,收费),sqlServer(最好用好,性能,安全性都一般,闭源)

  2. Mysql基础操作,CRUD,信息维护,增删改查

  1. 数据存储的地方,数据库

概念:

a. 数据库database简称db,存放数据,创建store-yh

b. 表 table,门店信息tb_door,订单信息tb_order

c. 字段(列)colume

     大钟寺店        doorname,类型:varchar;长度:200

     086-010-48428920        tel,   类型:varchar;长度:20

1    大钟寺店    010-48428920    

2    火车南站店  010-48428920

d. 主键 primary key,记录唯一性,或者唯一代表这条记录

自增1,2,3,有唯一性

Mysql数据库,维护数据

开发步骤:

  1. 有mysql数据库程序服务端

  2. 创建一个数据库store-yhmis,乱码utf-8

  3. 创建一张表tb_door(设计习惯tb_前缀),创建时指定字段,类型,长度,主键

  4. 新增数据Insert

  5. 修改数据(修改电话)Update

  6. 信息无用,删除 Delete

  7. 查询 Select

常用dos命令:

1)cd .. 向上退一层

    cd . 查看当前目录

2)cd tony 进入到tony目录中

    进入有空格的目录C:\>cd "Program Files"

3)cd / 从任何目录直接返回到根目录c:d:e:

4)切换盘符d:(只在window中,linux root)

5)dir列当前目录下子目录和文件

6)mkdir创建目录

如果机器上有mysql怎么知道呢?

mysql -uroot -proot

mysql代表mysql.exe执行程序,数据库给我们提供客户端工具

-u参数,username用户名,后面紧跟用户名,当mysql安装时默认用户名,叫root

-p参数,password密码,设置密码

常用数据库命令:

数据库中命令是以分号结尾

  1. exit;        退出mysql数据库环境

  2. mysql中有哪些数据库?

怎么创建自己的数据库呢?解决乱码问题?

create database yh; 

创建完数据库是有问题的,中文存入会乱码。

创建数据库时要设置字符集

create database yh default character set utf8;

创建一个yh数据库,并且设置它的字符集为utf8;

不设置字符集,mysql默认它的字符集lantin1,相当于网页ISO-8859-1

打开要使用的数据库

打开yh数据库,后面的操作就都针对这个数据库

use yh;

创建表table(复杂),指定字段,类型,长度

create table tb_door(id int,door_name varchar(200),tel varchar(20));

创建tb_door表,表有3个字段,id主键字段类型int,door_name字段类型varchar(200),tel varchar类型,20长度。

展现当前数据库中所有表

show tables;

删除数据库

drop table tb_door;  

 展示表的结构

desc tb_door;  

创建表,并且设置主键

create table tb_door(id int,door_name varchar(200),tel varchar(20),primary key(id));show tables;desc tb_door;

create table tb_door(id int auto_increment, door_name varchar(200), tel varchar(20), primary key(id));

设置id列为自增和主键

插入数据

insert into tb_door(door_name,tel) values(‘dzs’,’110’);

insert into关键字 values关键字

tb_door表

(字段)

values(多个值,用逗号隔开)

如果是字符串,必须用单引号包括起来

常用SQL语句

SQL语句不区分大小写。

习惯:

关键字大写,其它内容小写

SELECT * FROM tb_door           sqlserver/mysql

关键字小写,其它的内容大写

select * from TB_DOOR           oracle

习惯:

都小写

1.创建数据库

create database yh; 

默认是lantin1字符集和网页ISO-8859-1

create database yh default character set utf8;

设置创建数据库时指定编码,支持中文了。

2.查询mysql中所有的数据库

show databases;

3.打开指定数据库

use yh;

4.创建数据库表

create table tb_door(id int,door_name varchar(200),tel varchar(20));

tb_作为前缀,标识它是一个table

create table tb_door(id int,door_name varchar(200),tel varchar(20),primary key(id)); 

指定id为主键

自增主键,int整形,数据库底层它会记录下当前值

每次用户新增记录,加+1,返回当主键(非常多,电商表)

流水号

create table tb_door(id int auto_increment,door_name varchar(200),tel varchar(20),primary key(id));

5.插入数据

insert into tb_door(id,door_name,tel)values(10,’大钟寺门店’,’110’);

字段名称和java不一样,要大写都大写oracle,要小写都小写mysql

多个单词之间下划线隔开

5.查询数据

查询所有的数据

select * from tb_door;

7.特殊SQL

drop database yh;    删除yh数据库drop table tb_door; 删除表tb_doorshow create table tb_door; 查看创建表的sql语句desc tb_door;    查看表的结构

修改信息

把tb_door中id=1数据它的电话修改为112

update tb_door set tel=’112’ where id=1;
  1. 备份数据,测试库

  2. 写update SQL时先写where条件

update tb_door set tel=’110’ where id=1;update tb_door set tel='119',door_name='火车南站' where id='1';

设置多个字段,用逗号隔开

update tb_door set door_name='大钟寺',tel='110' where door_name='dazhognsi' and tel='112';

多个字段用逗号隔开

如果在where条件中多个条件并列使用and

火车票订票12306

Ticket 1张

用户1,1,支付,支付成功买到了票,总票数=0

用户2,0,不能买

高并发情况下,同时很快去操作

用户1,1,支付,啰嗦,密码试了几次,终于找到了,

在用户1尝试过程中,用户2查表,1,动作快,直接支付,总票数1-1=0

用户1密码成功了,开始支付,但是它会没票

多限定了一个where条件,把要修改的旧的值作为一个where条件

Where id=1 and tel=001,当其他用户提交,它再提交

但是数据已经发生变化,所以执行SQL成功,但是没有数据发生变化。

删除

更要先写where条件

delete from tb_door;        删除tb_door表的所有数据delete from tb_door where id=1;    只删除id=1的记录delete from tb_door where id=1 and tel=’003’; 并列删除条件id=1和tel是003的

对于null有特殊的语法,is null

delete from tb_door where tel is null;

删除门店为dzs的或者电话为119的

delete from tb_door where door_name='dzs' or tel='119';

排序:

select * from tb_door order by tel desc;按电话号码倒序,null最后select * from tb_door order by tel [asc];   默认正序,null排第一

Dos窗口方式

在生产环境中,不允许使用其他的软件从远程接入

也不允许在生产环境中的机器上随便安装软件

需要安装mysql

只能mysql客户端mysql.exe,它可以本地访问。

在实际开发过程,安装测试服务器上,测试库。

Mysql数据库客户端程序,sqlyog/navcat第三方工具

常见问题:

  1. 端口号,安装时配置,别人要告诉你(系统管理员)

  2. Mysql服务没有启动

查看服务,如果未启动,手动启动即可

  1. 删除数据库

注意创建数据库时,如果有中文,必须设置字符集为utf-8;

创建数据库

创建表

查看数据

新增数据

小结:

  1. why?为什么需要数据库?

CRUD操作,如果有1个月的永和大王大钟寺门店订单。

数据挖掘:(统计查询)

  1. 这个门店中这个月的销售额

  2. 畅销产品 order by desc,滞销产品 order by

  3. 优秀员工,谁卖的多,每个订单收银员,单数和总金额

  4. 工作效率,结账时间-开单时间,时间越小越好

  1. 概念:

  2. 数据库 database

  3. 表 table

  4. 字段 colume/field

  5. 类型 datatype int/varchar(n)/double/timestamp时间戳

  6. 主键 primary key,唯一标识一行数据

  7. 自增 auto_increment +1,底层自动管理

  8. 数据库database

数据一个集合,数据会存储下来。Mysql底层是文件。

Mysql就是默认数据库

Mysql中数据库本质就是file文件。最终保存在磁盘上。

字符集问题,创建库时候指定,默认lantin1=ISO-8859-1,如果存中文就乱码???。

指定数据库

一个项目一个数据库

  1. 表table,一个数据库中隔离业务

create table

注意字段+类型+长度

  1. 主键+自增 

  2. 常规操作

CRUD增insert删改查

insert into tb_door(id,name) values(1,’tony’);delete from tb_door where id=1;update tb_door set name=’hell’ where id=1select * from tb_door;select * from tb_door where id=1;select * from tb_door where name=’tony’;

数据tony tony2

要求:tony开头

select * from tb_door where name like ‘tony%’;(常用)

通配符%,匹配任意多的字符

要求:包含tony字符串

select * from tb_door where name like ‘%tony%’;(常用)

去掉name为null的记录

select * from tb_door where name is not null;

只查询name为null的记录

select * from tb_door where name is null;

按名称排序

正序 select * from tb_door order by name [asc];倒序 select * from tb_door order by name desc;

查询记录总数

SELECT COUNT(*) FROM tb_door;select count(id) from tb_door;

6)特殊SQL

删除数据库 drop database yh;删除数据库表 drop table tb_door;查看创建表的sql语句 show create table tb_door;查看数据库中有哪些数据库 show databases;打开某个数据库 use yh;某个数据库有哪些表 show tables;查看表结构 desc tb_door;


day05: PowerDesigner的使用+Jdbc

知识回顾:

  1. 数据库,因为数据方便存储,通过SQL结构化查询语言Struction Query Lanuage。不光完成数据维护(新增、修改、删除),查询(统计查询)

  2. 关系型数据库Oracle、MySQL、SqlServer,非关系型数据库no sql Redis(key,value)KV数据,mongodb(json带格式的一个字符串 {abc}),hbase(列式存储)

  3. 概念:

  4. 数据库database, mysql,隔离不同的项目,yhdb,jtdb

  5. 表table,在一个项目中有很多的业务:购物车表,订单表

  6. 字段column,field,一个表中有很多信息,可以划分成很多的字段,字段最小单位不能分拆

  7. 类型datatype,数据库对不同类型的数据要进行存储

int/tinyint/double/varchar/timestamp

    1. 主键 primary key,唯一的标识这一条的记录

    2. 自增 auto_increment(mysql独有的)+1,数据库底层会记录这个表的主键的最大值

  1. 基础的SQL语句

  2. create database yhdb;   默认的字符集lantin1,相当于iso-8859-1

  3. create database yhdb default character set utf8;

  4. create table tb_door(id int not null auto_increment,door_name varchar(200),tel varchar(20), primary key(id)); 创建表,3个字段,类型,主键,自增

  5. show databases;     展示所有的数据库

  6. show tables;        展示某个库的所有的表

  7. use yhdb;           打开某个数据库,它就作为当前数据库

  8. show create table tb_door;      展现表的创建的sql语句

  9. desc tb_door;  展现表的结构

  10. drop table tb_door;     删除表,自增管理也被删除了

delete from tb_door;    只删除内容,不会把自增删除。

  1. drop database yhdb; 删除库,所有的数据都丢失

5)最常用SQL语句

    CRUD操作,新增,修改,删除,查询

insert into tb_door(door_name,tel) values(‘大钟寺店’,’110’);insert into tb_door(tel ,door_name) values(’110’,‘大钟寺店’);insert into tb_door(price) values(110.00);
update tb_door set tel=’119’ where id=1update tb_door set door_name=’dzs’,tel=’119’ where id=1
delete from tb_door where id=1;

查询所有数据

select * from tb_door;select tel from tb_door;select tel from tb_door where id=1;select count(*) from tb_door;底下性能比上面的高select count(id) from tb_door;

  1. 使用客户端sqlyog

把门店信息表实现

  1. 表设计,在概要设计时就开始表设计,在详细设计中继续细化,在详细设计完成,表设计就完全完成了。在实际开发中也会局部修改。

  2. 表名tb_door,字段们id,door_name,tel,字段类型,长度

  3. 实现建表SQL语句

在业界有标准表设计工具,PowerDesigner,以图形展现,看着方便直观,可与直接产生建表SQL语句。

安装PD

  1. PowerDesigner15.1汉化破解版.rar

破解

所有的文件覆盖下面目录即可

C:\Program Files (x86)\Sybase\PowerDesigner 15

然后运行就可以。汉化不彻底。

安装时选择语言(下拉框)选择PRC中文(最长的那个)同意协议,

然后一路next

    

  1. 录入数据

  2. 查询数据

在实际开发中怎么使用PD表设计?(了解,会看,会用)

表设计,非常关键,对业务了解,开发团队资深系统分析师

工具栏中就注意2个按钮,

上面的叫表,下面的是表之间关系

把页面中所有的表放在一个页面

产生建表语句,拿到sqlyog中执行

create table tb_door
(id                   int not null auto_increment,door_name            varchar(200),tel                  varchar(20),primary key (id)
);

最后一步:

怎么从数据库获取数据?

JDBC java database connect java访问数据库jar工具包

JDBC j2ee规范,数据库厂商oracle(ojdbc.jar),mysql(mysql-connector-java-5.1.10-bin.jar

  1. 导入jar

这些对象都选择java.sql下的

No suitable driver found for jdbc:mysql231://localhost:3306/yh

没有匹配驱动,

错误原因:url写错了

解决方案:修改成正常的

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

Caused by: java.net.UnknownHostException: locathost

错误:第一首先看最前面,最前面的不够定位准确,再看最后

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:

Unknown database 'yhdb'

错误:不认识数据库yhdb

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:

 Table 'yh.tb_door123' doesn't exist

错误:table tb_door123表不存在

程序高手!

故意搞破坏!

java.sql.SQLException: Invalid value for getInt() - '大钟寺北三环店'

抛出SQLException,无效的值

问题:

  1. 有两次数据库访问

  2. 大量的代码重复

优化:

String doorName,String tel

Door对象,有两个属性doorName,tel

开发步骤:

  1. 创建Door对象,有两个属性doorName,tel,一次数据库访问

  2. 可以分别设置doorName和tel。setDoorName,setTel,对象就能保存两个值

  3. 可以从Door对象中获取 getDoorName,getTel

特性:这种对象pojo对象(传递数据)

  1. 它有属性字段

  2. 每个属性有set方法

  3. 每个属性有get方法

解决2个问题:

  1. 不能多次访问数据库,合并一次

  2. 方法要返回多个值

解决方法:

不能用普通对象String一次只能一个值

使用java中pojo对象

Pojo对象特点:

  1. 多个属性值 private Integer id/private String doorName/private String tel

  2. 设置这个属性值,通过给每个属性设置set方法

  3. Servlet中获取这个值,给每个属性增加一个get方法

鼠标右键,source菜单,选择生成get和set方法项,会自动生成相应代码

使用:pojo对象传值,步骤:

1)创建pojo对象 Door door = new Door();

2)调用这个对象set方法给它设置值 door.setId(rs.getInt(id));

3)在servlet中获取

对象是有作用域,方法内部创建的对象,出了这个方法就不能用了。

while(rs.next()){

}

方法调用过程

小结:

  1. PD powerdesinger设计工具,主要用来表设计

文件保存pdm物理数据模型

对初级程序员,会看,会找到建表sql语句

  1. 程序就要从数据库中获取数据

  1. 写3个参数

url=jdbc:mysql://localhost:3306/yh

jdbc:mysql:// 协议头

localhost找到数据库所在服务器

3306 mysql服务的端口,找到mysql服务

yhdb数据库

    b)创建链接

new Driver();

Connection cn = DriverManager.getConnection(url,user,password);

    c)创建执行者(语句)

Statement stat = cn.createStatement();

    d)ResultSet rs = stat.executeQuery(select * from tb_door);

    e)循环数据

while(rs.next()){

    Integer id = rs.getInt(1);

    String doorName = rs.getString(door_name);

。。。。

}

    f)释放资源

最早声明对象,最后释放

rs.close();

stat.close();

cn.close();

在项目中获取数据库的数据

  1. 在servlet中增加一个获取数据库的方法

public String getDoorName();    //获取数据库的表中的门店数据

public String getTel();      //获取电话

访问数据库的次数太多,重复的代码也太多了。

  1. 改造优化下

多个数据库访问合成一个

把内容一次查出,放入一个对象中,一个对象可以有多个属性

在java世界中把这个对象就称为pojo对象。对象就是传递数据的。

Public Door getDoor(){

     Door door = new Door(); //在方法内存储数据,出了方法外这个对象就失效,不能访问了;

     查询数据库,把数据通过set方法设置到door

     反 return语句,  return door;

}

遇到return它就范围调用者

Door door1 = getDoor();  door1和door是一个类型Door,那就把door的每个属性值赋值给door1里面每个的值。

可以从door1中获取信息

door1.getDoorName()

door1.getTel()

一次可以传递多个值

HTTP Status 500

内部错误,servlet里面有错误

java.lang.NullPointerException(空指针错误)

        cn.tedu.yh.servlet.Order.doGet(Order.java:33)

Order servlet中33行错误

声明一个变量,变量没有给他设置值,默认值null

Pojo对象特点:

  1. 多个属性,private修饰符

  2. 对应每个属性设置方法setXxx

  3. 对应每个属性获取方法getXxx

Jdbc淘汰,不会直接写这些代码,框架封装,Mybatis


day06:日期格式的转换和统一

课改:

学习方式:

  1. 按部就班一步一步踏实脚印走(太多啰嗦地方)java面向对象,封装,继承,多态

  2. 另辟蹊径(拔苗助长,我还不会走,老师就让我跑)

田忌赛马

我们学员

资深的技术人员:项目经理,技术经理,架构师,技术副总

弱项:java基础、javaWeb、3大框架

(面试技巧,最重要是表现自己好学和渴望进入这家公司态度)

强项:

Java1991年17年了,市场上企业中有大把java程序员,在企业中通过非常多的项目来真实锤炼,周期3-20年。真实企业环境。

在培优课程中优势:

  1. 互联网架构为核心

Docker容器化,1s启动一个服务,瞬间达到百万级别(阿里双11,2017,2018都是运行在docker之上)

Nginx+redis(x)+mycat

Rabbitmq+docker+dubbo

Jsoup 爬虫,薪资9k+

Lucene+solr/es 10K+全文检索工程师,自己百度

2)大数据项目

Hadoop,HDFS,flume,hive,storm,zookeeper,kafka

真实项目网络流量日志分析PV,UV,VV

弱项:在工作中接触的技术的面小!越大公司越窄。跳槽!

对新技术消化能力差,(为了现有系统稳定,不可能直接把新的技术引入)但是它渴望,企业渴望!

技术变化非常快!它虽然很难实质推动企业技术变更,但是他希望有人来做这个事情,

大多企业:

大型,互联网架构+大数据

中型,dubbo互联网架构+ssm(springmvc+spring+mybatis)三大框架

小型,ssh(struts2+spring+hibernate)

Jsp动态网站,和服务器可以交互。

传递参数,活动,和数据库一结合,这些数据就能从数据库获取。当数据库修改了,这些页面的数据重新加载页面时,就变化成新的内容。

Servlet负责数据准备,传递给jsp页面。

    从数据库获取数据jdbc,数据返回值给变量

    String doorName = getDoorName(去访问数据库返回店名)

    Servlet是如何把信息传递给jsp(request)

request.setAttribute(key,value);

request.setAttribute(doorName,doorName)

//把请求转发到order.jsp页面,把参数对应值都传递给jsp页面

request.getRequestDispatcher(/WEB-INF/views/Order.jsp, ).forward(request,response);

Jsp负责页面的展现

    展示html标签,tomcat直接翻译,静态页面

    动态的信息doorName,在jsp中如何获取呢(el表达式)

    ${doorName}内部回去request找,key=doorName,如果找到把value值进行返回。如果没找,就返回空,在页面上就什么也不展示。

Rs.getInt(id

getInt而不叫getInteger

在于作者的目的。返回int

在java中两类变量:

  1. 基础变量int,double,long,char,boolean

  2. 对象变量 Integer,Double,Long,String,Boolean

最大的差异:基础变量都有默认值,而对象变量的默认值都是null

int=0;double=0.0

需求:考试,一个学员考试,有成绩。

int =0,(int i=-1)

Integer =null

    基础变量存储的空间小,对象变量存储空间大!内存

Java中尽量使用对象变量(面向对象编程)

如果是在做通信程序,推荐使用简单变量

Mysql数据库实质文件类型。

早期的mysql是直接和mysql/test默认的数据库放在一起的。

现在版本换地方,从一个文件中看到,全局mysql配置文件mysql.ini(ini微软习惯配置信息的一个文件)

Mysql提供数据库所在位置

C:\Program Files\MySQL\MySQL Server 5.5\data\mysql

这是一个隐藏目录!

数据库包括表其实mysql本质文件,它把这些信息组织后,存储成二进制文件。Mysql数据库自己来维护。

String doorName = 大钟寺门店;     单独进行数据库访问写成一个方法(函数)getDoorName(jdbc,返回值string)

String tel = 110; 单独进行数据库访问,把上面的方法拷贝,然后修改获取值的地方

缺点:

  1. 大量重复代码

  2. 数据库进行多次链接

解决方案:

  1. pojo对象,因为这个做后,可以支持返回多个值

  2. 查询数据库就合成了一个方法(一次查询),

  3. 返回值就变成pojo,代码怎么设置pojo? Door door = new Door();利用pojo对象每个属性的set方法去设置即可

  4. 需要属性怎么获取,就利用pojo的get方法获取。

找出需求中的动态数据,这些数据就需要放在数据库中,方便维护!

       

特殊的表名,列名

SELECT * FROM `order`;

''

` 刀秋

创建表的主键

尽量的和业务无关,如果业务唯一性不能保证,我们的表丝毫不受影响!

Char和varchar有什么区别?

Char固定长度,查询的性能高,但是不宜太长,会浪费我们的存储的空间

Varcar变长,长度变化,查询的性能低,存储不会浪费空间

Fk  外键 forgein key

表设计

如何从用户原始需求中提炼数据库表?

  1. 原始界面中逐字分析

  2. 把信息分成几类:静态内容和动态的内容。把静态内容就排除在外。

  3. 怎么把信息拆到不同的数据库表中

  4. 从上向下分析,如果遇到动态内容,第一遇到先创建一个表

  5. 店名这个信息是描述什么的,一般就会以关键信息点作为表名tb_door

  6. 遇到电话,首先判断是否属于当前这个表的内容,电话就是属于描述门店信息的,所以就成为这个表的字段。

  7. 遇到账单号,也是判断是否属于当前这个表,不属于描述门店的信息,创建新的表。创建订单表。tb_order

  8. 账单类型看它从属我们哪个表,明显属于订单表

  9. 订单数量判断是否从事现有的表,它描述的和上面的表的分类都不相同,又创建新表tb_order_detail。如果感觉它也可以属于订单表,可以先放放试试,如果把这个内容放入到订单,其它字段内容,而且大多的字段,内容都重复。如果其中一个修改,这多条数据都有随之修改。如果发生这样的事情,表就设计的有问题,不能大量重复,就把信息拆开,形成了新表。

  10. 合计不能放入,要求:如果这个字段的内容可以由其它字段加工而成,这样的内容不能放入到数据库中。合计=数量*单价,累加

  11. 微支付要同时多看几张订单,就可以拆除,这个内容含有两个信息,只是表达的比较隐晦。它的值有:微支付和支付宝支付,现今支付。拆成两个字段:支付类型,和支付金额。

  12. 打印时间可以放入数据库表(后期对打印时间做统计),也可以不放入(不去统计时,不用放入表)。

/*==============================================================*/

create table tb_door
(id                   int not null auto_increment,door_name            varchar(200),tel                  varchar(20),primary key (id)
);

/*==============================================================*/

/*==============================================================*/

create table tb_order
(id                   int not null,door_id              int,order_no             varchar(20),order_type           varchar(30),persion_num          tinyint,cashier              varchar(30),crate_time           timestamp,end_time             timestamp,payment_type         varchar(10),payment              double(8,2),print_time           timestamp,primary key (id)
);alter table tb_order add constraint FK_Reference_1 foreign key (door_id)
references tb_door (id) on delete restrict on update restrict;

/*==============================================================*/

/*==============================================================*/

create table tb_order_detail
(id                   int not null,order_id             int,num                  varchar(200),item                 varchar(300),price                double(8,2),primary key (id)
);alter table tb_order_detail add constraint FK_Reference_2 foreign key (order_id)
references tb_order (id) on delete restrict on update restrict;

/*==============================================================*/

Mysql+sqlyog在处理日期时不够严谨,有默认值0000-00-00 00:00:00这样的格式值直接放在字段中,如果查询数据库时含有这样的内容,将来java中就会报错。它不是一个正确日期格式。

完成这个订单信息

--查询某个订单所对应门店信息

SELECT * FROM  tb_door WHERE id=1;

带3个字段返回,Door pojo

--查询某个订单的信息

SELECT * FROM tb_order WHERE id=1;

返回n个字段,Order pojo

--查询某个订单下订单详情信息

SELECT * FROM tb_order_detailWHERE order_id=1;

返回3个字段和3条记录,

数组

解决一条OrderDetail pojo

List<OrderDetail> 数组<泛型>,泛型是告诉我们数组里每个元素的值的类型是谁

Jsp最终获取数据不想去3个对象中获取,就像直接从一个对象中取获取

Order有两个特殊属性标识对象之间关联

    对一:门店 Door door;

    对多:订单详情List<OrderDetail>

在jsp页面中遍历集合,使用JSTL java支持标签库

开发步骤;

  1. 引入jar

/yh/WebContent/WEB-INF/lib/jstl-1.2.jar

  1. Jsp中先引入taglib

<%@ taglib prefix="c" uri="Oracle Java Technologies | Oracle" %>

  1. 在Jsp引入 c:forEach

<c:forEach items="${order.orderDetails}" var="o">

Items填写request集合元素,必须el写法

var起每行别名

日期处理

  1. 修改pojo返回参数类型String printTime;

rs.getDate("print_time")            只返回日期部分

rs.getTimestamp("print_time")   返回时间戳,会多毫秒数

利用格式化函数SimpleDateFormat函数

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

order.setPrintTime(sdf.format(rs.getTimestamp("print_time")));

合计

         <c:set var="total" value="0"/>   设置变量,变量名total,设置一个初始值为0

    相当于java中的while,遍历一个集合List集合,var设定一个别名,访问方便

         <c:forEach items="${order.orderDetails}" var="o">

    设置一个total进行累加

         <c:set var="total" value="${total+o.price}"/>

         <tr>

                   <td valign="top">${o.num}</td>      直接利用别名来获取属性值

                   <td>${o.item}</td>

                   <td valign="top" align="right">${o.price}</td>

         </tr>

         </c:forEach>

<td width="40" align="right">${total}</td>     合计就是el表达式

小结:

  1. 和数据库进行查询,查询3次,查询出某个订单,通过这个订单获取door_id,通过door_id获取它门店对象信息,然后在通过订单orderId去找所属的订单详情的一个集合List集合。

  2. 数据库查询后的返回值

Door door = new Door();

door.setDoorName(rs.getString(door_name));

List<OrderDetail> odList = new ArrayList<OrderDetail>();

while(rs.next()){

OrderDetail orderDetail = new OrderDetail();

orderDetail.setNum (rs.getInt(num));

。。。。

odList.add(orderDetail);

}

return odList;

Order order = new Order();

while(rs.next()){

     order.orderNo(rs.getString(order_no));

}

//关联/绑定,订单和门店关系

Door door = getDoor(order.doorId);   从数据库查询出当前订单对应门店

order.setDoor(door);

//关联/绑定,订单和订单详情的关系

List<OrderDetails> odList = getOrderDetails(order.id);

order.setOrderDetails(odList);

pojo

Door

     private Integer id;

     private String doorName;

     private String tel;

OrderDetail

     private Integer id;

     private Integer num;

     private String item;

     private Double price;

//最复杂,多一个对象关联关系

Order

     //一个订单对应一个门店,对一

     private Door door;

     //一个订单对应多个订单详情,对多

     List<OrderDetail> orderDetails;

     private Integer id;

     private String orderNo;

     .


day07:项目开发设计思路

知识回顾:

  1. 体现面向对象

Java面向对象开发语言,组织数据结构时和面向过程不同。

实现数学函数,1+1=?思考:x+y=结果,x=1,y=1,1+1=2。顺序思考,只考虑当前一个情况,其他的情况完全不考虑。

SQL,典型面向过程,

查询所有,x=table,y=字段

select id,name from tb_door;

只查询大钟寺门店

select * from tb_door where id=1;

面向对象,pojo组织它考虑非常多并不完全只为满足眼前的需求。

Door

private Integer id;

private String doorName;

private String tel;

面向对象不完全从需求出发,当前的需求出发。它只关心本身这个对象应该有哪些,而不关心是否立即能用到这些内容!

需求改变:

只前用户是不需要id的,但是他突然觉得想在页面上展示id信息。

如果是面向过程,修改原始代码!(pojo,rs也需求修改,页面改变)

如果是面向对象,修改量变小了(页面改变)

面向对象在思考时考虑比较多,但是这样的好处在用户需求变更下,修改的代码量非常小。

Pojo对象关联

订单和门店,多对一,pojo Order 对一      Door door;

订单和订单详情,一对多,pojo Order 对多  List<OrderDetail> orderDetails/odList

怎么完成整个流程?

  1. 从数据库查询数据,放到pojo对象中

  2. 从数据库分别查询订单,门店,某个订单详情,3次

  3. 把它们设置到对一pojo对象中

Order order = new Order();

order.setOrderNo(rs.getString(order_no));

//对一

Door door = getDoor(orderId);    //从数据库查询数据放入door pojo对象中

order.setDoor(door); //绑定,关联关系

//对多

List<OrderDetail> odList = getOrderDetail(orderId);

数据库的处理

List<OrderDetail> odList = new ArrayList();  //创建完成是一个空数组

while(rs.next()){

   OrderDetail od = new OrderDetail();

     od.setNum(rs.getInt(num));

     odList.add(od);     //把每个对象加入到数组中

}

order.setOrderDetails(odList);

  1. 把pojo传递给jsp

  2. 在jsp中以el表达式,jstl标签库(更复杂)展现

自己总结文档,

典型案例:

  1. 一对一,单个对象

  2. 一对多,多个对象关联

  3. 门店,订单,订单详情;学校,班级,学生

  4. 日期处理

  5. 合计

永和门店系统开发过程:

  1. 需求调研《需求说明书》

  2. 设计阶段,概要设计《概要设计说明书》,继续细化《详细设计说明书》,PowerDesinger表设计

  3. 开发,编码,调试(最耗时)

  4. 测试

  5. 维护

  1. 表设计

根据页面获取动态信息,静态直接写死在页面,而动态内容通过数据库维护。

PowerDesigner进行表设计,直观,方便修改,生成建表语句

  1. 开发

开发步骤:

  1. 利用表设计创建数据库和表,录入测试数据(正规)

  2. 先创建pojo对象,Door,OrderDetail,Order

  3. Pojo,3点:属性,get,set

  4. 对象关联

Order

对一,private Door door;

对多,List<OrderDetail> orderDetails

  1. 创建OrderServlet,使用jdbc访问数据库,把数据封装到pojo对象中(pojo传递数据)

  2. 创建jsp页面,直接使用美工给的样式表,在页面中通过el表达式来获取数据

  3. 对日期和c:forEach循环标签来实现日期和合计特殊处理

  4. 测试,访问servlet,获取数据后转向jsp,最终在浏览器上展现

完成一个大任务时,不要一口气所有代码都写完,再运行,就会出现很多bug,太多时你就不好判断是哪里的问题?一块能独立运行就测试一块,完成后,再继续写下一块的内容。

导入jar包:

  1. 数据库mysql支持包

  2. 二维码2个文件,j2se,core

  3. jstl.jar

cn.tedu.yhmis.pojo.Order@3da94292       order内存地址

cn.tedu.yhmis.pojo.Door@50408f59        door内存地址

大钟寺北三环店


永和大王数据:

mysql:

/*==============================================================*/

 tb_door表

id

door_name

tel

1

大钟寺北三环店

010-47472723

2

火车南站店 

010-83838718

3

永和大王(北三环西路店)

010-62112313

/*==============================================================*/

tb_order表

id

door_id

order_no

order_type

persion_num

cashier

create_time

end_time

payment_type

payment

print_time

1

1

P000021

食堂

5

朱晓霞

2018-06-05 11:25:07

018-06-05 18:38:11

微支付

58

2018-04-27 07:38:11

/*==============================================================*/

tb_order_detail表:

id

order_id

num

item

price

1

1

4

香菇菜包套餐-ECS<br/>4X --香菇菜包<br/>4X --现磨豆浆(热/无糖)<br/>

28.00

2

1

2

非矾油条

10.00

3

1

2

鲜肉小馄饨

20.00

/*==============================================================*/


没有在WEB-INF\classes中生成class文件

1.首先确定project->Build Automatically是否勾选上: 

2.然后,再进行测试,能不能进行编译,如果还是不能,则进行手动编译: 

project->clean 

3.进入clean对话框,选择Clean projects selected below,然后选择OK 

 

4.再次进行测试,如果还是不能编译,那就是项目设置出了问题。项目右键->properties->Java Build Path->Source 

将Default output folder设置为Test/WebContent/WEB-INF/classes,点击OK。 

 

5.又再次的进行测试,如果还是不能编译,就检查项目有没有报错,如果报错了,修改掉错误。 

6.再次进行测试,如果还是不能编译,就查看其引用的jar包是否报错,如果报错,就remove掉,重新添加即可! 

以上几个方法,总有一款适合你!

方法二:

在开始之前,查看Eclipse的problems view,里面可能会告诉相关的错误的原因,一般来说,可能有如下几种情况:

    1). 确保 project->build automatically已经被选上.

    2).  project->clean..->选第2个clean select project, 勾上start build immediatelly

    3).删除现在的项目, 重新导入源文件,设置eclipse为保存时编译,然后在保存的时候就可以自动编译了

    4).如果项目里引了某个不用的jar包,而那个包又被你删了,就会出现不报错但怎么也编译不出来class文件的情况,可以把所有包都删除,然后一个一个的再引入(需要的),不要一下子把所有包都引入来,没用的可能会引起不良后果.

     5). 想删掉某个class文件重新生成,删除class文件后,但classes目录下的文件夹被其它程序打开,比如SublineText。此时编译也不会 通过,在problems下可能会提示“con''t delete classes ……”。关掉其它程序重新编译即可。

     6).remove掉 JRE System Library,重新导入即可编译。

     7).把build path中所有包都remove掉。然后又add jars,add libraries把需要的加进去。

     8).project->properties->java build path->source->.../WEB-INF/src的output folder不要默认,编辑让它指向../WEB-INF/classes然后重新点击build工程即可自动编译。

     9).如果你的项目是CVS进行版本控制的项目,查看工程下面是否缺少了work目录,由于CVS控制时不把work加如版本,所以 checkout后没有这个目录,要手工加上有的工程就能自动编译了


作者:Darren

电话:15110448224

QQ:603026148

以上内容归Darren所有,如果有什么错误或者不足的地方请联系我,希望我们共同进步。



http://www.ppmy.cn/news/382112.html

相关文章

数电票是否打印,看这一篇就够了~

近日&#xff0c;财政部会计司发布了《关于公布电子凭证会计数据标准&#xff08;试行版&#xff09;的通知》&#xff0c;为做好电子凭证会计数据标准深化试点工作&#xff0c;研究制定了9类电子凭证的会计数据标准。在通知的《电子凭证会计数据标准——全面数字化的电子发票&…

[票据打印]打印走纸控制(1)

本方法适用于几乎所有打印机.而且不需要编程&#xff0e;从控制面板中打开&#xff02;传真和打印机&#xff02;的文件夹&#xff0c;不要点选任何打印机&#xff0e;1&#xff0e;在这个界面上的菜单栏上&#xff0c;点选&#xff02;文件&#xff02;,新建一个纸型&#xff…

关于报表打印

1 分页策略 分页与打印时密切相关的&#xff0c;皕杰报表提供了四种分页策略&#xff0c;即按纸张大小分页、按数据行数分页、按数据列数分页、用户自定义分页和不分页。分页由2个因素来控制&#xff0c;一个每个页面的大小&#xff0c;另外一个是分页顺序&#xff08;打印顺序…

iOS小技能:蓝牙打印商品价签和交易小票的模版,实现自动连接最近使用的打印机 (针对佳博GP-2120TU型号为例子进行展开) 【包含完整demo源码】

文章目录 前言I 、获取标签打印命令1.1 解决人民币符号乱码的问题II、获取票据打印命令2.1 门店票据:使用字符串格式化进行排版2.2 避免乱码问题,推荐使用%n@ 进行格式化,而非%ns2.3 自动实现%ns 自动补齐空格的功能III、 实现自动连接最近使用的打印机IV、常见问题4.1 iOS蓝…

关于电子发票打印报销最优美的姿势——发票大师网页版

目录 关于电子发票打印报销最优美的姿势关于电子发票发票大师网页版发票合并功能发票抽取功能页面整理 简单好用&#xff0c;就是发票大师 关于电子发票打印报销最优美的姿势 关于电子发票 支付电子化、办公无纸化&#xff0c;这些都成为电子发票普及的基础。从一开始&#x…

票据业务-银票、商票

一、商业汇票简介 商业汇票简介 商业汇票有时简称票据或汇票&#xff0c;但实际上&#xff0c;票据是指各种有价证券和凭证包括汇票、 本票和支票&#xff08; 注&#xff1a;本课件说到的票据就特指商业汇票 &#xff09; 本票属于银行自付证券&#xff0c;而支票、汇票属于…

票据打印机打印位图

[b] 使用POS命令中的位图打印命令打印位图。有使用8点列印和24点列印模式。 接口&#xff1a; [/b] public static byte[] imagePixelToPosByte_8(String filePath, int m)throws Exception;public static byte[] imagePixelToPosByte_8(File bmpFile, int m)throws Excepti…

电子发票多页打印技巧(将四张不同发票打印在一页纸上)

随着电子发票的普及度越来越高&#xff0c;越来越多的商家开始提供电子发票开票服务。开票是简单了&#xff0c;但一般的企业报销时要是要求员工进行贴票报销&#xff0c;这样免不了要将发票打印出来。由于我目前工作的特殊性&#xff0c;在兼职这另外一家公司的筹建工作&#…