就业资料一struts+spring+hibernate+ibatis+webservice+jquery.docx
《就业资料一struts+spring+hibernate+ibatis+webservice+jquery.docx》由会员分享,可在线阅读,更多相关《就业资料一struts+spring+hibernate+ibatis+webservice+jquery.docx(36页珍藏版)》请在冰豆网上搜索。
就业资料一struts+spring+hibernate+ibatis+webservice+jquery
Struts+Spring+Hibernate+Jquery+Webservice
目录
1.hibernate1
hibernater概述1
hibernate操作数据库基本步骤2
hibernate查询4
hibernate二级缓存:
6
2.struts27
struts2概述7
struts2执行的流程:
8
struts的配置文件解析:
8
struts的核心对象和拦截器9
Struts自定义标签10
3.spring:
12
di以及相关配置12
Aop13
数据库相关,事物管理14
4.jquery:
15
概述:
15
标签选择器15
常用的函数15
5.webservice:
17
工作原理17
用到的相关技术17
使用xfire实现webservice服务和客户端17
1.hibernate
hibernater概述
Hibernate是一个数据持久化的框架,封装了jdbc简化了对数据库相关的访问和操作,通过对象-关系映射(orm)可以使用面向对象的方式非常方便操作关系型数据库.hibernate提供了丰富的查询方式(hql,本地sql,craitail)和多种数据加载方式以及数据缓存机制提高程序的效率,减少系统的开销
a)hibernate原理
通过java的类和数据库表的映射配置,依赖java的反射机制,xml解析技术,jdbc完成对象与数据库之间数据的转换操作,以及对象的关系操作,运行机制是通过发出的数据库操作指令通过配置文件解析转换成相应的sql语句,完成操作
hibernate操作数据库基本步骤
1.读取并解析配置文件
Configurationconf=newConfiguration().configure();
2.读取并解析映射信息,创建SessionFactory
SessionFactorysf=conf.buildSessionFactory();
3.打开Session
Sessionsession=sf.openSession();
4.开始一个事务(增删改操作必须,查询操作可选)
Transactiontx=session.beginTransaction();
5.数据库操作
session.save(user);//或其它操作
6.提交事务(回滚事务)
mit();(tx.rollback();)
7.关闭session
session.close();
b)Hibernate关联关系映射
BookType.hbm.xml
t_id
Book.hbm.xml
t_id
一对多:
t_id
Cascade:
当设置了cascade属性不为none时,Hibernate会自动持久化所关联的对象
all
对所有操作进行级联操作
save-update
执行保存和更新操作时进行级联操作
delete
执行删除操作时进行级联操作
none
对所有操作不进行级联操作
Inverse:
Inverse(反转)属性指定了关联关系中的方向,inverse="false"的为主动方,由主动方负责维护关联关系,在一对多关联中,将one方的inverse设置为true,这将有助性能的改善
…
Lazy:
延迟加载,延迟加载时指在需要数据的时候才加载数据,延迟加载的级别有类级别,set级别和属性级别(hibernate3.0新增加),lazy=false为及时加载,true表示延迟加载
hibernate查询
1.通过id查询单个数据有load和get方式
Get方法直接查询数据库如果没有则放回null
Load方法先在session创建代理对象然后从缓存中查找数据,然后使用的时候从数据库中查询如果没有数据则返回nullPointException
2.查询:
是一种面向对象的查询语言,其中没有表和字段的概念,只有类、对hql象和属性的概念,hibernate中常用的查询方式
1.查询对象
Stringhql="fromBookasbwhereb.name='java";
Queryquery=session.createQuery(hql);
ListbookList=query.list();
2.查询对象某个属性
Stringhql="selectb.price,b.publishfromBookasbwhereb.name=”sql”;
Queryquery=session.createQuery(hql);
Listlist=query.list();
Iteratorit=list.iterator();
//取数据
3.绑定参数
Stringhql="fromBookasbwhereb.name=?
"
query.setString(0,"java");
Stringhql="fromBookasbwhereb.name=:
name"
query.setString(“name”,"java");
Stringhql="fromBookasbwhereb.name=:
nameandb.pricebetween:
minand:
max"
ClassProperties(){
PrivateStringname;
Privateintmin;
Privateintmax
}
query.setProperties(qp);
4.聚合函数
selectcount(house)fromBook
5.排序
fromBookborderbyb.price(asc升序、desc降序)
6.分组
selectcount(b.id)fromBookbgroupbyb.typeIdhavingsum(b.price)>1000
7.子查询
select*fromBookasb1whereb1.price>(selectavg(b2.price)fromBookb2whereb2.typeId='1')
8.连接查询
Fetch:
迫切连接方式
//这种查询方式查询得到的每行数据时二个对象Book和type对象
fromBookbinnerjoinfetchb.typet
//这种查询方式得到的每行数据时一个object类型的数组
fromBookbinnerjoinb.typet
9.分页
query.setFirstResult((pageIndex-1)*pageSize);
query.setMaxResults(pageSize);
3.Criteria查询:
又称为“对象查询”,它用面向对象的方式将构造查询的过程做了封装
1.查询对象
Criteriacriteria=session.createCriteria(Book.class);
Listresult=criteria.list();
2.条件查询
3.条件查询绑定参数:
Criteriacriteria=session.createCriteria(Book.class);
criteria.add(Restrictions.eq("name","java"));
Listresult=criteria.list();
方法
说明
Restrictions.eq()
对应SQL的等于(’=’)
Restrictions.allEq()
使用Map,使用key/value进行多个相等的值的比对
Restrictions.gt()
对应SQL的大于(‘>’)
Restrictions.ge()
对应SQL的大于等于(‘>=’)
Restrictions.lt()
对应SQL的小于(‘<’)
Restrictions.le()
对应SQL的小于等于(‘<=’)
Restrictions.between()
对应SQL的between子句
Restrictions.like()
对应SQL的like子句
Restrictions.in()
对应SQL的in子句
Restrictions.and()
对应SQL的and
Restrictions.or()
对应SQL的or
Restrictions.not()
对应SQL的not
4.使用对象模板查询
Bookbook=newBook();
book.setPrice(200);
book.setName(“java”);
Criteriacriteria=session.createCriteria(Book.class);
criteria.add(Example.create(book));
Listresults=criteria.list();
5.查询排序
criteria.addOrder(Order.desc("price"));
6.分页
criteria.setFirstResult(3);
criteria.setMaxResults
(2);
4.本地查询:
Hibernate对本地SQL查询提供了内置的支持,Session的createSQLQuery()方法返回SQLQuery对象,SQLQuery接口继承了Query接口,使用本地查询必须要绑定对象存储查询后的数据结果SQLQuery接口的addEntity()
SQLQueryquery=session.createSQLQuery(“select*fromBook”);
query.addEntity(com.book.bean.Book.Class);
5.命名查询:
把数据库操作语句定义在程序的外部配置文件中,然后在程序中使用这种方式更加的灵活
--省略其他配置-->
[CDATA[
fromBookbwhereb.name=:
nameandb.price=:
price
]]>
Queryquery=session.getNamedQuery("bookQuery");
6.查询方法list()方法和iterate()
1.使用list()方法获取查询结果,每次发出一条查询语句,获取全部数据
2.使用iterate()方法获取查询结果,先发出一条SQL语句用来查询满足条件数据的id,然后依次按这些id查询记录,也就是要执行N+1条SQL语句(N为符合条件的记录数)
hibernate二级缓存:
使用缓存主要的目的是提高程序的效率,但是缓存数据存在安全隐患.hibernate默认的二级缓存由ehcache提供(provider),当然也可以使用其他的缓存框架和自定义缓存程序
使用ehcache来实现hibernate的缓存
1.导入相关的包
2.配置ehcache缓存框架
xmlversion="1.0"encoding="UTF-8"?
>
--缓存目录-->
\\temp"/>
timeToIdleSeconds="300"timeToLiveSeconds="600"overflowToDisk="true"/>
3.配置hibernate
—配置缓存实现程序-->
org.hibernate.cache.EhCacheProvider
--启用查询缓存-->
true
4.配置哪些查询使用缓存
2.struts2
struts2概述
Struts2是一个mvc模式的实现,模块化程序设计,使项目更加便于管理和分工,简化了客户请求(参数类型的装换和自动封装(通过反射技术),文件的上传,数据的验证,信息的国际化显示)和响应操作,struts2通过dojo封装了(异步访问服务器数据的方法)ajax,通过封装ognl提供ValueStack(值栈)丰富了view层访问数据的方式
struts2执行的流程:
struts的配置文件解析:
7.web.xml
核心控制器,对框架进行初始化,以及处理所有的请求
struts2
org.apache.struts2.dispatcher.ng.filter.
StrutsPrepareAndExecuteFilter(Struts2.0版本的核心控制器为org.apache.struts2.dispatcher.FilterDispatcher
)
struts2
/*
2.action:
实现Action接口,继承ActionSupport类,普通的Java类
/page/manage.jsp
3.constant元素配置常量,可以改变Struts2框架的一些行为
4.pagckage:
包的作用:
简化维护工作,提高重用性
包可以“继承”已定义的包,并可以添加自己包的配置
name属性为必需的且唯一,用于指定包的名称
extends属性指定要扩展的包
namespace属性定义该包中action的命名空间,为可选属性
5.全局元素:
/page/error.jsp
/page/login.jsp
struts的核心对象和拦截器
(早期MVC框架将一些通用操作写死在核心控制器中,致使框架灵活性不足、可扩展性降低,Struts2将核心功能放到多个拦截器中实现,拦截器可自由选择和组合,增强了灵活性,有利于系统的解耦):
(struts结构剖析图)
8.核心对象:
1.ActionMapper(根据请求的URI查找是否存在对应Action调用)
2.ActionMapping(保存调用Action的映射信息,如namespace、name等)
3.ActionProxy(代理创建对象xwork)
4.ActionInvocation(表示Action的执行状态,保存拦截器、Action实例)
5.Interceptor(可以在请求处理之前或者之后执行的Struts2组件)
9.系统拦截器
1.Params拦截器
负责将请求参数设置为Action属性
2.servletConfig拦截器
将源于ServletAPI的各种对象注入到Action
耦合的方式:
ServletActionContext.getRequest()
解耦的方式:
ActionContext.getContext()
实现接口:
servletRequestAware
3.fileUpload拦截器
对文件上传提供支持
4.exception拦截器
捕获异常,并且将异常映射到用户自定义的错误页面
5.validation拦截器
调用验证框架进行数据验证
10.自定义拦截器
1.必须实现Interceptor接口或继承AbstractInterceptor
2.实现Interceptor必须重写init()destroy()和Stringintercept(ActionInvocationai)方法
3.继承AbstractInterceptor只需要intercept(ActionInvocationai)方法就可以
11.拦截器栈:
多个拦截器组合成一个拦截器栈
1.系统默认的拦截器栈是:
defaultStack
12.配置拦截器以及拦截器栈
--定义权限验证拦截器-->
class="com.book.interceptor.AuthInterceptor">