SSH框架笔记文档格式.docx

上传人:b****2 文档编号:4555173 上传时间:2023-05-03 格式:DOCX 页数:31 大小:33.29KB
下载 相关 举报
SSH框架笔记文档格式.docx_第1页
第1页 / 共31页
SSH框架笔记文档格式.docx_第2页
第2页 / 共31页
SSH框架笔记文档格式.docx_第3页
第3页 / 共31页
SSH框架笔记文档格式.docx_第4页
第4页 / 共31页
SSH框架笔记文档格式.docx_第5页
第5页 / 共31页
SSH框架笔记文档格式.docx_第6页
第6页 / 共31页
SSH框架笔记文档格式.docx_第7页
第7页 / 共31页
SSH框架笔记文档格式.docx_第8页
第8页 / 共31页
SSH框架笔记文档格式.docx_第9页
第9页 / 共31页
SSH框架笔记文档格式.docx_第10页
第10页 / 共31页
SSH框架笔记文档格式.docx_第11页
第11页 / 共31页
SSH框架笔记文档格式.docx_第12页
第12页 / 共31页
SSH框架笔记文档格式.docx_第13页
第13页 / 共31页
SSH框架笔记文档格式.docx_第14页
第14页 / 共31页
SSH框架笔记文档格式.docx_第15页
第15页 / 共31页
SSH框架笔记文档格式.docx_第16页
第16页 / 共31页
SSH框架笔记文档格式.docx_第17页
第17页 / 共31页
SSH框架笔记文档格式.docx_第18页
第18页 / 共31页
SSH框架笔记文档格式.docx_第19页
第19页 / 共31页
SSH框架笔记文档格式.docx_第20页
第20页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

SSH框架笔记文档格式.docx

《SSH框架笔记文档格式.docx》由会员分享,可在线阅读,更多相关《SSH框架笔记文档格式.docx(31页珍藏版)》请在冰点文库上搜索。

SSH框架笔记文档格式.docx

xwork-core-2.2.1.1.jar--Struts2核心包,是WebWork内核

struts2-core-2.2.1.1.jar--Struts2核心包,是Struts框架的“外衣

ognl-3.0.jar--用来支持ognl表达式的,类似于EL表达式,功能比EL表达式强

大的多

2)添加配置文件

a)修改web.xml

在web.xml中配置struts2的中央控制器(过滤器)

3)配置struts.xml文件

A.<

package>

作用是为<

action>

分组,<

struts>

标签下可有多个<

下列是对<

下属性的介绍:

1)name="

helloworld"

唯一的标识,表示包名为helloworld

2)extends="

struts-default"

继承的包名,一般继承Struts2默认提供的struts-default包,该包中定义了很多Struts2应用必须的组件(比如:

拦截器);

该package声明的位置在struts2-core-2.1.8.jar/struts-default.xml文件中

3)namespace用来设置该包中的action的地址的命名空间。

namespace="

/"

表示根命名空间,Action的访问路径如下即可:

http:

//localhost:

8080/struts01/webaction.action

如果namespace="

/day01"

之后,Action访问路径为:

8080/struts01_1/day01/welcome.action

B.<

作用是指明每个请求对应的Action类之间的对应关系,<

下可有多个<

下面是<

标签的属性介绍:

welcome"

表示请求的名字为welcome(即welcome.action)

2)class="

com.tarena.action.WelcomeAction"

指定了对应的Action类。

3)method="

xxx"

用于指定在对应的类中要执行的方法名,该方法的返回值必须是String类型(规定)

publicStringxxx(){......}

<

标记可以增加method="

"

属性,用来指定执行哪个方法,如果没有这个属性,默认执行execute()方法。

C.<

result>

success"

该result的名称,Action返回哪一个result的name值,意味着要转发到哪一个result所对应的JSP地址。

OGNL

它是一种功能强大的表达式语言,解析OGNL表达式

基本语法:

OGNL引擎访问对象的格式:

Ognl.getValue(“OGNL表达式”,root对象);

FC(前端控制器)站在最前面,接收所有请求

Action根据输入算输出

Result把输出用适当的格式显示

Interceptor(拦截器)在Action调用之前或之后做点事情

ValueStack各个组件共享数据的容器

Tags特有的页面标签

Action和Result原理返回Struts目录

Result—StreamResult:

功能:

用于输出二进制数据信息

需要注入的参数:

inputName--是个字符串(OGNL表达式),通过该表达式可以在vs中获取一个输入流对象,streamResult就是从这个输入流中读取要四输出的数据

!

--分页-->

<

divid="

pages"

>

s:

iftest="

%{page==1}"

已经是第一页<

/s:

if>

<

c:

choose>

<

whentest="

${page>

1}"

ahref="

costListfs.action?

page=1"

第一页<

/a>

<

page=${page-1}"

上一页<

/c:

when>

otherwise>

上一页

forEachvar="

p"

begin="

1"

end="

${page+1}"

${p<

page-1||p>

totalPages}"

${page==p}"

<

page=${p}"

class="

current_page"

${p}<

forEach>

${page<

page=${page+1}"

下一页<

page=${totalPages}"

最后一页<

%{page==totalPages}"

这是最后一页<

共<

propertyvalue="

totalRows"

/>

条记录

totalPages"

当前第<

page"

/div>

拦截器返回Struts目录

1.什么是拦截器组件,拦截器组件的作用

2.拦截器组件原理

3.拦截器组件的使用

1)自定拦截器组件

2)使用struts2框架的拦截器组件

Hibernate返回主目录

Hibernate

第一课

知识点:

hibernate基本原理

为什么使用hibernate?

ahibernate属于M,跟jdbc干同样的事,都是对

数据库的操作

bhibernate是对jdbc的封装,底层依然是jdbc

chibernate是ORM框架,O--->

Object(实体类对象)

R--->

Relational(表)M--->

Mapping(映射)

hibernate就是用面向对象的方式,来操作数据库

简化程序员的开发

dhibernate也叫持久层框架

e市场上能占到40%左右

fhibernate因为底层封装jdbc,性能稍弱

简要介绍一下hibernate3.2文件

doc:

hibernate3.2的说明文档,包含hibernate的

Api(全英文版)

eg:

hibernate官方提供的案例,包含

User.hbm.xml(映射文件:

实体类跟数据库表关联

桥梁)

etc:

hibernate中所有的配置,其中最重要

hibernate.cfg.xml(hibernate核心配置文件,hibernate

运行必要的文件),包括一些缓存文件ehcache.xml

)lib:

跟hibernate有关所有的第3方jar

)src:

hibernate所有的源代码,开源框架

)hibernate3.jar:

hibernate核心jar

归纳hibernate特点:

简单(对于程序员)

开源

orm框架,持久层(M)框架

可以兼容现在所有主流的数据库

完全面向对象

性能不好

3使用hibernate的步骤

导入jar:

hibernate_lib

导入核心配置文件:

hibernate.cfg.xml,连接到数据库

创建Po类以及修改orm映射文件

把orm映射文件,加载到hibernate.cfg.xml中

使用hibernate的Api操作

案例:

使用hibernate来创建一张表

t_user

主键

idnameagepwd

User.hbm.xml(ORM映射文件)

classUser{

privateintid;

privateStringname;

privateintage;

privateStringpwd;

//get、set

}

po类的属性,必须跟要创建的表的列一致

4hibernate核心

hibernate.cfg.xml:

a连接数据库:

Driver,url,用户名,密码

dialect(方言):

通过配置方言可以帮我们操作

任何数据库,底层对数据库的操作的sql语句,

会自动转化对应数据库的sql

bhibernate自身的属性:

show_sql:

把hibernate底层执行jdbc的sql语句,

打印控制台上,使用hibernate必须配置该属性

c配置ORM映射文件:

hibernate执行的时候,会

读取hibernate.cfg.xml文件,只有把orm映射文件

配置到hibernate.cfg.xml,才能加载到hibernate当中

ORM映射文件(注意看提示):

po类跟数据库中表,之间映射的桥梁

classname="

com.tarena.po.User"

table="

t_user"

idname="

id"

//hibernate当中默认主键最重要

//generator:

主键生成策略

identity:

每次添加新的数据,主键自动加1

generatorclass="

identity"

/generator>

/id>

--配置一般属性信息-->

propertyname="

name"

/property>

age"

pwd"

Configuration

读取配置文件

hibernate.cfg.xml(核心配置文件)

xxx.hbm.xml(映射文件)

hibernate程序只要一启动,立刻就会调用

Configuration读取文件

SessionFactory

重量级对象(资源):

大量侵占内存资源,功能强大

创建Session(SessionFactory是产生

Session的工厂)

b)管理hibernate二级缓存(以后讲)

c)一个项目对应/一个数据库中对应一个

SessionFactory,生命周期很长,跟整个

系统生命周期一致

5)Session:

Hibernate当中最核心的(功能)类,hibernate对

数据库中都依赖Session来实现的

Session:

可以实现增删查改

session的生命周期较短,代表一个用户对

数据库访问的一个连接

c)每次对数据库的操作都要使用session,(最好

能把session跟当前访问用户绑定在一起)

6)Transaction:

hibernate中管理事务:

Hibernate的事务是手动提交的,必须要开启事务,并提交才可以改变表中的数据

jdbc自动的提交事务

4使用hibernate来实现增删查改

load跟get

load去数据库查询一个不存在的数据,会

直接抛出一个异常(ObjectNotFoundException)

get去数据库查询一个不存在的数据,会返回

一个null值

b)load方法支持延迟加载,当访问该对象的

属性,才发出sql对数据库查询

get方法不支持延迟加载,使用get方法立刻

发出sql语句,去数据库中查询

延迟加载:

需要才发出sql,去数据库中查询

hibernate底层怎么实现延迟加载的/load返回对象

是什么类型的?

Empemp=(Emp)session.load(Emp.class,1);

load返回的对象,不是emp对象,没有去数据库中

真实查询,所以没有发出sql语句

b)load返回的是一个代理对象(代替要查询的对象

叫做代理对象),该代理对象来暂时代替emp对象

c)该代理对象是目标对象的子类对象

(该子类对象是hibernate内部自动生成,跟我们无关)

classStudentextendsPerson{}

Personperson=newStudent();

d)这是代理模式:

cglib动态代理,能提高hibernate

性能,减少对数据库的访问次数

hibernate_day01Pm

创建一张员工表

t_emp

idnameagebirthdaysalary

实现增删查改,全部使用hibernate

第二课

1.Hibernate映射类型

在hbm.xml中定义字段和属性映射时,type属性用于指定映射类型。

映射类型可以使用Java类型或者Hibernate类型。

映射类型作用是:

实现字段值和属性值相互转化。

1)Java类型(完整包名.类名)

java.lang.Integer,java.lang.String等

2)Hibernate类型(推荐)

*a.字符串string

*b.整数byte,short,integer,long

*c.浮点数float,double

*d.时间日期date,time,timestamp

*e.布尔类型

yes_no:

实现boolean属性和Y|N值的相互转化

true_false:

实现boolean属性和T|F值的相互转化

f.其它例如blob,clob,big_decimal,

big_integer

2.Hibernate主键生成方式

Hibernate在添加操作时,可以自动生成主键值,具体方式预定义了以下几种:

*1)sequence

采用序列方法生成主键值,仅适用Oracle

使用格式如下:

<

sequence"

paramname="

序列名

/param>

<

*2)identity

采用数据库自动增长机制生成主键值。

适用于MySQL,SQLServer数据库。

需要建表时将主键字段设置成自动增长。

*3)native

根据dialect参数自动切换成identity或sequence方式。

4)assigned

hibernate不负责生成id,需要开发者在程序中指定id值。

5)uuid

采用uuid算法生成一个id值,值类型是字符串类型

6)hillo

采用高低位算法生成一个id值,类型是数值

7)increment

先执行selectmax(id)语句获取当前ID最大值,然后加1执行insert操作。

适用于各种数据库

提示:

如果上述生成方式都不能满足需要,可以自定义主键生成器。

(参考MyGeneratorId.java)

===========================

3.Hibernate框架基本特性

1)一级缓存(Session级别)

一级缓存默认开启。

当查询某一个对象时,第一次会查询数据库,取回的对象会默认放入一级缓存,如果再使用当前session查询该对象时,会直接从缓存取出,减少了对数据库的查询。

当Session对象创建后,每个Session都有一个独立的一级缓存区,每个Session只能使用自己的缓存区,不能交叉访问。

在程序中可以利用以下方法清除缓存中的对象,释放空间。

session.evict(obj);

//清除指定的obj对象

session.clear();

//清除所有缓存对象

session.close();

//释放session及其缓存

2)对象持久性

在使用hibernate过程中,实体对象可以具有以下三种状态:

a.临时状态

使用new构造出来的。

*b.持久状态

与session对象关联,受session管理的对象。

例如调用了load,get,save等方法后

持久状态的对象有以下特点:

--持久对象的数据状态可以与数据库同步更新。

--垃圾回收器不能回收持久对象

--持久对象存在于一级缓存中,受Session管理,由Session负责持久化操作的。

--持久对象同步更新是在session.flush时刻执行。

mit()方法在内部先调用flush方法,然后再执行事务提交动作

c.游离状态

原来是持久状态,当调用evict,clear,close后会变成游离状态

================================

Sessionsession=HibernateUtil.getSession();

Transactiontx=session.beginTransaction();

for(inti=1;

i<

=10000;

i++){

Foofoo=newFoo();

//setter

session.save(foo);

if(i%50==0){

session.flush();

//同步

//释放缓存

}

mit;

HibernateUtil.closeSession(session);

==============================

3)延迟加载

a.什么是延迟加载

当使用延迟加载方法时,返回的实体对象并没有数据库数据,而是在使用对象的getter方法获取属性值时才去发送SQL操作,去数据库查询。

*b.什么操作采用加载机制

session.load()

query.iterator()

采用关联映射后,获取关联属性的getter

*c.避免出现以下异常

org.hibernate.LazyInitializationException:

couldnotinitializeproxy-noSession

原因是采用了延迟加载机制的操作,但是在加载数据前关闭了Session导致的。

d.延迟加载的好处

主要优点是降低用户操作的并发率。

e.延迟加载实现原理

hibernate框架采用动态代理技术实现了延迟加载机制。

动态代理技术指的是:

动态在内存中构建一个类型,动态的编译,然后载入类加载器使用。

Java中可以利用asm.jar,

cglib-2.1.3.jar.

asm可以动态生成一个类,动态编译。

cglib可以动态生成一个类的子类。

---------原理的过程如下---------

利用延迟加载方法返回的对象类型,是借助于cglib.jar工具动态生成的一个类型,该类型是原实体类的子类。

在动态生成的子类类型中,重写了属性的getter方法。

在重写的get方法中,会触发SQL查询操作。

publicclassFoo$$CGLIB23423

extendsFoo{

publicStringgetName(){

//检查是否已加载数据,

//没有的话,执行sql加载数据

//有的话,将name值返回

*f.session中load和get方法区别如下

--load具有延迟加载机制;

get没有,是立刻加载数据

--load返回一个动态生成类型的对象;

get方法返回的是实体类对象

--load查询如果没有符合条件的记录会抛出ObjectNotFoundException;

get没有结果返回的是null

--拦截器配置-->

<

interceptors>

interceptorname="

checkLogin"

class="

com.tarena.action.LoginInterceptorAction"

/interceptor>

openSessionInView"

class="

com.tarena.interceptor.OpenS

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2