JSF+Spring+JPAHibernate实现的环境搭建.docx
- 文档编号:8496364
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:22
- 大小:57.38KB
JSF+Spring+JPAHibernate实现的环境搭建.docx
《JSF+Spring+JPAHibernate实现的环境搭建.docx》由会员分享,可在线阅读,更多相关《JSF+Spring+JPAHibernate实现的环境搭建.docx(22页珍藏版)》请在冰豆网上搜索。
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支持-->
--配置JSF-->
--Spring配置文件地址-->
--客户端管理状态-->
—加入facelets框架支持-->
--JSF的ajax配置AJAX4JSF-->
—JSF支持-->
—组件支持-->
在WEB-INF下面加入jsf_core.tld、html_basic.tld和tomahawk.taglib.xml文件、新建一个faces-config.xml文件,内容配置如下:
--配置facelets-->
—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"> --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")}) privateSet publicIntegergetId(){ returnid; } publicvoidsetId(Integerid){ this.id=id; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicSet returnpositions; } publicvoidsetPositions(Set 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") publicList 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>
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JSF Spring JPAHibernate 实现 环境 搭建