JSF+Spring+JPAHibernate实现的环境搭建.docx

上传人:b****6 文档编号:8496364 上传时间:2023-01-31 格式:DOCX 页数:22 大小:57.38KB
下载 相关 举报
JSF+Spring+JPAHibernate实现的环境搭建.docx_第1页
第1页 / 共22页
JSF+Spring+JPAHibernate实现的环境搭建.docx_第2页
第2页 / 共22页
JSF+Spring+JPAHibernate实现的环境搭建.docx_第3页
第3页 / 共22页
JSF+Spring+JPAHibernate实现的环境搭建.docx_第4页
第4页 / 共22页
JSF+Spring+JPAHibernate实现的环境搭建.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

JSF+Spring+JPAHibernate实现的环境搭建.docx

《JSF+Spring+JPAHibernate实现的环境搭建.docx》由会员分享,可在线阅读,更多相关《JSF+Spring+JPAHibernate实现的环境搭建.docx(22页珍藏版)》请在冰豆网上搜索。

JSF+Spring+JPAHibernate实现的环境搭建.docx

JSF+Spring+JPAHibernate实现的环境搭建

写之前的感受

刘岩

先说好的,文章后再说缺点。

JSF+Spring+JPA以我个人看来,应该说是Struts2+Spring+Hibernate的替代解决方案。

引入JPA去取代或者说包装或者说是升级Hibernate是为了符合JAVAEE的规范,达到ORM统一的结果。

下次项目用EJB也好、用TOPLINK也好、用ibatis也罢,我们的开发人员代价会很小。

在目前很多项目来说,引入此规范,能更好的代码复用,持久层和控制层相当于进一步的解耦合了,你只需要开启项目之前好好地建立领域模型。

那么用JSF取代Struts2或者更早一点的Struts1又是为何!

答案依然是,它是规范。

是符合某些标准的规范。

不是说Struts2不好,这个因项目而定才行。

我个人还是比较推崇apache的Struts2的,当然了,apache的JSF实现和JSF组件也是相当地杠杠的!

JSF更贴近事件比较多的web前端处理机制。

想想我们一般要接收和处理页面的各种事件是用什么:

js函数+ajax处理是吧(Flex我没有接触过,不知道它是怎么样的处理前后台交互的)。

JSF可以采用事件监听机制,控件(JSF里面叫做控件)被触发了某些时间,直接优雅的和POJO进行了交互,配合ajax4jsf,处理大量的控件的事件是很简洁方便的。

言归正传,开始。

1.首先利用IDE建立一个Web项目

2.加入相应的jar包,注意:

所有的开源框架都是加入jar包的时候最麻烦,尤其加入了Spring,搞不好就他妈的启动服务的时候报错。

我已经将相应需要的jar包放到了csdn上面共享了,网址是

3.web项目加入JSF支持

修改web.xml,加入如下内容

--Spring与JSF支持-->

org.springframework.web.context.ContextLoaderListener

--配置JSF-->

javax.faces.CONFIG_FILES

/WEB-INF/faces-config.xml

--Spring配置文件地址-->

contextConfigLocation

/WEB-INF/classes/applicationContext.xml

--客户端管理状态-->

javax.faces.STATE_SAVING_METHOD

client

—加入facelets框架支持-->

facelets.LIBRARIES

/WEB-INF/facelets/tags/arcmind.taglib.xml;/WEB-INF/tomahawk.taglib.xml

指定facelets支持的后缀

javax.faces.DEFAULT_SUFFIX

.xhtml

--JSF的ajax配置AJAX4JSF-->

Ajax4jsfFilter

ajax4jsf

org.ajax4jsf.Filter

ajax4jsf

FacesServlet

REQUEST

FORWARD

INCLUDE

—JSF支持-->

FacesServlet

javax.faces.webapp.FacesServlet

1

FacesServlet

*.faces

—组件支持-->

为正确使用tomahawk组件包而配置

extensionsFilter

org.apache.myfaces.webapp.filter.ExtensionsFilter

uploadMaxFileSize

10m

uploadThresholdSize

100

extensionsFilter

*.faces

extensionsFilter

/faces/*

在WEB-INF下面加入jsf_core.tld、html_basic.tld和tomahawk.taglib.xml文件、新建一个faces-config.xml文件,内容配置如下:

--配置facelets-->

zh_CN

com.sun.facelets.FaceletViewHandler

—JSF与Spring集成-->

org.springframework.web.jsf.DelegatingVariableResolver

再加入facelets框架的标签支持包,整个环境包大致如下图所示:

4.上面的配置好了,JSF和Spring就集成起来了。

下面我们加入JPA支持,并且将JPA和Spring集成起来。

首先加入persistence.xml文件,内容如下:

xmlversion="1.0"encoding="UTF-8"?

>

xmlns:

xsi="http:

//www.w3.org/2001/XMLSchema-instance"

xsi:

schemaLocation="

version="1.0">

transaction-type="RESOURCE_LOCAL">

org.hibernate.ejb.HibernatePersistence

test.vo.Test

--Hibernate方言(只有Hibernate才需要设置)-->

value="org.hibernate.dialect.MySQLDialect"/>

--Hibernate显示调试SQL-->

--Hibernate格式化sql-->

之后建立一个值对象,代码如下:

packagemangerTeam.vo;

importjava.io.Serializable;

importjava.util.Set;

importjavax.persistence.Basic;

importjavax.persistence.CascadeType;

importjavax.persistence.Column;

importjavax.persistence.Entity;

importjavax.persistence.FetchType;

importjavax.persistence.GeneratedValue;

importjavax.persistence.GenerationType;

importjavax.persistence.Id;

importjavax.persistence.JoinColumn;

importjavax.persistence.JoinTable;

importjavax.persistence.Lob;

importjavax.persistence.ManyToMany;

importjavax.persistence.ManyToOne;

importjavax.persistence.Table;

/**

*运动员实体

*

*@author刘岩

*/

@Entity

@Table(name="player")

publicclassPlayersVOimplementsSerializable{

@Id

@GeneratedValue(strategy=GenerationType.AUTO)

@Column(name="id",unique=true,nullable=false)

privateIntegerid;

@Column(name="name")

privateStringname;

@ManyToOne(optional=true,fetch=FetchType.LAZY)

@JoinColumn(name="teamId")

privateTeamVOteamVO;

@ManyToOne(fetch=FetchType.LAZY)

@JoinColumn(nullable=false,name="nationalityId")

privateNationalityVOnationalityVO;

@Lob

@Basic(fetch=FetchType.LAZY)

@Column(name="pic")

privatebyte[]pic;

@Lob

@Basic(fetch=FetchType.LAZY)

@Column(name="mess")

privateStringmess;

@ManyToMany(cascade=CascadeType.REFRESH,fetch=FetchType.LAZY)

@JoinTable(name="plays_position",joinColumns={@JoinColumn(name="playerId")},inverseJoinColumns={@JoinColumn(name="positionId")})

privateSetpositions;

publicIntegergetId(){

returnid;

}

publicvoidsetId(Integerid){

this.id=id;

}

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicSetgetPositions(){

returnpositions;

}

publicvoidsetPositions(Setpositions){

this.positions=positions;

}

publicTeamVOgetTeamVO(){

returnteamVO;

}

publicvoidsetTeamVO(TeamVOteamVO){

this.teamVO=teamVO;

}

publicNationalityVOgetNationalityVO(){

returnnationalityVO;

}

publicvoidsetNationalityVO(NationalityVOnationalityVO){

this.nationalityVO=nationalityVO;

}

publicbyte[]getPic(){

returnpic;

}

publicvoidsetPic(byte[]pic){

this.pic=pic;

}

publicStringgetMess(){

returnmess;

}

publicvoidsetMess(Stringmess){

this.mess=mess;

}

}

之后写DAO,无论你是用IDE生成的DAO还是自己写的DAO,代码大致如下:

packagemangerTeam.dao;

importjava.util.HashMap;

importjava.util.List;

importjavax.persistence.EntityManager;

importjavax.persistence.PersistenceException;

importjavax.persistence.Query;

importmangerTeam.vo.PlayersVO;

importorg.springframework.context.ApplicationContext;

importorg.springframework.orm.jpa.JpaCallback;

importorg.springframework.orm.jpa.support.JpaDaoSupport;

importorg.springframework.transaction.annotation.Transactional;

@Transactional

publicclassPlayerDAOextendsJpaDaoSupportimplementsIPlayerDAO{

//propertyconstants

publicstaticfinalStringNAME="name";

publicstaticfinalStringMESS="mess";

publicstaticfinalStringPIC="pic";

publicvoidsave(PlayersVOentity){

logger.info("savingPlayerinstance");

try{

getJpaTemplate().persist(entity);

logger.info("savesuccessful");

}catch(RuntimeExceptionre){

logger.error("savefailed",re);

throwre;

}

}

publicvoiddelete(PlayersVOentity){

logger.info("deletingPlayerinstance");

try{

entity=getJpaTemplate().getReference(PlayersVO.class,

entity.getId());

getJpaTemplate().remove(entity);

logger.info("deletesuccessful");

}catch(RuntimeExceptionre){

logger.error("deletefailed",re);

throwre;

}

}

publicPlayersVOupdate(PlayersVOentity){

logger.info("updatingPlayerinstance");

try{

PlayersVOresult=getJpaTemplate().merge(entity);

logger.info("updatesuccessful");

returnresult;

}catch(RuntimeExceptionre){

logger.error("updatefailed",re);

throwre;

}

}

publicPlayersVOfindById(Integerid){

logger.info("findingPlayerinstancewithid:

"+id);

try{

PlayersVOinstance=getJpaTemplate().find(PlayersVO.class,id);

returninstance;

}catch(RuntimeExceptionre){

logger.error("findfailed",re);

throwre;

}

}

@SuppressWarnings("unchecked")

publicListfindByProperty(StringpropertyName,

finalObjectvalue,finalint...rowStartIdxAndCount){

logger.info("findingPlayerinstancewithproperty:

"+propertyName

+",value:

"+value);

try{

finalStringqueryString="selectmodelfromPlayersVOmodelwheremodel."

+propertyName+"=:

propertyValue";

returngetJpaTemplate().executeFind(newJpaCallback(){

publicObjectdoInJpa(EntityManagerem)

throwsPersistenceException{

Queryquery=em.createQuery(queryString);

query.setParameter("propertyValue",value);

if(rowStartIdxAndCount!

=null

&&rowStartIdxAndCount.length>0){

//有分页

introwStartIdx=Math.max(0,rowStartIdxAndCount[0]);

//开始页

if(rowStartIdx>

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

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1