拿到一个项目如何开发呢?从哪里入手呢?具体的技术点如何实现呢?这就是我们这次要让大家体会的,不为你理解每个技术细节,这些后期课程中都会详细讲到。只为你有大的格局,你有清晰的目标,你有真实的体验。有所了解后踏实学习java培优的课程,它能支持你在这个日益竞争激烈的世界里,安身立命,实现梦想,过上好日子!
也称为软件开发生命周期:
l 意向
l 软件项目立项,立项报告,立项审批
l 需求调研,需求评审
l 概要设计,用例图,页面原型设计
l 数据库设计,表设计
l 详细设计,类设计
l 开发编码
l 需求变更
l 测试
l 试运行,bug满天飞(加班)
l 正式上线
l 维护期
l 项目完成
l Jdk的使用
l Eclipse的使用
l 创建java工程
l 创建class类
l 创建Web工程
l HTML静态网页
l CSS样式表
l 二维码
l Eclipse中增加jdk支持
l 配置jdk
l Eclipse中增加tomcat支持
l 配置tomcat
l Servlet3.0 注解开发
l Jsp页面
l Pojo封装传递多个值
l Jsp的安全访问
l PowerDesinger
l 单表设计
l 数据库基本操作Dos
l 数据库基本命令Dos
l SqlYog操作客户端
l 数据库导入、导出
l 关联表设计
l Pojo对象关联
l 综合练习
《永和大王门店管理系统》实现顾客进店后选择购买的套餐,并在系统中生成订单,包括:门店名称,门店电话,订单号,并记录下订单类型及人数和收银员是谁,及下单时间和结账时间,并记录订单详情,顾客点了哪些食物,支付方式以及支付总金额等信息,最终实现打印门店小票。同时,在订单下方展示本店的二维码,方便顾客扫描二维码自助填写税务发票信息等功能。
票据打印
1.5.2.1 医药管理系统
1.5.2.2 税务发票系统
1.5.2.3 餐厅结账单
1.5.2.4 德克士
1.5.2.5 加油站
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 开发工具,配置jdk、tomcat
l 安装Tomcat Web中间件,运行web程序
打开浏览器访问code.tarena.com.cn 账号:tarenacode 密码:code_2017
点击CGBCODE -- > 1805 à 按阶段下载资料。
语言选择中文RPC,同意协议,其他一路next即可。
点击Window窗口,输入cmd命令,回车。
C:\Users\Administrator>d: 切换盘符,进度d盘
D:\>cd a 进入a文件夹
D:\a>dir 显示a文件夹下的所有文件
D:\a>cd .. 返回上级目录
D:\a\b\c\d>cd / 返回根目录
开发工具:eclipse
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~~");
}
}
超文本标记语言,标准通用标记语言下的一个应用。
“超文本”就是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。
超文本标记语言的结构包括“头”部分(英语:Head)、和“主体”部分(英语:Body),其中“头”部提供关于网页的信息,“主体”部分提供网页的具体内容。
在WebContent下创建,选中WebContent,右键,new,html,order.html
永和大王
顾客联
请您留意取餐账单号
自取顾客联
永和大王(北三环西路店)
010-62112313
--结账单--
账单号:P000009
账单类型:堂食
人数:1
收银员:张静
开单时间:2018-04-17 07:24:11
结账时间:2018-04-17 07:24:22
数量
品项
金额
1
豆浆油条套餐
7.00
1 X --非矾油条
1 X --现磨豆浆(热/甜)
支付宝花呗一元早餐
1
-3.00
合计
4.00
支付宝
1.00
支付宝补贴
3.00
打印时间:2018-04-17 07:24:23
根据相关税法规定,电子发票的开票日期同网上申请电子发票的日期,
如您需要当日的电子发票请务必在消费当日通过扫描下方二维码,根据指引
步骤开具您的增值税电子普通发票。此二维码30天内有效,扫描时请保持
小票平整。
官网:www.yonghe.com.cn
加盟热线:86-21-60769397
或 86-21-60769002
层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。
缺点:使网页的结构看起来十分混乱。不易后期维护。
永和大王
顾客联
请您留意取餐账单号
自取顾客联
永和大王(北三环西路店)
010-62112313
--结账单--
账单号:P000009
账单类型:堂食
人数:1
收银员:张静
开单时间:2018-04-17 07:24:11
结账时间:2018-04-17 07:24:22
数量
品项
金额
1
豆浆油条套餐
7.00
1 X --非矾油条
1 X --现磨豆浆(热/甜)
支付宝花呗一元早餐
1
-3.00
合计
4.00
支付宝
1.00
支付宝补贴
3.00
打印时间:2018-04-17 07:24:23
根据相关税法规定,电子发票的开票日期同网上申请电子发票的日期,
如您需要当日的电子发票请务必在消费当日通过扫描下方二维码,根据指引
步骤开具您的增值税电子普通发票。此二维码30天内有效,扫描时请保持
小票平整。
官网:www.yonghe.com.cn
加盟热线:86-21-60769397
或 86-21-60769002
将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*/
}
永和大王
顾客联
请您留意取餐账单号
自取顾客联
永和大王(北三环西路店)
010-62112313
--结账单--
账单号:P000009
账单类型:堂食
人数:1
收银员:张静
开单时间:2018-04-17 07:24:11
结账时间:2018-04-17 07:24:22
数量
品项
金额
1
豆浆油条套餐
7.00
1 X --非矾油条
1 X --现磨豆浆(热/甜)
支付宝花呗一元早餐
1
-3.00
合计
4.00
支付宝
1.00
支付宝补贴
3.00
打印时间:2018-04-17 07:24:23
根据相关税法规定,电子发票的开票日期同网上申请电子发票的日期,
如您需要当日的电子发票请务必在消费当日通过扫描下方二维码,根据指引
步骤开具您的增值税电子普通发票。此二维码30天内有效,扫描时请保持
小票平整。
官网:www.yonghe.com.cn
加盟热线:86-21-60769397
或 86-21-60769002
二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。
package cn.tedu.qr;
import org.junit.Test;
/*
* 这个类用来创建二维码
*/
public class QR {
//创建单元测试的方法create
@Test//选中方法名,右键,run as,junit test
public 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("二维码生成成功!!");
}
}
把指定路径下产生的二维码图片,复制到项目中。
放在WebContent/qr.png。
永和大王
顾客联
请您留意取餐账单号
自取顾客联
永和大王(北三环西路店)
010-62112313
--结账单--
账单号:P000009
账单类型:堂食
人数:1
收银员:张静
开单时间:2018-04-17 07:24:11
结账时间:2018-04-17 07:24:22
数量
品项
金额
1
豆浆油条套餐
7.00
1 X --非矾油条
1 X --现磨豆浆(热/甜)
支付宝花呗一元早餐
1
-3.00
合计
4.00
支付宝
1.00
支付宝补贴
3.00
打印时间:2018-04-17 07:24:23
根据相关税法规定,电子发票的开票日期同网上申请电子发票的日期,
如您需要当日的电子发票请务必在消费当日通过扫描下方二维码,根据指引
步骤开具您的增值税电子普通发票。此二维码30天内有效,扫描时请保持
小票平整。
官网:www.yonghe.com.cn
加盟热线:86-21-60769397
或 86-21-60769002
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;/*设置图片居中*/
}
访问:http://localhost:8080/项目名称/资源名称
如:http://localhost:8080/day02/order.html
3w1h,对每个知识点要why?
标识这个文件是一个HTML文件
标识一个html文件内容开始
头信息,
告诉浏览器我的编码utf-8
链接样式表
永和大王门店管理信息系统 在浏览器上显示的标题
头信息结束
业务的内容
顾客联 块
请您留意取餐账单号 在div属性中加入class属性,这样要在css文件中去定义这样一个样式,.please{},然后加载样式表后div就被渲染
自取顾客联
永和大王(北三环西路店)
010-62112313
--结账单-- 样式表定义一个样式,多处使用,如果需要变化,修改一处即可。复用!
账单号:P000021
账单类型:堂食
人数:1
收银员:朱晓侠
开单时间:2018-04-27 07:36:05
结账时间:2018-04-27 07:38:11
hr是一根直线,线型:直线、虚线、点线
css规范中都有相应名称
直线solid,虚线dashed
表格的开始
一行
数量 一列,style=”width:40px;”
在html规范中字符串表达,支持双引号也支持单引号
表格中某个td设置宽度后,其他对应这列的td的宽度会随着改变
品项
金额 align水平方向对齐left/center/right
4 align水平对齐,valign垂直方向对齐top/center/bottom
香菇菜包套餐-ECS
后面的标准,换行在txt中就是换行\r \n不可见字符,HTML都是可见的
4 X --香菇菜包
4 X --现磨豆浆(热/无糖)
28.00
设置水平对齐和垂直对齐这只对当前的单元格起作用!
2
非矾油条
10.00
2
鲜肉小馄饨
20.00
合计
56.00
微支付
58.00
打印时间:2018-04-27 07:38:12
根据相关税法规定,电子发票的开票日期同网上申请电子发票的日期,如您需要当日的电子发票请务必在消费当日通过扫描下方二维码,根据指引步骤开具您的增值税电子普通发票。此二维码30天有效,扫描时请保持小票平整。
特殊字符在html中需要单独标识,如果在html有多个空格,html解析时把多的空格就删除了。特殊字符转换,空格转换 ,转换的字符&作为开始;分号作为结束
src执向图片文件
官网:www.yonghe.com.cn
加盟热线:86-21-60769397 或 86-21-60769002
html文件内容的结束位置
早期系统table布局,自适应;现今使用div+css布局,样式更加灵活,美观
Table布局造成页面加载时,如果这个table很大,只有读取到table的结束标签之后,浏览器才会把这部分展现。短暂白屏,才会全部展现。
Div出现后,div结束的标签浏览器就会直接展现。
HTML标签区分大小写吗?不区分 Java区分大小写吗?严格区分大小写 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; } (系统有一个全局的样式表)全局的标准标签body,table,tr (用的最多)在页面的标签上class=”me”,在样式表中.me{},局部修饰,可以多次调用,重用/复用 (form表单使用)在页面的标签上id=”me”,在样式表中#{},局部修饰,至少在这个页面中应该保证使用一次 二维码 直接应用,java培优非常好学,这些东西都是高手写出来,在市场上广泛使用。它的稳定性,性能,安全等等指标,经过千锤百炼!“拿来主义”,只应用!(适应初级程序员) Nginx(c),Redis(c),mycat+mysql阿里,rabbotmq(erlang并发,爱立信出品,在银行业和电信业广泛使用)、微服务dubbo(java)阿里、docker(go并发)容器化技术 Hadoop离线分析(java)Spark(实时分析)(scala,下一代java)jdk1.8引入函数式编程 二维码应用 图片高度和宽度 生成图片路径 调用谷歌第三方jar,有两个jar包:放在WebContent/WEB-INF/lib core-3.3.2.jar\com\google\zxing javase-3.3.2.jar\com\google\zxing 执行程序的方式: main函数,public static void main(String[] args){},在main还有static,运行java application @Test junit单元测试,运行Junit Test,在一个类中可以写多个@Test @Test public void getValue(){} 普通方法 解决未知技术应该怎么做呢? 问人,问同事,问技术好 百度,推荐demo,如果技术难度比较大,不做读百文多看评论CSDN 官网,规范,严谨; 不好的地方,写文档的人还不如普通的开发者! 书,太多垃圾,断片;看补足底蕴。会讲很多理论。 今天任务: 动态技术J2ee Servlet+JSP Servlet被SpringMVC Controller Servlet3.0会使用注解方式 @Web 标签 JSP(用的最多的标签就是HTML标签),EL(${name})+JSTL(taglib c:forEach做循环), 2)创建JavaWeb项目,配置自己的jdk,Servlet和jsp是有运行环境的?Web中间件Tomcat 环境配置: jdk,怎么给我们的项目指定jdk? Jdk现在有多个版本,jdk1.4,目前jdk1.7,趋向jdk1.8 jdk1.9,jdk1.10,jdk1.11,宣布废弃java 企业追求什么样的技术? 最新技术 最稳定、安全的技术(企业最喜欢) 企业技术“落伍”! 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做的不好用,配置非常啰嗦, 有一个单独的窗口来管理Servers 主流tomcat7怎么配置它,要增加到eclipse 把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(不要使用) 它们之间怎么隔开的,用户/ 开发步骤: 把tomcat配置开发步骤: 把绿色解压版解压apache-tomcat-7.0.59 把tomcat和eclipse关联 把tomcat和yh项目关联 运行环境Servlet,JSP Servlet2.3,SpringMVC Controller Servlet3.0 注解方式(京淘)@Web… 利用eclipse创建Servlet 如果有错,是不能运行的,意味着必须先把所有的错误解决。 错误分为两种: 编译错误,保存文件时,自动去进行编译 运行时错误,运行时访问、调用才出错 Javax,jdk,j2ee中规定它行为,没有具体去实现, 交给第三方的Web中间件厂商去实现。 是第三方的就需要导入jar包。 怎么和我们的项目yh关联? 如果把servlet-api.jar直接放入到WebContent/WEB-INF/lib下 在tomcat启动后它就会发现有两个这个jar包,一个在上面项目中,一个在自己的lib目录中,它该调用谁? 它无法解决,就报错。 正确的姿势: 在控制台上打印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"); } 在浏览器上怎么访问 保证项目发布到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中店名变成动态 开发步骤: 准备数据(准备店名) 在jsp中获取并展现这个信息 比较 Html 纯静态,不可改变 Servlet 后台运行,访问数据库获取数据 Jsp 负责展现,把html都拿过来,然后加动态支持el表达式(${name}) 小结: HTML静态网页,通过很多预定义标签 HTML缺点,一旦写死就不能变化。出现动态页面技术纯Servlet,里面使用的java语句。 Servlet它要加html标签,代码太混乱,工作量大,重复代码。出现jsp技术 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 jdk安装版1.8 1.7 add(arg01,arg02) 1.8 add(arg01,arg02,arg03) 1.7 1.8 没有update方法了, 在实际开发中,会规定项目的版本 在实际开发中,项目的jdk版本能升级吗?dubbo 怎么指定eclipse对应的jdk版本? 在eclipse环境中配置jdk1.7 把配置的jdk和项目yh关联 C:\programe files\java Java代码解析,c:\\programe%20files\java 怎么指定eclipse对应tomcat版本? Tomcat称为web中间件,支持servlet和jsp运行。不管旧三大框架struts2+spring+hibernate,新三大框架springmvc+spring+mybatis都是在servlet和jsp技术上发展起来的。 给eclipse配置一个tomcat 把tomcat和项目关联 访问 http://localhost:8090/yh/Order http://127.0.0.1:8090/yh/Order 创建Servlet3.0 引入注解@WebServlet(“/Order”) Servlet就按java代码来编写,写业务逻辑(加工过程) 作业: 再安装一个jdk1.9 再安装一个tomcat8 写一个servlet3.0 写一个order.jsp 把html和servlet+jsp请求过程画图 Jdk 一台机器上可以安装多个版本的jdk。企业中有很多项目,旧的项目需要维护jdk1.6;开发新的项目jdk1.7。配置eclipse指定jdk。项目在开发时就会使用我们指定版本。 在eclipse怎么项目的jdk环境? javaWeb配置3处:a.Build Pach,b.Compile编译,c. facets(每个功能是不同厂家完成,每个厂家的工具(eclipse 插件)都有自己的配置) Tomcat web中间件,支持servlet和jsp的运行环境。 Javax,java扩展,很多就不是java自己实现,java只是定义规范,其他厂商为了使用这个东西,就要按照规范来写一个实现。 Tomcat就实现Servlet规范 把它在eclipse中创建 我们要把tomcat和项目关联 启动tomcat,tomcat就会运行相关项目(部署、发布) Servlet 动态,可以执行业务逻辑,加工处理 利用eclipse来创建一个Servlet3.0类,利用eclipse提供模板 特点: 在它的类上有一个标识,称为一个注解@WebServlet,注解中有一个字符串,和类名完全一致,但是/HelloServlet。 类有doGet(直接在浏览器上输入地址),doPost(表单,登录) 总有两个参数HttpServletRequest request请求,HttpServletResponse response响应 返回request.getRequestDispatcher("Order.jsp") .forward(request, response); 通过request和response对象给jsp传递值 传值 request.setAttribute(key,value); key唯一,value随便 Jsp 负责数据最后展现 完全兼容所有的html标签+css 它可以通过servlet准备数据,在jsp中利用EL表达式${doorName},它内部就去遍历request,找key 为doorName的,如果有就返回它里面的值,如果没有就不抛出错误,直接显示空。 特点就是动态,它的值可以变化。而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是可以做到的,但是它自己不能独立完成,需要数据库来管理数据,它从数据库获取数据。 今日任务: 数据库,主流数据库mycat+mysql免费(开源),Oracle(性能最好的,收费),sqlServer(最好用好,性能,安全性都一般,闭源) Mysql基础操作,CRUD,信息维护,增删改查 数据存储的地方,数据库 概念: 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数据库,维护数据 开发步骤: 有mysql数据库程序服务端 创建一个数据库store-yhmis,乱码utf-8 创建一张表tb_door(设计习惯tb_前缀),创建时指定字段,类型,长度,主键 新增数据Insert 修改数据(修改电话)Update 信息无用,删除 Delete 查询 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密码,设置密码 常用数据库命令: 数据库中命令是以分号结尾 exit; 退出mysql数据库环境 mysql中有哪些数据库? 怎么创建自己的数据库呢?解决乱码问题? 创建完数据库是有问题的,中文存入会乱码。 创建数据库时要设置字符集 创建一个yh数据库,并且设置它的字符集为utf8; 不设置字符集,mysql默认它的字符集lantin1,相当于网页ISO-8859-1 打开要使用的数据库 打开yh数据库,后面的操作就都针对这个数据库 创建表table(复杂),指定字段,类型,长度 创建tb_door表,表有3个字段,id主键字段类型int,door_name字段类型varchar(200),tel varchar类型,20长度。 展现当前数据库中所有表 删除数据库 展示表的结构 创建表,并且设置主键 设置id列为自增和主键 插入数据 insert into关键字 values关键字 tb_door表 (字段) values(多个值,用逗号隔开) 如果是字符串,必须用单引号包括起来 常用SQL语句 SQL语句不区分大小写。 习惯: 关键字大写,其它内容小写 关键字小写,其它的内容大写 习惯: 都小写 1.创建数据库 默认是lantin1字符集和网页ISO-8859-1 设置创建数据库时指定编码,支持中文了。 2.查询mysql中所有的数据库 3.打开指定数据库 4.创建数据库表 tb_作为前缀,标识它是一个table 指定id为主键 自增主键,int整形,数据库底层它会记录下当前值 每次用户新增记录,加+1,返回当主键(非常多,电商表) 流水号 5.插入数据 字段名称和java不一样,要大写都大写oracle,要小写都小写mysql 多个单词之间下划线隔开 5.查询数据 查询所有的数据 7.特殊SQL 修改信息 把tb_door中id=1数据它的电话修改为112 备份数据,测试库 写update SQL时先写where条件 设置多个字段,用逗号隔开 多个字段用逗号隔开 如果在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条件 对于null有特殊的语法,is null 删除门店为dzs的或者电话为119的 排序: Dos窗口方式 在生产环境中,不允许使用其他的软件从远程接入 也不允许在生产环境中的机器上随便安装软件 需要安装mysql 只能mysql客户端mysql.exe,它可以本地访问。 在实际开发过程,安装测试服务器上,测试库。 Mysql数据库客户端程序,sqlyog/navcat第三方工具 常见问题: 端口号,安装时配置,别人要告诉你(系统管理员) Mysql服务没有启动 查看服务,如果未启动,手动启动即可 删除数据库 注意创建数据库时,如果有中文,必须设置字符集为utf-8; 创建数据库 创建表 查看数据 新增数据 小结: why?为什么需要数据库? CRUD操作,如果有1个月的永和大王大钟寺门店订单。 数据挖掘:(统计查询) 这个门店中这个月的销售额 畅销产品 order by desc,滞销产品 order by 优秀员工,谁卖的多,每个订单收银员,单数和总金额 工作效率,结账时间-开单时间,时间越小越好 概念: 数据库 database 表 table 字段 colume/field 类型 datatype int/varchar(n)/double/timestamp时间戳 主键 primary key,唯一标识一行数据 自增 auto_increment +1,底层自动管理 数据库database 数据一个集合,数据会存储下来。Mysql底层是文件。 Mysql就是默认数据库 Mysql中数据库本质就是file文件。最终保存在磁盘上。 字符集问题,创建库时候指定,默认lantin1=ISO-8859-1,如果存中文就乱码???。 指定数据库 一个项目一个数据库 表table,一个数据库中隔离业务 create table 注意字段+类型+长度 主键+自增 常规操作 CRUD增insert删改查 数据tony tony2 要求:tony开头 通配符%,匹配任意多的字符 要求:包含tony字符串 去掉name为null的记录 只查询name为null的记录 按名称排序 查询记录总数 6)特殊SQL 知识回顾: 数据库,因为数据方便存储,通过SQL结构化查询语言Struction Query Lanuage。不光完成数据维护(新增、修改、删除),查询(统计查询) 关系型数据库Oracle、MySQL、SqlServer,非关系型数据库no sql Redis(key,value)KV数据,mongodb(json带格式的一个字符串 {abc}),hbase(列式存储) 概念: 数据库database, mysql,隔离不同的项目,yhdb,jtdb 表table,在一个项目中有很多的业务:购物车表,订单表 字段column,field,一个表中有很多信息,可以划分成很多的字段,字段最小单位不能分拆 类型datatype,数据库对不同类型的数据要进行存储 int/tinyint/double/varchar/timestamp 主键 primary key,唯一的标识这一条的记录 自增 auto_increment(mysql独有的)+1,数据库底层会记录这个表的主键的最大值 基础的SQL语句 create database yhdb; 默认的字符集lantin1,相当于iso-8859-1 create database yhdb default character set utf8; create table tb_door(id int not null auto_increment,door_name varchar(200),tel varchar(20), primary key(id)); 创建表,3个字段,类型,主键,自增 show databases; 展示所有的数据库 show tables; 展示某个库的所有的表 use yhdb; 打开某个数据库,它就作为当前数据库 show create table tb_door; 展现表的创建的sql语句 desc tb_door; 展现表的结构 drop table tb_door; 删除表,自增管理也被删除了 delete from tb_door; 只删除内容,不会把自增删除。 drop database yhdb; 删除库,所有的数据都丢失 5)最常用SQL语句 CRUD操作,新增,修改,删除,查询 查询所有数据 使用客户端sqlyog 把门店信息表实现 表设计,在概要设计时就开始表设计,在详细设计中继续细化,在详细设计完成,表设计就完全完成了。在实际开发中也会局部修改。 表名tb_door,字段们id,door_name,tel,字段类型,长度 实现建表SQL语句 在业界有标准表设计工具,PowerDesigner,以图形展现,看着方便直观,可与直接产生建表SQL语句。 安装PD PowerDesigner15.1汉化破解版.rar 破解 C:\Program Files (x86)\Sybase\PowerDesigner 15 然后运行就可以。汉化不彻底。 安装时选择语言(下拉框)选择PRC中文(最长的那个)同意协议, 然后一路next 录入数据 查询数据 在实际开发中怎么使用PD表设计?(了解,会看,会用) 表设计,非常关键,对业务了解,开发团队资深系统分析师 工具栏中就注意2个按钮, 上面的叫表,下面的是表之间关系 产生建表语句,拿到sqlyog中执行 最后一步: 怎么从数据库获取数据? JDBC java database connect java访问数据库jar工具包 JDBC j2ee规范,数据库厂商oracle(ojdbc.jar),mysql(mysql-connector-java-5.1.10-bin.jar) 导入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,无效的值 问题: 有两次数据库访问 大量的代码重复 优化: String doorName,String tel Door对象,有两个属性doorName,tel 开发步骤: 创建Door对象,有两个属性doorName,tel,一次数据库访问 可以分别设置doorName和tel。setDoorName,setTel,对象就能保存两个值 可以从Door对象中获取 getDoorName,getTel 特性:这种对象pojo对象(传递数据) 它有属性字段 每个属性有set方法 每个属性有get方法 解决2个问题: 不能多次访问数据库,合并一次 方法要返回多个值 解决方法: 不能用普通对象String一次只能一个值 使用java中pojo对象 Pojo对象特点: 多个属性值 private Integer id/private String doorName/private String tel 设置这个属性值,通过给每个属性设置set方法 Servlet中获取这个值,给每个属性增加一个get方法 鼠标右键,source菜单,选择生成get和set方法项,会自动生成相应代码 使用:pojo对象传值,步骤: 1)创建pojo对象 Door door = new Door(); 2)调用这个对象set方法给它设置值 door.setId(rs.getInt(“id”)); 3)在servlet中获取 对象是有作用域,方法内部创建的对象,出了这个方法就不能用了。 while(rs.next()){ } 方法调用过程 小结: PD powerdesinger设计工具,主要用来表设计 文件保存pdm物理数据模型 对初级程序员,会看,会找到建表sql语句 程序就要从数据库中获取数据 写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(); 在项目中获取数据库的数据 在servlet中增加一个获取数据库的方法 public String getDoorName(); //获取数据库的表中的门店数据 public String getTel(); //获取电话 访问数据库的次数太多,重复的代码也太多了。 改造优化下 多个数据库访问合成一个 把内容一次查出,放入一个对象中,一个对象可以有多个属性 在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对象特点: 多个属性,private修饰符 对应每个属性设置方法setXxx 对应每个属性获取方法getXxx Jdbc淘汰,不会直接写这些代码,框架封装,Mybatis 课改: 学习方式: 按部就班一步一步踏实脚印走(太多啰嗦地方)java面向对象,封装,继承,多态 另辟蹊径(拔苗助长,我还不会走,老师就让我跑) 田忌赛马 我们学员 资深的技术人员:项目经理,技术经理,架构师,技术副总 弱项:java基础、javaWeb、3大框架 (面试技巧,最重要是表现自己好学和渴望进入这家公司态度) 强项: Java1991年17年了,市场上企业中有大把java程序员,在企业中通过非常多的项目来真实锤炼,周期3-20年。真实企业环境。 在培优课程中优势: 互联网架构为核心 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中两类变量: 基础变量int,double,long,char,boolean 对象变量 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”; 单独进行数据库访问,把上面的方法拷贝,然后修改获取值的地方 缺点: 大量重复代码 数据库进行多次链接 解决方案: pojo对象,因为这个做后,可以支持返回多个值 查询数据库就合成了一个方法(一次查询), 返回值就变成pojo,代码怎么设置pojo? Door door = new Door();利用pojo对象每个属性的set方法去设置即可 需要属性怎么获取,就利用pojo的get方法获取。 找出需求中的动态数据,这些数据就需要放在数据库中,方便维护! 特殊的表名,列名 SELECT * FROM `order`; '' ` 刀秋 创建表的主键 尽量的和业务无关,如果业务唯一性不能保证,我们的表丝毫不受影响! Char和varchar有什么区别? Char固定长度,查询的性能高,但是不宜太长,会浪费我们的存储的空间 Varcar变长,长度变化,查询的性能低,存储不会浪费空间 Fk 外键 forgein key 表设计 如何从用户原始需求中提炼数据库表? 原始界面中逐字分析 把信息分成几类:静态内容和动态的内容。把静态内容就排除在外。 怎么把信息拆到不同的数据库表中 从上向下分析,如果遇到动态内容,第一遇到先创建一个表 “店名”这个信息是描述什么的,一般就会以关键信息点作为表名tb_door 遇到“电话”,首先判断是否属于当前这个表的内容,电话就是属于描述门店信息的,所以就成为这个表的字段。 遇到“账单号”,也是判断是否属于当前这个表,不属于描述门店的信息,创建新的表。创建订单表。tb_order “账单类型”看它从属我们哪个表,明显属于订单表 “订单数量”判断是否从事现有的表,它描述的和上面的表的分类都不相同,又创建新表tb_order_detail。如果感觉它也可以属于订单表,可以先放放试试,如果把这个内容放入到订单,其它字段内容,而且大多的字段,内容都重复。如果其中一个修改,这多条数据都有随之修改。如果发生这样的事情,表就设计的有问题,不能大量重复,就把信息拆开,形成了新表。 合计不能放入,要求:如果这个字段的内容可以由其它字段加工而成,这样的内容不能放入到数据库中。合计=数量*单价,累加 “微支付”要同时多看几张订单,就可以拆除,这个内容含有两个信息,只是表达的比较隐晦。它的值有:微支付和支付宝支付,现今支付。拆成两个字段:支付类型,和支付金额。 “打印时间”可以放入数据库表(后期对打印时间做统计),也可以不放入(不去统计时,不用放入表)。 /*==============================================================*/ /*==============================================================*/ /*==============================================================*/ /*==============================================================*/ /*==============================================================*/ /*==============================================================*/ Mysql+sqlyog在处理日期时不够严谨,有默认值0000-00-00 00:00:00这样的格式值直接放在字段中,如果查询数据库时含有这样的内容,将来java中就会报错。它不是一个正确日期格式。 完成这个订单信息 --查询某个订单所对应门店信息 带3个字段返回,Door pojo --查询某个订单的信息 返回n个字段,Order pojo --查询某个订单下订单详情信息 返回3个字段和3条记录, 数组 解决一条OrderDetail pojo List Jsp最终获取数据不想去3个对象中获取,就像直接从一个对象中取获取 Order有两个特殊属性标识对象之间关联 对一:门店 Door door; 对多:订单详情List 在jsp页面中遍历集合,使用JSTL java支持标签库 开发步骤; 引入jar /yh/WebContent/WEB-INF/lib/jstl-1.2.jar Jsp中先引入taglib <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 在Jsp引入 c:forEach Items填写request集合元素,必须el写法 var起每行别名 日期处理 修改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"))); 合计 相当于java中的while,遍历一个集合List集合,var设定一个别名,访问方便 设置一个total进行累加 小结: 和数据库进行查询,查询3次,查询出某个订单,通过这个订单获取door_id,通过door_id获取它门店对象信息,然后在通过订单orderId去找所属的订单详情的一个集合List集合。 数据库查询后的返回值 Door door = new Door(); door.setDoorName(rs.getString(“door_name”)); List 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 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 private Integer id; private String orderNo; …. 知识回顾: 体现面向对象 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 怎么完成整个流程? 从数据库查询数据,放到pojo对象中 从数据库分别查询订单,门店,某个订单详情,3次 把它们设置到对一pojo对象中 Order order = new Order(); order.setOrderNo(rs.getString(“order_no”)); //对一 Door door = getDoor(orderId); //从数据库查询数据放入door pojo对象中 order.setDoor(door); //绑定,关联关系 //对多 List 数据库的处理 List while(rs.next()){ OrderDetail od = new OrderDetail(); od.setNum(rs.getInt(“num”)); odList.add(od); //把每个对象加入到数组中 } order.setOrderDetails(odList); 把pojo传递给jsp 在jsp中以el表达式,jstl标签库(更复杂)展现 自己总结文档, 典型案例: 一对一,单个对象 一对多,多个对象关联 门店,订单,订单详情;学校,班级,学生 日期处理 合计 永和门店系统开发过程: 需求调研《需求说明书》 设计阶段,概要设计《概要设计说明书》,继续细化《详细设计说明书》,PowerDesinger表设计 开发,编码,调试(最耗时) 测试 维护 表设计 根据页面获取动态信息,静态直接写死在页面,而动态内容通过数据库维护。 PowerDesigner进行表设计,直观,方便修改,生成建表语句 开发 开发步骤: 利用表设计创建数据库和表,录入测试数据(正规) 先创建pojo对象,Door,OrderDetail,Order Pojo,3点:属性,get,set 对象关联 Order 对一,private Door door; 对多,List 创建OrderServlet,使用jdbc访问数据库,把数据封装到pojo对象中(pojo传递数据) 创建jsp页面,直接使用美工给的样式表,在页面中通过el表达式来获取数据 对日期和c:forEach循环标签来实现日期和合计特殊处理 测试,访问servlet,获取数据后转向jsp,最终在浏览器上展现 完成一个大任务时,不要一口气所有代码都写完,再运行,就会出现很多bug,太多时你就不好判断是哪里的问题?一块能独立运行就测试一块,完成后,再继续写下一块的内容。 导入jar包: 数据库mysql支持包 二维码2个文件,j2se,core 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 28.00 2 1 2 非矾油条 10.00 3 1 2 鲜肉小馄饨 20.00 /*==============================================================*/ 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所有,如果有什么错误或者不足的地方请联系我,希望我们共同进步。 ,th等价于tr,th专用于表头
样式美化CSS样式表
样式有三种方式
update() 删除线,过期,在后期版本中就可能删除掉
day04:mysql数据库+sqlyog的使用
知识回顾:
create database yh;
create database yh default character set utf8;
use yh;
create table tb_door(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));
insert into tb_door(door_name,tel) values(‘dzs’,’110’);
SELECT * FROM tb_door sqlserver/mysql
select * from TB_DOOR oracle
create database yh;
create database yh default character set utf8;
show databases;
use yh;
create table tb_door(id int,door_name varchar(200),tel varchar(20));
create table tb_door(id int,door_name varchar(200),
tel varchar(20),primary key(id));
create table tb_door(id int auto_increment,door_name varchar(200),
tel varchar(20),primary key(id));
insert into tb_door(id,door_name,tel)
values(10,’大钟寺门店’,’110’);
select * from tb_door;
drop database yh; 删除yh数据库
drop table tb_door; 删除表tb_door
show create table tb_door; 查看创建表的sql语句
desc tb_door; 查看表的结构
update tb_door set tel=’112’ where id=1;
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';
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的
delete from tb_door where tel is null;
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排第一
insert into tb_door(id,name) values(1,’tony’);
delete from tb_door where id=1;
update tb_door set name=’hell’ where id=1
select * from tb_door;
select * from tb_door where id=1;
select * from tb_door where name=’tony’;
select * from tb_door where name like ‘tony%’;(常用)
select * from tb_door where name like ‘%tony%’;(常用)
select * from tb_door where name is not 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;
删除数据库 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
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=1
update 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;
create table tb_door
(
id int not null auto_increment,
door_name varchar(200),
tel varchar(20),
primary key (id)
);
day06:日期格式的转换和统一
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;
SELECT * FROM tb_door WHERE id=1;
SELECT * FROM tb_order WHERE id=1;
SELECT * FROM tb_order_detail
WHERE order_id=1;
${o.num} 直接利用别名来获取属性值
${o.item}
${o.price}
${total} 合计就是el表达式
day07:项目开发设计思路
永和大王数据:
4X --香菇菜包
4X --现磨豆浆(热/无糖)
没有在WEB-INF\classes中生成class文件
你可能感兴趣的:(java-py,py-01-YongHe)