韩顺平 hibernate 第4讲
学习韩顺平之hibernate笔记
第一讲:Hibernate是什么?1、它是一个框架2、是一个orm框架(其它的apache ojb,ibatis,toplink)a)Orm(object relation mapping)对象关系映射框架b)O object-->业务层c)R relation-->关系数据库d)M mapping-->对象关系映射文件3、处于我们项目的持久层位置4、对JDBC的轻量级封装Hibernate的原理:1、相当于是一个翻译,业务逻辑层--->持久层-->数据库,所以业务逻辑层就不用关心用的是什么数据库,而直接和持久层打交道,持久层将从业务逻辑层得到的语句(并进行一系列优化)翻译成数据库的语句,实现一些功能。
这样当数据库变更时,我们就不用改动业务逻辑的一些sql语句。
2、每一层的耦合性减小,业务层和数据库层没有关系,可以达到轻松改变3、Hibernate可以用在j2se中4、Struts是web框架为什么有hibernate:以前我们换数据库需要重写SQL语句,和一些其它的语句,麻烦,第二讲:1、开发时一般先开发DB,在用工具生成mapping和domain2、Domain对象的名称首字母要大写3、Pojo (plain ordinary java object) 简单的JA V A对象和一张表对应(应该有一个键属性,有GET,SET方法,有一个无参的构造函数)4、对象关系映射文件:作用是用于指定domain对象和表的映射关系,取名:domain 对象。
Hbm.xml。
一般我们放在和domain对象同一个文件夹下(一个包下)5、创建一个sequencei.Create sequence emp_seqStart with 1Increment by 1Minvalue 1NomaxvalueNocycleNocache6、<hibernate-mapping><class name="Employee" table="employee" ><id name="id" column="id" type="ng.Integer"><!-- 该元素用于指定主健值生成策略hilo native increment sequence uuid --><generator class="sequence"><!-- 指定是哪一个sequence --><param name="sequence">emp_seq</param></generator></id><!-- 定义的属性--><property name="name" type="ng.String"><column name="name" not-null="false"></column></property><property name="email" type="ng.String"><column name="email" not-null="false"></column></property><property name="hiredate" type="java.util.date"><column name="hiredate" not-null="false"></column></property></class></hibernate-mapping>7、创建hibernate.cfg.xml并且配置<hibernate-configuration><session-factory><propertyname="connection.driver_class">oracle.jdbc.driver.OracleDriver</p roperty><property name="ername">scott</property><property name="connection.password">tiger</property> <propertyname="connection.utl">jdbc:oracle:thin:@localhost:1521:orcl</prop erty><!-- 明确告诉hibernate连接的是哪类数据库 --><propertyname="dialect">org.hibernate.dialect.OracleDialect</property> <!-- 用于加载映射文件 --><mapping resource="com/yxl/domain/Employee.hbm.xml"/> </session-factory></hibernate-configuration>8、运用hibernatea)创建cfg对象,用于读取hibernate.cfg.xml的内容i.Configuration cfg = new Configuration.configure();b)创建sessionFactory这是一个会话工厂,是一个重量级的对象i.SessionFactory sf = configuration.buildSessionFactory();c)创建Session 相当于jdbci.Session session = sf.openSession();d)创建transactioni.Transaction transaction = session....();第四讲:一个数据库对应一个SessionFactory,它是单例的Pojo应该序列化,目的是唯一标识该对象,同时可以在网络上传输Hibernate 把对象分成三个状态:瞬时态,持久态,第五讲:<property name="show_sql">true</property>这是打印SQl语句<property name="hbm2ddl.auto">create</property>这是自动创建表的配置(如果有表则删除后重新创建一个表),也可以有update 这是更新表(如果以前的表没有改变结构,则更新值,如果没有表则创建)Mysql中没有sequence 用increment代替第六讲:编程格式:Try {......mit();} catch(Exception e) {e.printStackTrace();If(transaction!=null) {Transation.rollback();}} finally{If(session!=null&&session.isopen()) {Session.close();}}如果要自己定义主键号,则hbm.xml中的generator的策略用assigned第七讲:当configuration.configure(configNume) 这里的confignume有包名的话要写"com/yxl/config/hibernate.cfg.xml"1、Configuration 类A:读取hibernate.cfg.xmlB:管理对象关系映射文件C:加载hibernamte的驱动,url,用户D:管理hibernate配置信息注意事项:当配置时cfg.xml有包,则得把包名写在configure方法里2、..hbm.xml是一个表和对象的映射文件,一般和对象放在一个包下第八讲:1、SessionFactory :会话工厂:是一个interface作用:A:可以缓存sql语句和数据(称为session缓存)B:是一个重量级的类,比较吃内存,所以一个数据库对应一个SessionfacC:重点:用SessionFactory得到session的两个方法:1.openSession():是获取一个新的Session();2.getcurrentSession() 获取和当前线程绑定的session,就是在同一个线程获得的session是同一个。
最新韩顺平__jsp和selverlt原完整版课件_笔记_.doc
最新韩顺平__jsp和selverlt原完整版课件_笔记_.doc◆背景知识介绍J2EE的13种技术java->servlet->jsp [技术总是有⼀个演变过程]zip粘贴到word设置◆回顾⼀下我们现有的技术java 基础(⾯向对象,集合,界⾯,线程,⽂件,⽹络)jdbc (java 的数据库编程)oracle / mysql / sqlserverhtml css javascript (web 开发) ->⽹页设计xmlserlvet+jsp ->java web开发[使⽤java技术做web开发]◆java ee 体系的介绍◆servlet项⽬演⽰◆web 开发介绍①静态页⾯(html)②动态页⾯1.⽤户可以输⼊数据,和页⾯交互(注册,购物,发帖⼦,付款...)2.不同时间打开页⾯,内容是变化.3.⽬前⽐较流⾏的左动态页⾯的技术( servlet/jsp , php , /doc/b83fffd680eb6294dd886c36.html , asp, cgi )◆动态⽹页技术的⽐较(了解)◆bs 和cs的⽐较(1)BS:browser server 浏览器服务器(2)cs client server 客户服务为什么需要的web服务器/web究竟是⼲什么的?模拟⼀个web服务器MyWebServer.javaimport java.io.*;import /doc/b83fffd680eb6294dd886c36.html .*;public class MyWebServer{public static void main(String []args) throws Exception{ServerSocket ss=new ServerSocket(80);Socket s=ss.accept();//提⽰⼀句话System.out.println("在9999 上等待连接...");OutputStream os=s.getOutputStream();BufferedReader br=new BufferedReader(new FileReader("d:\\hello.html"));String buf="";while((buf=br.readLine())!=null){os.write(buf.getBytes());}//关闭流br.close();os.close();s.close();}}◆通过tomcat来讲解BS结构◆安装tomcat服务器(1)解压即可(2)配置①在环境变量中添加JA V A_HOME= 指向你的jdk的主⽬录(并不是bin⽂件⽬录)②在不配置JA V AHOME的前提下启动tomcat 在startup.bat的第25⾏中添加set JA V A_HOME=JKD路劲(3)启动tomcat服务器到tomcat 主⽬录下bin/startup.bat(4)验证是否安装成功http://localhost:8080(8080是默认端⼝如果该端⼝已经被占⽤需要修改端⼝)◆tomcat安装后问题解决(1)tomcat⽆法正常启动的原因分析1.JA V A_HOME 配置错误,或者没有配置2.如果你的机器已经占有了8080 端⼝,则⽆法启动,解决⽅法(1) 你可以8080 先关闭netstat –annetstat –anb 来查看谁占⽤该8080(2) 主动改变tomcat的端⼝.到conf/server.xml ⽂件中修改server.xml的端⼝号)protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8443"/>(3) 能够正常启动,但是会导航到另外⼀个页⾯.去修改⼯具->管理加载项,把默认的导航给禁⽤即可.(4) 在访问tomcat时候,⼀定保证tomcat 服务器是启动◆tomcat的⽬录结构⽂件bin: 启动和关闭tomcat的bat⽂件conf: 配置⽂件-->server.xml: 该⽂件⽤于配置和server 相关的信息, ⽐如tomcat启动端⼝后,配置Host, 配置Context 即web应⽤-->web.xml : 该⽂件配置与web应⽤(web应⽤就相当于是⼀个web站点)-->tomcat-users.xml: 该⽂件⽤户配置tomcat 的⽤户密码和权限lib⽬录: 该⽬录放置运⾏tomcat 运⾏需要的jar包logs⽬录:存放⽇志, 当我们需要去查看⽇志的时候,很有⽤!,当我们启动tomcat错误时候,可以查询信息.webapps⽬录: 该⽬录下,放置我们的web应⽤(web 站点), ⽐如:建⽴web1 ⽬录下⾯放置我们的html ⽂件jsp ⽂件..图⽚... 则web1就被当做⼀个web应⽤管理起来(?特别说明tomcat 6.0 以后⽀持tomcat 5 版本还有别的设置)work: ⼯作⽬录: 该⽬录⽤于存放jsp被访问后⽣成的对应的server⽂件和.class⽂件如何去访问⼀个web 应⽤的某个⽂件◆⾸页⾯设置及⽬录规范结构现在我们要求:把hello.html⽂件设置成该web应⽤的⾸页,则需要把web应⽤的⽬录格式做的更加规范:①在web⽂件夹下配置WEB-INF⽂件夹②在web.xml ⽂件中添加配置的代码:hello1.html③通过http://localhost:8088/web1来访问hello1.htmlweb-inf⽬录下的classes⽬录将来是存放class⽂件lib ⽬录将来时存放jar⽂件web.xml 配置当前这个web应⽤的信息.◆tomcat如何去管理虚拟⽬录需求: 当我们把web 应⽤放到webapps⽬录,tomcat会⾃动管理,如果我们希望tomcat 可以管理其它⽬录下的web应⽤?->虚拟⽬录配置我在d 盘有⼀个web应⽤.◆虚拟⽬录配置步骤:①找到server.xml⽂件②编辑host节点添加Context path在server.xml中添加:myweb2:是访问时输⼊的web名,实际取出的是web2中的资源"d:\web2":绝对路径下web2中存放资源如:hello2.html实际访问时输⼊的地址:http://localhost:8088/myweb2/hello2.html绝对路径:从根分区找某个⽂件相对路径:从该⽂件位置去找另⼀个⽂件③需要重启tomcat,才能⽣效.(因为是采⽤的dom技术讲信息加载到内存中)◆context 的⼏个属性的说明path:docbase:reloadable;如果设为ture ,表⽰tomcat 会⾃动更新web应⽤,这个开销⼤,建议在开发过程中,可以设为true, 但是⼀旦真的发布了,则应当设为false;upackW AR: 如果设为ture ,则⾃动解压,否则不⾃动解压.①:打war包cd:d/web2 然后jar –cvf web2.war *②:浏览打好的war包Deploy发布后会在webapps中⾃动⽣存改⽂件◆配置域名我们看和⼀个如何配置⾃⼰的主机名:我们在实际访问⽹站的过程中,不可能使⽤http://localhost:8080/web应⽤/资源名的⽅式去访问⽹站,实际上使⽤类似/doc/b83fffd680eb6294dd886c36.html 或者/doc/b83fffd680eb6294dd886c36.html 的⽅式去访问⽹站,这个⼜是怎么实现的呢?看看ie浏览器访问⼀个web站点的流程.实现的步骤如下:(1) 在C:\WINDOWS\system32\drivers\etc 下的host⽂件添加127.0.0.1/doc/b83fffd680eb6294dd886c36.html(2) 在tomcat 的server.xml⽂件添加主机名(3) 在d:\web3 加⼊了⼀个/WEB-INF/web.xml 把hello2.html设为⾸页⾯如果连端⼝都不希望带,则可以吧tomcat的启动端⼝设为80即可.(4) 重启⽣效◆tomcat体系的再说明图:如何配置默认主机:在tomcat/conf/server.xml ⽂件◆为什么需要servlet技术?⽐如需求:我们希望⽤户可以贴,⽤户还可以回复....这样⼀些和⽤户可以交互的功能,⽤普通的java技术就完成不了, sun 就开发了servlet技术供程序员使⽤.◆servlet的介绍①servlet 其实就是java程序(java类)②该java 程序(java 类)要遵循servlet开发规范③serlvet是运⾏在服务端④serlvet 功能强⼤,⼏乎可以完成⽹站的所有功能⑤是学习jsp基础◆tomcat 和servlet 在⽹络中的位置servlet的⽣命周期是怎样的/servlet究竟是怎样⼯作的UML 时序图帮助⼤家理解参看execel⾯试题: 请简述servlet的⽣命周期(⼯作流程)答:标准版本:①WEB服务器⾸先会检查是否已经装载并创建了该servlet实例对象。
韩顺平.2011最新j2ee视频教程.jdbc 之 mysql
◆mysql 介绍(1)mysql数据库是瑞典AB 开发(2)mysql->sun->oracle(3)mysql数据库的特点1.开源2.免费3.跨平台(windows / linux /unix /苹果)4.处理并发性(13000个)/安全/稳定5.该数据库轻(对资源要求不高.) 安装文件37.7m ,而且对cpu / 内存要求不高.◆安装和配置1.一般说,一台机器装一个mysql.2.安装和配置过程见mysql安装图解◆mysql 使用1.可以使用window dos 登录到mysql数据库.基本语法在dos 下输入mysql –u 用户名-p密码特别说明: -p 后面的密码不要有空格/ 使用该命令的时候,需要配置一下环境变量.2.mysql数据库也提供图形化界面来登录mysql数据库演示:3.如何在mysql中创建数据库基本语法create database 数据库名•创建一个名称为mydb1的数据库。
create database mydb1; 【sql】•创建一个使用utf-8字符集的mydb2数据库。
create database mydb2 character set utf8•创建一个使用utf-8字符集,并带校对规则的mydb3数据库create database mydb3 character set utf8 collate utf8_general_ci;◆mysql的一些常用指令①如何查看,创建数据库的指令:show create databse 数据库名;②显示数据库指令show databases;③查看创建数据库的指令show create database 数据名;④删除数据库:drop database 数据库名⑤如何指定使用某个数据库use 数据库名;⑥如何备份和恢复数据库.mysqldump –u 用户名–p密码数据名> 存放路径该指令,需要在dos控制台下直接执行恢复数据库:1.创建一个数据库mydb2 ,但是这个数据库目前是空.e 数据名3.在mysql 控制台下使用source 备份文件路径◆创建表基本语法案例 :创建一张用户表create table users (id int ,name varchar(64),pwd varchar(64),birthday date)◆mysql数据类型(重点)①数值型:1. bit(m) m默认为1 最大64案例create table test1 (id bit(1)); ---//这里显示乱码?2. tinyint [unsigned] 如果是有符号则表示-128 到127 ,如果是无符号0-255案例create table test3(num tinyint) -- -128 到127create table test4(num tinyint unsigned)0 --- 2554.smallintsamllint 是两个字节表示的.带符号是负的2的15次方到2的15次方-1 ,无符号2的16方-1其它的数值类型,见下图即可6.floatFLOAT[(M,D)] [UNSIGNED] 是定长m :表示有效位d: 表示小数点有几位案例:create table test5( num float);create table test6(num float(5,1));7. double其用法和float 类似,只是表示的范围更大,也是定长8. numeric(m,d)用于表示小数,或者整数create table test7 (num numeric); //这样其实就是可以存放整数.create table test8 (num numeric(5,2));//这样就可以表示有效为5,小数点有两位的数②字串类型一览图:常用的有(1)char(m)m 范围是0-255, 定长.char(20) 如果你存放‘abc’字串,实际在表‘abc ’;案例:create table test11 (name char(20));☞小技巧:mysql 自带的client 默认支持utf8 码,所有我们在添加中文的时候,需要设置让client支持gbk* show variables like ‘char%’; //显示关于字符的设置参数* set character_set_client=gbk; //可以存中文* set character_set_results=gbk; //可以看中文(2)varchar(m)m 表示大小,范围0-65535,变长varchar(20) 如果你存放‘abc’字串,实际在表‘abc’;案例省略...建议: 如果表的某列长度固定,比如产品编号..学号. .. 而且在255内,我们应当使用char ,如果长度不能取得,或者长度大于255 小于65535 则使用varchar(3)text该类型,可以表示更大的字串.③日期类型(1)date日期(年-月-日)create table test12(birthday date);对于date 只保存年-月-日(2)datetime日期时间类型create table test13(hiredate datetime);(3)timestamp邮戳:该类型可以保存年-月-日: 时:分:秒它和datetime 最大的区别是,当你update 某条记录的时候,该列值,最自动更新create table test14 (name varchar(64) , sal float, hiredate1 timestamp, hiredate2 datetime);建议: 如果不知道该不该用timestamp ,就不要用.创建表综合案例create table emp(id int,name varchar(64),sex char(2),birthday date,Entry_date date,job varchar(32),salary float,resume text)修改表结构案例:•在上面员工表的基本上增加一个image列。
韩顺平老师全套php精华
韩顺平老师全套php精华播放列表第1讲. 第0讲开山篇第2讲. 第001讲html 介绍html运行原理①第3讲. 第002讲html运行原理② html文件基本结构html元素和属性第4讲. 第003讲符号实体url说明超链接发送电邮第5讲. 第004讲图像表格实际应用-菜谱课堂练习-课程表第6讲. 第005讲无序列表有序列表框架第7讲. 第006讲浮动窗口表单及表单控件①第8讲. 第007讲表单及表单控件②第9讲. 第008讲多媒体页面标签汇总① 地图映射第10讲. 第009讲多标签汇总② 线包字效果测试题第11讲. 第010讲div css开山篇第12讲. 第011讲初识css 类选择器id选择器html选择器第13讲. 第012讲通配符选择器父子选择器第14讲. 第013讲选择器使用细节块元素和行内元素盒子模型盒子模型经典应用①第15讲. 第014讲盒子模型经典应用② 作业布置第16讲. 第015讲div css作业评讲①第17讲. 第016讲div css作业评讲②第18讲. 第017讲div css作业评讲③(1)第19讲. 第018讲浮动第20讲. 第019讲网站推荐定位第21讲. 第020讲仿sohu 首页面布局可爱屋首页面第22讲. 第021讲解答学员问题第23讲. 第022讲可爱屋首页面(浏览器兼容)评讲第24讲. 第023讲动态网页技术介绍php基本介绍第25讲. 第024讲php快速入门bs和cs介绍第26讲. 第025讲web 服务器介绍apache服务器安装第27讲. 第026讲apache 服务器使用及配置① 启动和停止端口配置第28讲. 第027讲apache服务器使用及配置② apache目录结构第29讲. 第028讲apache服务器使用及配置③ apache虚拟目录第30讲. 第029讲apache服务器使用及配置④ apache虚拟主机web访问时序图第31讲. 第030讲apache服务器使用及配置⑤ 作业点评提出apache和php整合的需求第32讲. 第031讲php开发环境的搭建和使用① appserv套件安装第33讲. 第032讲php开发环境的搭建和使用② 自定义安装第34讲. 第033讲php开发环境的搭建和使用③ 安装并配置discuz论坛第35讲. 第034讲解答学生问题--一个ip绑定多个域名第36讲. 第035讲php运行过程时序图php书写规范第37讲. 第036讲php基本语法介绍php数据类型介绍第38讲. 第037讲整型细节说明第39讲. 第038讲布尔细节浮点数细节字符串细节算术运算符①第40讲. 第039讲算术运算符② 比较运算符逻辑运算符第41讲. 第040讲三元运算符类型运算符运算符优先级第42讲. 第041讲顺序控制分支控制(if ifelse switch) 程序流程图第43讲. 第042讲循环控制①(for)第44讲. 第043讲循环控制②(while dowhile) 打印金字塔案例第45讲. 第044讲打印金字塔案例评讲布置练习题第46讲. 第045讲break语句continue语句常量第47讲. 第046讲函数基本概念函数快速入门第48讲. 第047讲函数使用函数调用初步理解第49讲. 第048讲函数调用深入理解函数使用注意事项①第50讲. 第049讲函数使用注意事项② 函数作业布第51讲. 第050讲函数再回顾自定义函数第52讲. 第051讲位运算①第53讲. 第052讲位运算②第54讲. 第053讲数组介绍数组的创建数组的遍历第55讲. 第054讲数组的引用数组使用细节①第56讲. 第055讲数组使用细节② 数组运算符数组作业评讲① 数组小结第57讲. 第056讲排序介绍冒泡排序第58讲. 第057讲选择排序插入排序快速排序第59讲. 第058讲顺序查找二分查找第60讲. 第059讲多维数组数组作业评讲②第61讲. 第060讲数组作业评讲③第62讲. 第061讲类与对象的基本概念第63讲. 第062讲成员属性如何创建对象第64讲. 第063讲对象在内存中存在形式函数传递对象方式第65讲. 第064讲函数传递基本数据类型和数组方式成员方法①第66讲. 第065讲成员方法②第67讲. 第066讲作业评讲第68讲. 第067讲构造方法第69讲. 第068讲析构方法第70讲. 第069讲static关键字(静态变量)第71讲. 第070讲static关键字(静态方法) 面向对象编程三大特性①第72讲. 第071讲面向对象编程三大特性②第73讲. 第072讲面向对象编程三大特性③第74讲. 第073讲面向对象编程三大特性④第75讲. 第074讲面向对象编程三大特性⑤第76讲. 第075讲抽象类第77讲. 第076讲接口第78讲. 第077讲继承与实现比较final const 第79讲. 第078讲面向对象编程综合练习第80讲. 第079讲错误和异常处理介绍处理错误方式①-die第81讲. 第080讲处理错误方式②-错误处理器错误级别处理错误方式③-错误触发器第82讲. 第081讲php错误日志第83讲. 第082讲php异常处理第84讲. 第083讲php进阶预热篇-php执行流程时序图第85讲. 第084讲http协议深度剖析①-http请求详解防盗链技术第86讲. 第085讲http协议深度剖析②-http响应详解(302 304码运用)第87讲. 第086讲http协议深度剖析③-http响应详解(禁用缓存设置)第88讲. 第087讲http协议深度剖析④-http响应详解(文件下载)第89讲. 第088讲http协议深度剖析⑤-http响应详解(作业评讲)第90讲. 第089讲php数据库编程①-使用mysql扩展库第91讲. 第090讲php数据库编程②-使用mysql扩展库第92讲. 第091讲php数据库编程③-使用mysql扩展库第93讲. 第092讲php数据库编程④-使用mysql扩展库(在线词典案例)第94讲. 第093讲php数据库编程⑤-使用mysql扩展库(在线词典案例)第95讲. 第094讲php数据库编程⑥-使用mysqli扩展库第96讲. 第095讲php数据库编程⑦-使用mysqli扩展库第97讲. 第096讲php数据库编程⑧-使用mysqli扩展库(布置练习)第98讲. 第097讲php数据库编程⑨-使用mysqli扩展库增强(批量执行sql和事务控制)第99讲. 第098讲php数据库编程(10)-使用mysqli扩展库增强(预处理技术)第100讲. 第099讲php数据库编程(11)-使用mysqli扩展库增强(预处理技术)第101讲. 第100讲预定义超全局数组①-原理分析第102讲. 第101讲预定义超全局数组②-POST第103讲. 第102讲预定义超全局数组③-SERVER第104讲. 第103讲zend studio使用项目开发五个阶段雇员管理系统①第105讲. 第104讲雇员管理系统②-model1模式简单登录第106讲. 第105讲雇员管理系统③-model1模式数据库登录第107讲. 第106讲雇员管理系统④-model1模式雇员分页第108讲. 第107讲雇员管理系统⑤-分层模式管理员登录第109讲. 第108讲雇员管理系统⑥-分层模式雇员分页第110讲. 第109讲雇员管理系统⑦-分层模式整体翻页第111讲. 第110讲雇员管理系统⑧-分层模式通用分页模块第112讲. 第111讲雇员管理系统⑨-mvc模式介绍第113讲. 第112讲mvc模式①-用mvc模式改进网站结构第114讲. 第113讲mvc模式②-用mvc模式改进网站结构第115讲. 第114讲cookie①-cookie原理介绍创建cookie 获取cookie第116讲. 第115讲cookie②-更新cookie 删除cookie cookie运用案例第117讲. 第116讲cookie③-雇员管理系统使用cookie技术1.显示上传登录时间2.保留登录id第118讲. 第117讲session①-session原理介绍保存session第119讲. 第118讲session②-获取session 更新session 删除session session细节和原第120讲. 第119讲session③-购物车cookie禁用后如何使用session session防用户非法登录第121讲. 第120讲session④-验证码防恶意攻击第122讲. 第121讲session⑤-session配置session的gc机制自定义session处理器第123讲. 第122讲php文件编程①-文件操作原理如何获取文件信息如何读文件第124讲. 第123讲php文件编程②-如何写文件拷贝文件创建和删除(文件夹、文件)第125讲. 第124讲php文件编程③-文件的上传和下载文件上传细节讨论第126讲. 第125讲php文件编程④-mini文件共享网实现分析第127讲. 第126讲php绘图技术①-报表简介第128讲. 第127讲php绘图技术②-php绘图坐标体系第129讲. 第128讲php绘图技术③-php绘图原理及步骤第130讲. 第129讲php绘图技术④-php绘图核心技术第131讲. 第130讲php绘图技术⑤-绘制3d效果人口分布饼状图第132讲. 第131讲php绘图技术⑥-JpGraph-网民支持情况统计图(静态数据)第133讲. 第132讲php绘图技术⑦-JpGraph-网民支持情况统计图(实时数据)第134讲. 第133讲php绘图技术⑧-绘制验证码第135讲. 第134讲php xml编程①-xml基本介绍xml元素xml属性第136讲. 第135讲php xml编程②-cdata 实体字符处理指令dtd快速入门编程校验xml第137讲. 第136讲php xml编程③-内部dtd 外边dtd dtd元素dtd修饰符第138讲. 第137讲php xml编程④-dtd属性引用实体参数实体ide开发xml 第139讲. 第138讲php xml编程⑤-复杂的dtd综合练习第140讲. 第139讲php xml编程⑥-dom基本概念phpdom编程(1)第141讲. 第140讲php xml编程⑦-phpdom编程(2)第142讲. 第141讲php xml编程⑧-phpdom编程(3) 综合练习-基于xml的在线词典第143讲. 第142讲php xml编程⑨-综合练习-基于xml的在线词典phpdom使用xpath第144讲. 第143讲php xml编程(10)-SimpleXML第145讲. 第144讲php xml编程(11)-基于xml的在线词典评讲第146讲. 第145讲开发自己的网上支付平台①-网上支付的两种方式及其流程介绍第147讲. 第146讲开发自己的网上支付平台②-商家与易宝支付网关对接详解第148讲. 第147讲开发自己的网上支付平台③-发送支付请求第149讲. 第148讲开发自己的网上支付平台④-接收支付结果第150讲. 第149讲开发自己的网上支付平台⑤-防止回调页面刷新韩顺平老师全套php精华课程视频介绍今天给大家分享一套PHP目前国内讲得非常好的课程,本课程共149讲,由韩顺平老师主讲,这套课程我听过,韩老师讲课并不是照本宣科,他有着非常丰富的大型项目开发经验,并不这些经验融入到这套课程中,从而让大家分享他的开发经验,这是很多php课程难有的,要学php视频教程,那么我建议大家一定要学习韩顺平老师讲解的,这样你会少走弯路,智慧树学习网收集整理。
传智播客 韩顺平 大型网站核心技术(页面静态化)共42页
主讲:韩顺平
从安全的角度来看news-cn-sport-id2.html 更不容易被sql注入攻 击。
—高级软件人才实作培训专家!
使用php缓存机制完成页面静态化
主讲:韩顺平
我们可以使用php自带的缓存机制来完成页面静态化,但在这里我要 说明一点,仅靠php自身的缓存机制并不能完美的解决页面静态化, 往往需要和其它静态化技术(通常是伪静态技术)结合使用, 例子:(新闻查询系统)当访问一个页面时,先判断是否存在缓存,如果
韩顺平我们可以使用php自带的缓存机制来完成页面静态化但在这里我要说明一点仅靠php自身的缓存机制并不能完美的解决页面静态化往往需要和其它静态化技术通常是伪静态技术结合使用?例子
传智播客 韩顺平 大型网站核心技术 (页面静态化)
—高级软件人才实作培训专家!
—高级软件人才实作培训专家!
—高级软件人才实作培训专家!
主讲:韩顺平
简单的说: 页面静态化技术就是要把php->html直接访问,从 而减少对数据库的操作,达到提高访问速度[示意图]
基本流程是: 1.创建模板文件template.html 2.通过模板文件,创建静态页面的 php文件 xx.php 3. 用户访问生成的静态页面 xx.html
快速入门案例(根据模板生成静态页面)
说明: 比如 localhost/news.php?type=music&id=100 希望上面的url 变成 localhost/news-music-id100.html
—高级软件人才实作培训专家!
伪静态 1
主讲:韩顺平
比如这个网页
localhost/content.php/1,122,8912.html 其实处理的脚本是content.php 参数为1,122,8912 相当于content.php?a=1&b=122&c=8912 只不过这样的URL太难 记。搜索引擎也不喜欢。
韩顺平循序渐进学java从入门到精通(全知识点笔记整理)
Java韩顺平笔记第1讲内容介绍.项目演示.原理剖析1. 课程包括:java面向对象编程,java图形界面,java数据库编程,java文件i/o流,java网络编程,java的多线程2. Java历史:1990 sun 启动绿色计划 1992 创建 oak语言—> java1994 gosling 参加硅谷大会演示java功能震惊世界 1995 sun 正式发布java第一个版本,目前最新的是jdk7.03. java开发工具:记事本,jcreator,jbuilder,netbean,eclipse4. jdk包括:jre(java运行环境)java的工具:编译器javac.exe解释执行器java.exe java的类库:3600多个,常用的150多个5. 第一个程序://功能:显示―HelloWorld‖//public:表示类是公共的,一个文件中只有一个public类 //class:表示这个是一个类//HelloWorld:类名(公共类的类名,必须和文件名一样)public class HelloWorld {//一个主函数,程序的入口 public static void main (String args[]) { //执行语句System.out.println("helloWorld!"); } }6. Java源程序(.java文件)——>java字节码文件(.class文件)——>由解释执行器(java.exe)将字节码文件加载到java虚拟机(jvm)——>字节码文件(.class)就会在java虚拟机中执行l,average); } }第2讲变量.数据类型1. 在java里面int占4个字节,long占8个字节2. Java基本数据类型:整数:(byte一个字节:-128---127 int四个字节:-2147483648---+2147483647short两个字节:-32768---+32767 long八个字节:)小数(浮点):float double布尔:boolean字符:char(两个字节,可以存放汉字, char test1 ='中';)引申到字符串(类)3.在java中对char进行运算的时候,直接是当做ASCII码对应的整数4.数据不能从高精度到低精度的转换Byte<short<int<long<float<doublefloat a=3.4;是过不去的,在java中小数默认是double(双精度)的应该写成是float a=3.4f;不过可以强制转换:int a=(int)1.2; intb=(int)1.95. int a=1;int b=a+1.2; a先是往高精度转换,然后赋给b,就报错改成int a=1;double b=a+1.2; 或者int a=1;float b=a+1.2f; 就解决了第4讲流程控制1. switch case语句中,switch条件表达式的数据类型应该和后面case的类型一致2. switch case语句中,可用的数据类型主要是:byte short int char enum第5讲类与对象1. 面向对象编程-类与对象类名首字母大写类里面的元素叫类的成员变量/属性2. 类的定义package 包名;class 类名extends 父类implements接口名{成员变量;构造方法;成员方法;}3. 如何创建对象:先声明再创建Cat cat1;cat1=new Cat();一步到位Cat cat1 =new Cat();4. 引用传递类似于指针一样第8讲this 类变量1. this属于类的对象的而不是属于类的2. 5this不能在类的外部使用,只能在类定义时候使用!3. 可以用类名直接访问静态变量第9讲类方法封装1.类变量是该类的所有对象共享的对象,一改全改了2.定义语法:访问修饰符static 数据类型变量名3. public class Demo9{static int i=1;static{System.out.println("zhixingyicile");i++;}//会自动执行一次,也只有一次public Demo9(){System.out.println("ffffffff");i++;}public static void main(String args[]){Demo9 t1=new Demo9();System.out.println(Demo9.i);Demo9 t2=new Demo9();System.out.println(i);}}4.类方法(静态方法、静态函数):属于所有对象实例的5.Java中:类变量(static)原则上用类方法(static)去访问;类方法中不能访问非静态变量,就是非类变量,但是普通的成员方法可以访问静态变量(类变量)使用:类名.类方法名对象名.类方法名6.非类变量就是实例变量,属于每个对象自己的7.Java面向对象编程的三(四)大特征:封装、继承、多态(、抽象)8.抽象:把一类事物的共有的属性和行为提取出来,形成一个物理模板,此研究问题的方法就是抽象9.封装:把抽象出来的数据和对数据的操作封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作(成员方法),才能对数据进行操作。
韩顺平java图形界面编程共41页
▪
26、要使整个人生都过得舒适、愉快,这是不可能的,因为人类必须具备一种能应付逆境的态度。——卢梭
▪
27、只有把抱怨环境的心情,化为上进的力量,才是成功的保证。——罗曼·罗兰
▪
28、知之者不如好之者,好之者不如乐之者。——孔子
▪
29、勇猛、大胆和坚定的决心能够抵得上武器的精良。——达·芬奇
▪
30、意志是一个强壮的盲人,倚靠在明眼的跛子肩上。——叔本华
谢谢!
41
韩顺平java图形界面编程
36、“不可能”这个字(法语是一个字 ),只 在愚人 的字典 中找得 到。--拿 破仑。 37、不要生气要争气,不要看破要突 破,不 要嫉妒 要欣赏 ,不要 托延要 积极, 不要心 动要行 动。 38、勤奋,机会,乐观是成功的三要 素。(注 意:传 统观念 认为勤 奋和机 会是成 功的要 素,但 是经过 统计学 和成功 人士的 分析得 出,乐 观是成 功的第 三要素 。
最新韩顺平老师全套php精华
韩顺平老师全套p h p精华韩顺平老师全套php精华播放列表第1讲. 第0讲开山篇第2讲. 第001讲 html介绍 html运行原理①第3讲. 第002讲 html运行原理② html文件基本结构 html元素和属性第4讲. 第003讲符号实体url说明超链接发送电邮第5讲. 第004讲图像表格实际应用-菜谱课堂练习-课程表第6讲. 第005讲无序列表有序列表框架第7讲. 第006讲浮动窗口表单及表单控件①第8讲. 第007讲表单及表单控件②第9讲. 第008讲多媒体页面标签汇总①地图映射第10讲. 第009讲多标签汇总②线包字效果测试题第11讲. 第010讲 div css开山篇第12讲. 第011讲初识css 类选择器 id选择器 html选择器第13讲. 第012讲通配符选择器父子选择器第14讲. 第013讲选择器使用细节块元素和行内元素盒子模型盒子模型经典应用①第15讲. 第014讲盒子模型经典应用②作业布置第16讲. 第015讲 div css作业评讲①第17讲. 第016讲 div css作业评讲②第18讲. 第017讲 div css作业评讲③(1)第19讲. 第018讲浮动第20讲. 第019讲网站推荐定位第21讲. 第020讲仿sohu首页面布局可爱屋首页面第22讲. 第021讲解答学员问题第23讲. 第022讲可爱屋首页面(浏览器兼容)评讲第24讲. 第023讲动态网页技术介绍 php基本介绍第25讲. 第024讲 php快速入门 bs和cs介绍第26讲. 第025讲 web服务器介绍 apache服务器安装第27讲. 第026讲apache服务器使用及配置①启动和停止端口配置第28讲. 第027讲 apache服务器使用及配置② apache目录结构第29讲. 第028讲 apache服务器使用及配置③ apache虚拟目录第30讲. 第029讲 apache服务器使用及配置④ apache虚拟主机 web访问时序图第31讲. 第030讲 apache服务器使用及配置⑤作业点评提出apache和php整合的需求第32讲. 第031讲 php开发环境的搭建和使用① appserv套件安装第33讲. 第032讲 php开发环境的搭建和使用②自定义安装第34讲. 第033讲 php开发环境的搭建和使用③安装并配置discuz论坛第35讲. 第034讲解答学生问题--一个ip绑定多个域名第36讲. 第035讲 php运行过程时序图 php书写规范第37讲. 第036讲 php基本语法介绍 php数据类型介绍第38讲. 第037讲整型细节说明第39讲. 第038讲布尔细节浮点数细节字符串细节算术运算符①第40讲. 第039讲算术运算符②比较运算符逻辑运算符第41讲. 第040讲三元运算符类型运算符运算符优先级第42讲. 第041讲顺序控制分支控制(if ifelse switch) 程序流程图第43讲. 第042讲循环控制①(for)第44讲. 第043讲循环控制②(while dowhile) 打印金字塔案例第45讲. 第044讲打印金字塔案例评讲布置练习题第46讲. 第045讲 break语句 continue语句常量第47讲. 第046讲函数基本概念函数快速入门第48讲.第047讲函数使用函数调用初步理解第49讲. 第048讲函数调用深入理解函数使用注意事项①第50讲. 第049讲函数使用注意事项②函数作业布第51讲. 第050讲函数再回顾自定义函数第52讲. 第051讲位运算①第53讲. 第052讲位运算②第54讲. 第053讲数组介绍数组的创建数组的遍历第55讲. 第054讲数组的引用数组使用细节①第56讲. 第055讲数组使用细节②数组运算符数组作业评讲①数组小结第57讲. 第056讲排序介绍冒泡排序第58讲. 第057讲选择排序插入排序快速排序第59讲. 第058讲顺序查找二分查找第60讲. 第059讲多维数组数组作业评讲②第61讲. 第060讲数组作业评讲③第62讲. 第061讲类与对象的基本概念第63讲. 第062讲成员属性如何创建对象第64讲. 第063讲对象在内存中存在形式函数传递对象方式第65讲. 第064讲函数传递基本数据类型和数组方式成员方法①第66讲. 第065讲成员方法②第67讲. 第066讲作业评讲第68讲. 第067讲构造方法第69讲. 第068讲析构方法第70讲. 第069讲 static关键字(静态变量)第71讲. 第070讲 static 关键字(静态方法) 面向对象编程三大特性①第72讲. 第071讲面向对象编程三大特性②第73讲. 第072讲面向对象编程三大特性③第74讲. 第073讲面向对象编程三大特性④第75讲. 第074讲面向对象编程三大特性⑤第76讲. 第075讲抽象类第77讲. 第076讲接口第78讲. 第077讲继承与实现比较 final const第79讲. 第078讲面向对象编程综合练习第80讲. 第079讲错误和异常处理介绍处理错误方式①-die第81讲. 第080讲处理错误方式②-错误处理器错误级别处理错误方式③-错误触发器第82讲. 第081讲 php错误日志第83讲. 第082讲 php异常处理第84讲. 第083讲 php 进阶预热篇-php执行流程时序图第85讲. 第084讲 http协议深度剖析①-http请求详解防盗链技术第86讲. 第085讲http协议深度剖析②-http响应详解(302 304码运用)第87讲. 第086讲 http协议深度剖析③-http响应详解(禁用缓存设置)第88讲. 第087讲 http协议深度剖析④-http响应详解(文件下载)第89讲. 第088讲 http协议深度剖析⑤-http响应详解(作业评讲)第90讲. 第089讲 php数据库编程①-使用mysql 扩展库第91讲. 第090讲 php数据库编程②-使用mysql扩展库第92讲. 第091讲 php数据库编程③-使用mysql扩展库第93讲. 第092讲 php数据库编程④-使用mysql扩展库(在线词典案例)第94讲. 第093讲 php数据库编程⑤-使用mysql扩展库(在线词典案例)第95讲. 第094讲 php数据库编程⑥-使用mysqli扩展库第96讲. 第095讲 php数据库编程⑦-使用mysqli扩展库第97讲. 第096讲 php数据库编程⑧-使用mysqli扩展库(布置练习)第98讲. 第097讲 php数据库编程⑨-使用mysqli扩展库增强(批量执行sql和事务控制)第99讲. 第098讲 php数据库编程(10)-使用mysqli扩展库增强(预处理技术)第100讲. 第099讲 php数据库编程(11)-使用mysqli扩展库增强(预处理技术)第101讲. 第100讲预定义超全局数组①-原理分析第102讲. 第101讲预定义超全局数组②-POST第103讲. 第102讲预定义超全局数组③-SERVER第104讲. 第103讲 zend studio使用项目开发五个阶段雇员管理系统①第105讲. 第104讲雇员管理系统②-model1模式简单登录第106讲. 第105讲雇员管理系统③-model1模式数据库登录第107讲. 第106讲雇员管理系统④-model1模式雇员分页第108讲. 第107讲雇员管理系统⑤-分层模式管理员登录第109讲. 第108讲雇员管理系统⑥-分层模式雇员分页第110讲. 第109讲雇员管理系统⑦-分层模式整体翻页第111讲. 第110讲雇员管理系统⑧-分层模式通用分页模块第112讲. 第111讲雇员管理系统⑨-mvc模式介绍第113讲. 第112讲 mvc模式①-用mvc 模式改进网站结构第114讲. 第113讲 mvc模式②-用mvc 模式改进网站结构第115讲. 第114讲 cookie①-cookie原理介绍创建cookie 获取cookie第116讲. 第115讲 cookie②-更新cookie 删除cookie cookie运用案例第117讲. 第116讲cookie③-雇员管理系统使用cookie技术 1.显示上传登录时间2.保留登录id第118讲. 第117讲 session①-session原理介绍保存session第119讲. 第118讲 session②-获取session 更新session 删除session session细节和原第120讲. 第119讲 session③-购物车 cookie禁用后如何使用session session防用户非法登录第121讲. 第120讲 session④-验证码防恶意攻击第122讲. 第121讲 session⑤-session配置 session的gc 机制自定义session处理器第123讲. 第122讲 php文件编程①-文件操作原理如何获取文件信息如何读文件第124讲. 第123讲 php文件编程②-如何写文件拷贝文件创建和删除(文件夹、文件)第125讲. 第124讲 php文件编程③-文件的上传和下载文件上传细节讨论第126讲. 第125讲 php文件编程④-mini文件共享网实现分析第127讲. 第126讲 php绘图技术①-报表简介第128讲. 第127讲 php绘图技术②-php 绘图坐标体系第129讲. 第128讲 php绘图技术③-php绘图原理及步骤第130讲. 第129讲 php绘图技术④-php绘图核心技术第131讲. 第130讲 php绘图技术⑤-绘制3d效果人口分布饼状图第132讲. 第131讲 php绘图技术⑥-JpGraph-网民支持情况统计图(静态数据)第133讲. 第132讲 php绘图技术⑦-JpGraph-网民支持情况统计图(实时数据)第134讲. 第133讲 php绘图技术⑧-绘制验证码第135讲. 第134讲php xml编程①-xml基本介绍 xml元素 xml属性第136讲. 第135讲 php xml编程②-cdata 实体字符处理指令 dtd快速入门编程校验xml第137讲. 第136讲 php xml编程③-内部dtd 外边dtd dtd元素 dtd修饰符第138讲. 第137讲 php xml 编程④-dtd属性引用实体参数实体 ide开发xml第139讲.第138讲 php xml编程⑤-复杂的dtd综合练习第140讲. 第139讲 php xml编程⑥-dom基本概念 phpdom编程(1)第141讲. 第140讲 php xml编程⑦-phpdom编程(2)第142讲. 第141讲 php xml编程⑧-phpdom编程(3) 综合练习-基于xml 的在线词典第143讲. 第142讲 php xml编程⑨-综合练习-基于xml的在线词典 phpdom使用xpath第144讲. 第143讲php xml编程(10)-SimpleXML第145讲. 第144讲 php xml编程(11)-基于xml的在线词典评讲第146讲. 第145讲开发自己的网上支付平台①-网上支付的两种方式及其流程介绍第147讲. 第146讲开发自己的网上支付平台②-商家与易宝支付网关对接详解第148讲. 第147讲开发自己的网上支付平台③-发送支付请求第149讲. 第148讲开发自己的网上支付平台④-接收支付结果第150讲. 第149讲开发自己的网上支付平台⑤-防止回调页面刷新韩顺平老师全套php精华课程视频介绍今天给大家分享一套PHP目前国内讲得非常好的课程,本课程共149讲,由韩顺平老师主讲,这套课程我听过,韩老师讲课并不是照本宣科,他有着非常丰富的大型项目开发经验,并不这些经验融入到这套课程中,从而让大家分享他的开发经验,这是很多php课程难有的,要学php视频教程,那么我建议大家一定要学习韩顺平老师讲解的,这样你会少走弯路,智慧树学习网收集整理。
学习笔记之韩顺平老师的MySQL优化教程
学习笔记之韩顺平⽼师的MySQL优化教程⼀、表的设计什么样的表才是符合3NF范式?表的范式,⾸先是符合1NF,才能满⾜2NF,进⼀步才能满⾜3NF范式。
1NF范式:即表的列具有原⼦性,不可再分解,即列的信息,不能分解,只有数据库是关系型数据库,就⾃动满⾜1NF2NF范式:表中的记录是唯⼀的,就满⾜2NF范式,通常我们设计⼀个主键来实现。
3NF范式:是对字段冗余性约束,要求字段没有冗余,没有冗余的数据库设计可以做到。
但是,没有冗余的数据库未必是最好的数据库,有时为了提⾼运⾏效率,就必须降低范式标准,适当保留数据冗余(即反三范式)。
具体做法是:再概念数据模型设计市遵循第三范式,降低范式标准的⼯作放到物理数据模型设计时考虑。
降低范式就是增加字段,允许冗余。
⽐如——在表的⼀对N情况下,为了提供效率,可能会在1 这表中设计字段,提⾼速率。
⼆、慢查询SQL优化,SQL语句本⾝的优化。
SQL优化的⼀般步骤:1. 通过show status命令了解各种SQL的执⾏频率2. 定位执⾏效率较低的SQL语句(重点select)3. 通过explain分析低效率的SQL语句的执⾏情况4. 确定问题并采取相应的优化措施问题是:如何从⼀个⼤项⽬中,迅速定位执⾏慢的语句(定位慢查询)?①⾸先我们了解MySQL数据库的⼀些运⾏状态如何查询(⽐如想知道当前MySQL运⾏的时间/⼀共执⾏了多少次select,update,delete/当前连接)show status常⽤的:show status like "uptime";show status like "conn_select"; show status like "conn_insert"; ...类推 update,deleteshow [session|global] status like ...... 如果你不写 [session|global]默认是session会话,只取出当前窗⼝的执⾏,如果你想看所有(从mysql 启动到现在,则应该global)show status like "connections";show status like "show_queries"; 显⽰慢查询②如何去定位慢查询构建⼀个⼤表(400万)——>存储过程构建。
韩顺平Java(持续更新中)
韩顺平Java(持续更新中)原创上课笔记,转载请注明出处第⼀章⾯向对象编程(中级部分) PDF为主1.1 IDEA删除当前⾏,ctrl+y复制当前⾏,ctrl+d补全代码,alt+/添加或者取消注释,ctrl+/导⼊该⾏需要的类,alt+enter快速格式化代码,ctrl+ALT+L快速运⾏程序,alt+r(⾃⼰设置)⽣成构造器等,alt+insert查看⼀个类的层级关系,ctrl+H,继承有⽤(光标放在类名上)快速定位某个⽅法的位置,ctrl+B(ctrl+⿏标点击)⾃动分配变量,main⽅法中,.var,例如new Scanner(System.in).var查看快捷键模板:Live Templates (例如,fori)1.2 Object类详解(equals、==、hashCode等)所有类都实现了Object类,都能使⽤Object类的⽅法。
1.2.1 ==运算符基本类型—>判断值是否相等引⽤类型—>判断地址是否相等指向同⼀个地址,结果为true1.2.2 equals()⽅法1.2.2.1 基本介绍Object的equals()⼀⽬了然,==运算符,⽤来判断地址是否相等⽽String等类的equals()被重写了,⽤来判断内容是否相等(根据需求,判断内容相等的标准也是可能会有所改变的)如何重写equals⽅法:Person person1 = new Person("jack", 10, '男');Person person2 = new Person("jack", 20, '男');System.out.println(person1.equals(person2));//假,如果没有重写Person类的equals⽅法,这⾥的equals⽅法调⽤的Object的(即,判断的是地址)⽰例代码://重写Object 的 equals⽅法public boolean equals(Object obj) {//判断如果⽐较的两个对象是同⼀个对象,则直接返回trueif(this == obj) {return true;}//类型判断if(obj instanceof Person) {//是Person,我们才⽐较//进⾏向下转型, 因为我需要得到obj的各个属性Person p = (Person)obj;return .equals() && this.age == p.age && this.gender == p.gender;}//如果不是Person ,则直接返回falsereturn false;}1.2.2.2 课堂练习第三个输出:因为Person并没有重写equals,所以这⾥调⽤的equals⽅法是Object的,判断地址是否相同的,⽽这两个新的对象肯定不相等,所以返回false 这道题需要注意的是,基本数据类型的==运算符是判断内容的1.2.3 hashCode()⽅法1.2.4 toString()⽅法全类名:包名+类名/**Object的toString() 源码(1)getClass().getName() 类的全类名(包名+类名 )(2)Integer.toHexString(hashCode()) 将对象的hashCode值转成16进制字符串*/public String toString() {return getClass().getName() + "@" + Integer.toHexString(hashCode());}1.2.5 finalize()⽅法public class Finalize_ {public static void main(String[] args) {Car bmw = new Car("宝马");//这时 car对象就是⼀个垃圾,垃圾回收器就会回收(销毁)对象, 在销毁对象前,会调⽤该对象的finalize⽅法//,程序员就可以在 finalize中,写⾃⼰的业务逻辑代码(⽐如释放资源:数据库连接,或者打开⽂件..)//,如果程序员不重写 finalize,那么就会调⽤ Object类的 finalize, 即默认处理//,如果程序员重写了finalize, 就可以实现⾃⼰的逻辑bmw = null;System.gc();//主动调⽤垃圾回收器System.out.println("程序退出了....");}}class Car {private String name;//属性, 资源。
韩顺平java从入门到精通视频教程(全94讲)学习笔记整理(齐全)
java平台1、J2SE java开发平台标准版2、J2EE java开发平台企业版java程序需要在虚拟机上才可以运行,换言之只要有虚拟机的系统都可以运行java程序。
不同系统上要安装对应的虚拟机才可以运行java程序开发步骤1、编写源文件 (.java)2、编译源文件为类文件(.class)可用J2SE或J2EE编译3、在虚拟机上运行注释//单行注释/* */多行注释java内容介绍java编程可以分成三个方向:1、java se (j2se)桌面开发 java中的基础中的基础2、java ee (j2ee)web开发3、java me (j2me)手机开发java se课程介绍java面向对象编程(基础)java图开界面开发java数据库编程java文件io流编程java网络编程java多线程编程java ee基础1java面向对象编程--数据库编程-->java sejava 基础2html--css--javascript-->div+cssjava ee中级部分Servlet--Jsp-->mvc模式java ee高级部分Struts--Ejb--Hibernate--Spring--Ajax(ext,dw2)-->ssh框架java之父gosling1990 sun启动绿色计划1 | 4451992 创建oak语言-->java1994 gosling参加硅谷大会演示java功能,震惊世界1995 sun正式发布java第一个版本,目前最新是jdk7.0java开发工具记事本、(jcreator、jbuilder退出舞台了)、netbean、eclipse如何选择开发工具先选择记事本,对java有一定了解后再使用eclipse高级开发工具为什么呢?1、更深刻的理解java技术,培养代码感2、有利于公司面试java语言的特点1、java语言是简单的2、java语言是面向对象的3、java语言是跨平台(操作系统)的[即一次编译,到处运行]4、java是高性能的java第一个程序hello.java运行java程序要安装和配置jdkjdk是什么?1、jdk全称java dvevlopment kit中文java开发工具包2、jdk是sun公司开发的3、jdk包括jre(java runtime envirnment)java运行环境、一堆java工具和java基础的类库(类共3600左右,常用类在150个左右)4、可以在下载**开发安装jdk,用户执行需要安装jre配置JDK添加环境变量即可windows下配置jdk在计算机属性--高级设置--环境变量--添加PATH将JDK所在路径指定即可。
韩顺平PHP100-149雇员系统-cookie和session和php操作xml 和php绘图技术和网上支付笔记
104讲雇员管理系统-model1模式简单登录分层的核心思想,就是把界面和业务逻辑分离,具体的做法是:实体表会对应两个文件,一个是Admin.class.php AdminService.class.php111讲雇员管理系统⑨-mvc模式介绍MVC的核心思想:强制程序员在编写项目的时候,把数据的输入/数据的处理/数据的输出分开MVC开发模式小结:1:首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理。
2:然后调用模型用来处理用户的请求并返回数据。
3:最后控制器用相应的视图显示模型返回的数据,并通过浏览器呈现给用户。
把同一逻辑的请求(对同一张表的操作),提交一个控制器即可。
114-116讲cookie原理介绍创建cookie 获取cookie什么是会话?打开浏览器,访问某个网站的很多页面(通过点击超链接),当你关闭浏览器后一个会话结束。
什么是cookie?setCookie("name","shunping",time()+300);setCookie("address","北京",time()+300);setCookie("hobby","旅游",time()+30);#cookie能保存什么样的信息,就是字符串#客户端可以保存多个key=>value键值对#cookie也可以保存中文,默认将会对中文进行urlencode进行编码#cookie可以有多个键值对,键 值,可以给不同的键值对,制定不同的有效时间3:如何从客户端获取保存的cookie信息//获取cookie信息echo "<pre>";print_r($_COOKIE);echo "</pre>";//获取指定cookie的值$name=$_COOKIE['name'];1;如果cookie有效时间到,则不能取出2;客户端cookie信息是怎样传递给服务器的?通过http协议Cookie: name=shunping这个机制是由http协议规定的4.1:如何跟新cookie信息更新某个cookie key<===>Value 实际上就是重新设置<?php//更新setCookie("address","tianjing",time()+300);?>setCookie();4.2:删除cookie信息1:指定删除某个key<===>Value//指定删除某个键值对key<==>value//如果要删除某个key,只需要把时间time()-秒数//秒数大小不限,只要小于当前时间setCookie("key","",time()-200);2:删除所有的key<===>Value//如何删除所有的cookieforeach($_COOKIE as $key => $val){setCookie($key,"",time()-200);}如果你删除的cookie的key<==>value键值对,没有删除完,则这个cookie文件在客户端的保留,如果你把这个网站的所有的cookie都删除,则浏览器会把cookie整个文件删除.//如果用户是第一次访问该页面,则提示,你是第一次访问该页面,如果不是则显示上一次登入时间.//有可能,你在使用显示上一次登陆时间的方法的时候,会提示一个时区的错误,为什么?这需要我们设置时区。
韩顺平Spring笔记说课材料
◆spring的快速入门案例①spring是什么?struts 是web 框架(jsp/action/actionfrom)hibernate 是orm框架,处于持久层.spring 是容器框架,用于配置bean,并维护bean之间关系的框架☞spring中有一个非常概念: bean (是java中的任何一种对象javabean/service/action/数据源./dao, ioc(控制反转inverse of control) di( dependency injection 依赖注入)☞画一个框架图◆快速入门开发一个spring项目.1.引入spring的开发包(最小配置spring.jar 该包把常用的jar都包括, 还要写日志包common-logging.jar2.创建spring的一个核心文件applicationContext.xml, [hibernate有核心hibernate.cfg.xmlstruts核心文件struts-config.xml], 该文件一般放在src目录下,该文件中引入xsd文件:可以从给出的案例中拷贝一份.3.配置bean<!-- 在容器文件中配置bean(service/dao/domain/action/数据源) --><!-- bean元素的作用是,当我们的spring框架加载时候,spring就会自动的创建一个bean 对象,并放入内存UserService userSerivce=new UserService();userSerivce.setName("韩顺平");--><bean id="userService" class="erService"><!-- 这里就体现出注入的概念. --><property name="name"><value>韩顺平</value></property></bean>4.在Test.java中,我们怎么使用//我们现在使用spring来完成上面的任务//1.得到spring 的applicationContext对象(容器对象)ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");UserService us=(UserService) ac.getBean("userService");us.sayHello();5.细节讨论?传统的方法和使用spring的方法5.1使用spring ,没有new 对象,我们把创建对象的任务交给spring框架5.2spring的运行原理图:5.3我们再看spring对上面案例总结:spring实际上是一个容器框架,可以配置各种bean(action/service/domain/dao),并且可以维护bean与bean的关系,当我们需要使用某个bean的时候,我们可以getBean(id),使用即可.ioc是什么?答:ioc(inverse of controll ) 控制反转: 所谓控制反转就是把创建对象(bean),和维护对象(bean)的关系的权利从程序中转移到spring的容器(applicationContext.xml),而程序本身不再维护.DI是什么?答: di(dependency injection) 依赖注入: 实际上di和ioc是同一个概念,spring设计者认为di 更准确表示spring核心技术☞学习框架,最重要的就是学习各个配置.把Applicationcontext做成一个单例的.上机练习: 把我写的代码走一遍.spring开发提倡接口编程,配合di技术可以层与层的解耦举例说明:现在我们体验一下spring的di配合接口编程的,完成一个字母大小写转换的案例:思路:1.创建一个接口ChangeLetter2.两个类实现接口3.把对象配置到spring容器中4.使用通过上面的案例,我们可以初步体会到di配合接口编程,的确可以减少层(web层) 和业务层的耦合度.思考题:接口ValidateUser有一个方法:check(??)有两个类CheckUser1 implements ValidateUser{check// 安装xml验证}CheckUser2 implements VallidateUser{check()// 到数据库去验证}◆从ApplicationContex 应用上下文容器中获取bean和从bean工厂容器中获取bean具体案例://从ApplicationContext中取beanApplicationContext ac=newClassPathXmlApplicationContext("com/hsp/ioc/beans.xml");//当我们去实例化beans.xml,该文件中配置的bean被实例(该bean scope是singleton)从bean中取出student//如果我们使用beanfactory去获取bean,当你只是实例化该容器,那么//容器的bean不被实例化,只有当你去使用getBean某个bean时,才会实时的创建.BeanFactory factory = new XmlBeanFactory(new ClassPathResource("com/hsp/ioc/beans.xml"));factory.getBean("student");结论:1.如果使用ApplicationContext ,则配置的bean如果是singlton不管你用不用,都被实例化.(好处就是可以预先加载,缺点就是耗内存)2.如果是BeanFactory ,则当你获取beanfacotry时候,配置的bean不会被马上实例化,当你使用的时候,才被实例(好处节约内存,缺点就是速度)3.规定: 一般没有特殊要求,应当使用ApplicatioContext完成(90%)◆bean 的scope的细节入门案例://获取两个studentStudent s1=(Student) ac.getBean("student");Student s2=(Student) ac.getBean("student");System.out.println(s1+" "+s2);●request●session●global-session是在web开发中才有意义.◆三种获取ApplicationContext 对象引用的方法1.ClassPathXmlApplicationContext -> 通过类路径2.FileSystemXmlApplicationContext -> 通过文件路径举例:ApplicationContext ac=new FileSystemXmlApplicationContext("文件路径beans.xml / applicationContext.xml");3.XmlWebApplicationContext◆bean的生命周期为什么总是一个生命周期当做一个重点?Servlet -> servlet生命周期init() destory()java对象生命周期.往往笔试,面试总喜欢问生命周期的问题①实例化(当我们的程序加载beans.xml文件),把我们的bean(前提是scope=singleton)实例化到内存②调用set方法设置属性③如果你实现了bean名字关注接口(BeanNameAware) 则,可以通过setBeanName获取id号④如果你实现了bean工厂关注接口,(BeanFactoryAware),则可以获取BeanFactory⑤如果你实现了ApplicationContextAware接口,则调用方法//该方法传递ApplicationContextpublic void setApplicationContext(ApplicationContext arg0)throws BeansException {// TODO Auto-generated method stubSystem.out.println("setApplicationContext"+arg0);}⑥如果bean 和一个后置处理器关联,则会自动去调用ObjectpostProcessBeforeInitialization方法⑦如果你实现InitializingBean 接口,则会调用afterPropertiesSet⑧如果自己在<bean init-method=”init” /> 则可以在bean定义自己的初始化方法.⑨如果bean 和一个后置处理器关联,则会自动去调用Object postProcessAfterInitialization方法⑩使用我们的bean11. 容器关闭12. 可以通过实现DisposableBean 接口来调用方法destory13. 可以在<bean destory-method=”fun1”/> 调用定制的销毁方法小结: 我们实际开发中往往,没有用的这么的过程,常见的是:1->2->6->10->9->11上机练习: 把使用每个 bean的时间记录到一个recoder.txt文件,内容是xxbean. 使用时间是: 1999-11-11 11:11:11问题:通过BeanFactory来获取bean对象,bean的生命周期是否和Applicationcontext 是一样吗?不是一样的,bean是工厂中创建的生命周期会简单一些:配置bean的细节①scope 的说明:☞尽量使用scope=”singleton” ,不要使用prototype,因为这样对我们的性能影响较大.②如何给集合类型注入值.java中主要的集合有几种: map set list / 数组Department类:package com.hsp.collection;import java.util.List;import java.util.Map;import java.util.Set;public class Department {private String name;private String [] empName;private List<Employee> empList;private Set<Employee> empsets;private Map<String,Employee> empMaps;public Set<Employee> getEmpsets() {return empsets;}public void setEmpsets(Set<Employee> empsets) {this.empsets = empsets;}public String[] getEmpName() {return empName;}public void setEmpName(String[] empName) {this.empName = empName;}public String getName() {return name;}public void setName(String name) { = name;}public List<Employee> getEmpList() {return empList;}public void setEmpList(List<Employee> empList) {this.empList = empList;}public Map<String, Employee> getEmpMaps() {return empMaps;}public void setEmpMaps(Map<String, Employee> empMaps) { this.empMaps = empMaps;}}//Employeel类package com.hsp.collection;public class Employee {private String name;private int id;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) { = name;}}beans.xml配置文件:<?xml version="1.0" encoding="utf-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:tx="/schema/tx"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-2.5.xsd/schema/context/schema/context/spring-context-2.5.xsd/schema/tx/schema/tx/spring-tx-2.5.xsd"><bean id="department" class="com.hsp.collection.Department"><property name="name" value="财务部"/><!-- 给数组注入值--><property name="empName"><list><value>小明</value><value>小明小明</value><value>小明小明小明小明</value></list></property><!-- 给list注入值list 中可以有相当的对象--><property name="empList"><list><ref bean="emp2" /><ref bean="emp1"/><ref bean="emp1"/><ref bean="emp1"/><ref bean="emp1"/><ref bean="emp1"/><ref bean="emp1"/></list></property><!-- 给set注入值set不能有相同的对象--><property name="empsets"><set><ref bean="emp1" /><ref bean="emp2"/><ref bean="emp2"/><ref bean="emp2"/><ref bean="emp2"/></set></property><!-- 给map注入值map只有key不一样,就可以装配value --> <property name="empMaps"><map><entry key="11" value-ref="emp1" /><entry key="22" value-ref="emp2"/><entry key="33" value-ref="emp1"/></map></property><!-- 给属性集合配置-->【点http协议referer】<property name="pp"><props><prop key="pp1">abcd</prop><prop key="pp2">hello</prop></props></property></bean><bean id="emp1" class="com.hsp.collection.Employee"><property name="name" value="北京"/><property name="id" value="1"/></bean><bean id="emp2" class="com.hsp.collection.Employee"><property name="name" value="天津"/><property name="id" value="2"/></bean></beans>③内部bean<bean id=”foo” class=”....Foo”><property name=”属性”><!—第一方法引用--><ref bean=’bean对象名’/><!—内部bean--><bean><properyt></property></bean></property></bean>④继承配置public class Studentpublic class Gradate extends Student在beans.xml文件中体现配置<!-- 配置一个学生对象--><bean id="student" class="com.hsp.inherit.Student"><property name="name" value="顺平" /><property name="age" value="30"/></bean><!-- 配置Grdate对象--><bean id="grdate" parent="student" class="com.hsp.inherit.Gradate"><!-- 如果自己配置属性name,age,则会替换从父对象继承的数据--><property name="name" value="小明"/><property name="degree" value="学士"/></bean>思考: 目前我们都是通过set方式给bean注入值,spring还提供其它的方式注入值,比如通过构造函数注入值!◆通过构造函数注入值beans.xml 关键代码:<!-- 配置一个雇员对象--><bean id="employee" class="com.hsp.constructor.Employee"><!-- 通过构造函数来注入属性值--><constructor-arg index="0" type="ng.String" value="大明" /></bean>◆自动装配bean的属性值(1)byName的用法:<!-- 配置一个master对象--><bean id="master" class="com.hsp.autowire.Master" autowire="byName"><property name="name"><value>顺平</value></property></bean><!-- 配置dog对象--><bean id="dog" class="com.hsp.autowire.Dog"><property name="name" value="小黄"/><property name="age" value="3"/></bean>原理图:(2)byType: byType:寻找和属性类型相同的bean,找不到,装不上,找到多个抛异常。
韩顺平servlet笔记(必看完整版)
背景知识介绍J2EE的13种技术java->servlet->jsp [技术总是有一个演变过程]zip粘贴到word设置回顾一下我们现有的技术java 基础(面向对象,集合,界面,线程,文件,网络)jdbc (java 的数据库编程)oracle / mysql / sqlserverhtml css javascript (web 开发) ->网页设计xmlserlvet+jsp ->java web开发[使用java技术做 web开发]java ee 体系的介绍servlet项目演示web 开发介绍①静态页面 (html)②动态页面1.用户可以输入数据,和页面交互(注册,购物,发帖子,付款...)2.不同时间打开页面,内容是变化.3.目前比较流行的左动态页面的技术 ( servlet/jsp , php , , asp, cgi )动态网页技术的比较(了解)bs 和 cs的比较(1)BS:browser server 浏览器服务器(2)cs client server 客户服务为什么需要的web服务器/web究竟是干什么的模拟一个web服务器import .*;import .*;public class MyWebServer{public static void main(String []args) throws Exception{ServerSocket ss=new ServerSocket(80);Socket s=();.");OutputStream os=();BufferedReader br=new BufferedReader(new FileReader("d:\\"));String buf="";while((buf=())!=null){());}到conf/ 文件中修改<Connector connectionTimeout="20000" port="8088"(去修给config->的端口号)protocol="" redirectPort="8443"/>(3) 能够正常启动,但是会导航到另外一个页面.去修改工具->管理加载项,把默认的导航给禁用即可.(4) 在访问 tomcat时候,一定保证 tomcat 服务器是启动tomcat的目录结构文件bin: 启动和关闭tomcat的bat文件conf: 配置文件--> : 该文件用于配置和 server 相关的信息, 比如 tomcat启动端口后,配置Host, 配置Context 即web应用--> : 该文件配置与 web应用(web应用就相当于是一个 web站点)-->: 该文件用户配置tomcat 的用户密码和权限lib目录: 该目录放置运行tomcat 运行需要的jar包logs目录:存放日志, 当我们需要去查看日志的时候,很有用!,当我们启动tomcat错误时候,可以查询信息.webapps目录: 该目录下,放置我们的web应用(web 站点), 比如:建立 web1 目录下面放置我们的html 文件 jsp 文件..图片... 则 web1就被当做一个web应用管理起来(☞特别说明tomcat 以后支持 tomcat 5 版本还有别的设置)work: 工作目录: 该目录用于存放jsp被访问后生成的对应的 server文件和.class文件如何去访问一个 web 应用的某个文件首页面设置及目录规范结构现在我们要求:把文件设置成该 web应用的首页,则需要把web应用的目录格式做的更加规范:①在web文件夹下配置WEB-INF文件夹②在文件中添加配置的代码:<welcome-file-list><welcome-file></welcome-file></welcome-file-list>③通过 classes目录将来是存放 class文件lib 目录将来时存放 jar文件配置当前这个web应用的信息.tomcat如何去管理虚拟目录需求: 当我们把 web 应用放到 webapps目录,tomcat会自动管理,如果我们希望tomcat 可以管理其它目录下的web应用->虚拟目录配置我在d 盘有一个web应用.虚拟目录配置步骤:①找到文件②编辑host节点添加Context path在中添加:<Context path="/myweb2" docBase="d:\web2"/>myweb2:是访问时输入的web名,实际取出的是web2中的资源"d:\web2":绝对路径下web2中存放资源如:实际访问时输入的地址:需要重启tomcat,才能生效.(因为是采用的dom技术讲信息加载到内存中)context 的几个属性的说明path:docbase:reloadable ;如果设为ture ,表示 tomcat 会自动更新 web应用,这个开销大,建议在开发过程中,可以设为true, 但是一旦真的发布了,则应当设为false;upackWAR: 如果设为 ture ,则自动解压,否则不自动解压.①:打war包 cd:d/web2 然后jar –cvf *②:浏览打好的war包 Deploy发布后会在webapps中自动生存改文件配置域名我们看和一个如何配置自己的主机名:我们在实际访问网站的过程中,不可能使用应用/资源名的方式去访问网站,实际上使用类似或者的方式去访问网站,这个又是怎么实现的呢看看ie浏览器访问一个web站点的流程.实现的步骤如下:(1) 在C:\WINDOWS\system32\drivers\etc 下的host文件添加在tomcat 的文件添加主机名<Host name="" appBase="d:\web3”><Context path="/" docBase="d:\web3" /></Host>(3) 在d:\web3 加入了一个 /WEB-INF/ 把设为首页面如果连端口都不希望带,则可以吧tomcat的启动端口设为80即可.(4) 重启生效tomcat体系的再说明图:如何配置默认主机:在tomcat/conf/ 文件<Engine name="Catalina" defaultHost="主机名">为什么需要servlet技术比如需求:我们希望用户可以贴,用户还可以回复 ....这样一些和用户可以交互的功能,用普通的java技术就完成不了, sun 就开发了 servlet技术供程序员使用.servlet的介绍①servlet 其实就是java程序(java类)②该 java 程序(java 类)要遵循servlet开发规范③serlvet是运行在服务端④serlvet 功能强大,几乎可以完成网站的所有功能⑤是学习jsp基础tomcat 和 servlet 在网络中的位置servlet的生命周期是怎样的/servlet究竟是怎样工作的UML 时序图帮助大家理解参看execel面试题: 请简述servlet的生命周期(工作流程)答:标准版本:①WEB服务器首先会检查是否已经装载并创建了该servlet实例对象。
韩顺平 hibernate第2讲
hibernate 从入门到精通
主讲: 韩顺平
■
Criteria接口
Criteria接口也可用于面向对象方式的查询,关于它的具体用法我们 这里先不做介绍,简单看几个案例. 最简单案例:返回50条记录 Criteria crit = sess.createCriteria(Cat.class); crit.setMaxResults(50); List cats = crit.list(); 限制结果集内容 List cats = sess.createCriteria(Cat.class) .add( Restrictions.like("name", "Fritz%") ) .add( Restrictions.between("weight", minWeight, maxWeight) ) .list();
hibernate 从入门到精通
主讲: 韩顺平
hibernate 从入门到精通
主讲: 韩顺平
■ConfiguraFra bibliotekon类①负责管理hibernate的配置信息 ②读取hibernate.cfg.xml ③加载hibernate.cfg.xml配置文件中 配置的驱动,url,用户名,密码,连接池. ④管理 *.hbm.xml对象关系文件.
hibernate 从入门到精通
主讲: 韩顺平
■
对象关系映射文件(*.hbm.xml) ①该文件主要作用是建立表和类的映射关系,是不可或缺的重要文件. ②一般放在其映射的类同一个目录下,但不是必须的。 ③命名方式一般是 类名.hbm.xml,但不是必须的。 ④示意图:
*.hbm.xml 表
某个类
hibernate 从入门到精通
韩顺平linux教学视频学习笔记(四)
Ls
7)数据库的恢复
Mysql -u root -p
Show database;
Use spdb1;
Show tables;
Drop table users;【表删除了】
Mysql -u root -p密码spdb1 < /home/myspdb1
Mysql -u root -p
Showdatabases;
Swap使用:把磁盘部分空间虚拟成内存使用
5、设置系统时间
6、查看月历
Cal4 2009
把年历写入test文档中Cal 2012 > test
7、显示网络统计信息(netstat)
Netstat -an | more按一定顺序(端口号)排序
Netstat -anp | more同时显示进程号
8、追踪路由traceroute
5)如何进入mysql。
Cd bin/(进入bin目录,使用mysql)
ls
./mysql -u root -p(注:“./”代表当前目录文件)
输入密码(原始为空)后便可使用数据库了。
6)使用并退出mysql。
注:要修改mysql登陆路径的话,可以修改root下路径配置
1 首先查看env |more,此时路径是在bin下
Tar -zxvf文件名.tar.gz
(改文件名或文件夹名)
3)相关改动
启动mysql:bin/mysqld_safe --user=mysql &
解释:一个“.”表示当前目录,两个表示“.”上一级目录
“-R”该文件文件夹下的文件所有者都改变
【注:删除自带mysql】
4)启动后,可查看mysql监听端口号为3306
韩顺平jsp笔记(个人总结版)
第一、二、三课
jsp入门
jsp原理
jsp声明<%! %> 在这里面声明的变量是全局变量<% %>在这里面声明的变量是局部变量
注释:
<%-- -- % > <%// % > <%/* */ % > 表达式:
<%= %>
九大内置对象
jsp 语法
1.指令元素(编译指令)
①page指令
pl:<%@page language="java"import="java.util.*"pageEncoding="utf-8" contentType="text/html; charset=utf-8"%>
常用的属相有import,contentType,errorPage,isErrorPage
②include 指令
<%@include file="路径"%>
Ps:路径是相对路径。
由于该方法引来的页面会和当前页编写成一个serlet文件,所以被引页和当前页的页面编码得相同。
③taglib指令
(略)
2.脚本元素
<%=java表达式%>
<% java代码//int i = 10 局部变量%>
<%! int j = 20 // 全局变量%>
3.动作元素(运行指令)
ps:<jsp:include page=”” /> 上面的错了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
☞ Person映射文件不变化:
hibernate从入门到精通
主讲 韩顺平
关系映射--关联映射
多对多(student - course) 在操作和性能方面都不太理想,所以多对多的映射使用较少,实际使 用中最好转换成一对多的对象模型;Hibernate会为我们创建中间 关联表,转换成两个一对多。 <set name=―xxx" table=―xxx"> <key column=―xxx"/> <many-to-many class=―xxx" column=―xxx"/> </set>
hibernate从入门到精通
主讲 韩顺平
关系映射--关联映射
多对一(Employee - Department) Employee映射文件 <many-to-one name=‖depart‖ column=‖depart_id‖/>
class Department{ private Integer id; private String name; } class Employee{ private Integer id; private String name; private Department dept; }
级联操作
cascade (Employee – Department) bbs() Casade用来说明当对主对象进行某种操作时是否对其关联的从对象 也作类似的操作,常用的cascade: none,all,save-update ,delete, lock,refresh,evict,replicate,persist, merge,delete-orphan(one-to-many) 。一般对many-to-one,many-tomany不设置级联,在<one-to-one>和<one-to-many>中设置级联。
hibernate从入门到精通
主讲 韩顺平
关系映射--关联映射
多对多(student - course) 在操作和性能方面都不太理想,所以多对多的映射使用较少,实际使 用中最好转换成一对多的对象模型;Hibernate会为我们创建中间 关联表,转换成两个一对多。
public class Student { private Set<Stucourse> stucourses; }
private String name; private IdCard idCard } class IdCard{ private Integer id; private java.util.Date useful_life; private Person person }
hibernate从入门到精通
① 在集合属性和普通属性中都能使用cascade ② 一般讲cascade配置在one-to-many(one的一方,比如 Employee-Department),和one-to-one(主对象一方)
案例: 在前面的 employee—department 的many2one 案例上完成演 示,实际应用bbs ,删除主贴 回帖级联删除 。
hibernate从入门到精通
主讲 韩顺平
主讲:韩顺平 email:hanshunping@
hibernate从入门到精通
主讲 韩顺平
hibernte 第4讲
Hibernate关系映射
hibernate从入门到精通
主讲 韩顺平
关系映射
多对一(Employee - Department) 一对多(Department-Employee) 一对一(Person - IdCard) 多对多(teacher - student) cascade(Employee – Department)
☞ 引出懒加载问题 ,解决: 1. Hibernate.initialize(代理对象); 2. 在department映射文件中加入 lazy=“false” 3. openinsessionview解决(过滤器)
hibernate从入门到精通
主讲 韩顺平
关系映射--关联映射
一对多(Department-Employee) Department映射文件添加 <set name=‖集合对象属性名”> <key column=‖外键名”/> <one-to-many class=‖集合放入的类名”/> </set>
主讲 韩顺平
关系映射--关联映射
一对一(Person - IdCard)
2)基于外健的one-to-one,可以描述为多对一,加unique=―true‖约束,
IdCard的映射文件 中:
<many-to-one name=‖person‖ column=‖person_id‖ unique=‖true‖ not-null=‖true‖/> <!-唯一的多对一,其实就便成了一对一了就会在Idcard表生成外键-->
hibernate从入门到精通
主讲 韩顺平
struts+hibernate项目(接口编程)
部门留言板
<id name=‖id‖> <generator class=‖foreign‖><param name=‖property‖>person</param></generator> <id> <one-to-one name=‖ person‖ constrained=‖true‖/> [没有constraned true将不会生成外键约束] class Person{ Person映射文件: <one-to-one name=―idCard‖ /> private Integer id;
public class Stucourse { private Course course; private Student student; }
public class Course { private Set<Stucourse> stucourses; }
hibernate从入门到精通
主讲 韩顺平
class Department{ private Integer id; private String name; private Set<Employee> emps }
hibernate从入门到精通
主讲 韩顺平ຫໍສະໝຸດ 关系映射--关联映射一对一(Person - IdCard) 1)基于主键的one-to-one(IdCard的映射文件)