




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、这是我为新项目专门搭建的基于全注解方式的SSH基础框架,虽然是老掉牙的的东西,自我感觉很良好,好东西不敢独享,晒晒概述:基于struts2.23 + spring2.5.6 + hibernate3.6.4 +hibernate-generic-dao1.0(除了spring,我整合的都是最新的GA包,hibernate-generic-dao是google项目库中一个开源的basedao,我灰常喜欢,因为我找不到更好更适合我的)项目代码是基于eclipse3.6创建的,很简单,大家直接导入则可运行。1.包结构,源码,测试用例,配置文件一目了然。每个功能模块都在modules包下做开发,配置文
2、件统一在resource管理(基实也没多少配置文件,都用注解嘛)。2.无论阅读哪个web项目代码,我都是先从web.xml开始,项目有什么东西一清二楚。我这里将log4j监听放在第一,我想他应该能够从系统启动开启就能记录我的所有日志(求认证)。第二个监听是proxool数据库连接池,听说很高效,所以果断引入(引入步骤搞得复杂吧,我还重写了监听。一切为了稳定,也好扩展我某日喜欢加入动态切换数据源做准备。呵呵)。OpenSessionInView,我想如果你不喜欢可以摘掉,反正我很喜欢。Struts2指定了自定义的struts.xml文件位置,指定扫描注解的action路径。最后是proxool的
3、可视化图形监控,很棒。frameworklog4jConfigLocation/WEB-INF/classes/resources/log4j/pertiespropertyFile/WEB-INF/classes/resources/hibernate/pertiescontextConfigLocationclasspath:resources/spring/applicationContext.xmlorg.springframework.web.util.Log4jConfigListenerorg.chinasb.framework.core.
4、db.ProxoolListenerOpenSessionInViewFilterorg.springframework.orm.hibernate3.support.OpenSessionInViewFiltersingleSessiontrueOpenSessionInViewFilter/*org.springframework.web.context.ContextLoaderListener Set Character Encoding org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 forc
5、eEncoding true Set Character Encoding /* struts-cleanuporg.apache.struts2.dispatcher.ActionContextCleanUpstruts-cleanup/*struts2org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilterconfigstruts-default.xml,struts-plugin.xml,resources/struts/struts.xml actionPackages org.chinasb.frame
6、work.modules struts2/*Axool.admin.servlet.AdminServletAdmin/admin.htmlindex.htmlindex.htmindex.jsp3.applicationContext.xml,我想下面注释得也比较清楚了,如果我写错了或理解错了希望指正。4.hiberante配置所需的一些属性,指定方言,开始hibernate缓存等,后面还有一个c3p0的数据连接池属性。你们下载的代码里面,数据源方面我换成了c3p0,因为proxool我配置的是随web启动的,而我又不想改成随spring加
7、载启动。所以我开发中注释掉proxool,以后上线再打开。# hibernatehibernate.dialect=org.hibernate.dialect.MySQLDialecthibernate.show_sql=truehibernate.format_sql=falsehibernate.hbm2ddl.auto=update# hibernate vider_class=org.hibernate.cache.EhCacheProviderhibernate.cache.use_query_cache=falsehibernate.
8、cache.use_second_level_cache=true# C3P0 configurationhibernate.connection.driver_class=com.mysql.jdbc.Driverhibernate.connection.url=jdbc:mysql:/localhost:3306/chinasb?useUnicode=true&characterEncoding=utf-8hibernate.connection.username=roothibernate.connection.password=root5.applicationContext-pers
9、istence.xml,这里就是数据源及事务的一些配置了。事务我使用了cglib类级别的代理注解配置方式,如果你喜欢用jdk接口方式动态的代理,可以去掉 proxy-target-class=true。顺便也保留了声名式事务。 !- xool.ProxoolDriverproxool.default - $hibernate.connection.username $hibernate.connection.password $hibernate.dialect$hibernate.show_sql$hibernate.format_sql$hibe
10、rnate.hbm2ddl.auto$vider_class$hibernate.cache.use_query_cache$hibernate.cache.use_second_level_cache!- -!-!-6.struts.xml,你懂的。 好了,下面我简单讲一下开发流程。在modules下建立模块,和相应的包(action,dao,model,service,util),比如我上面包结构的demo模块。demo.java,model类,映射数据库中的表,每个model一张表,为了适应basedao,每个model还对应每个dao(不要觉得这是
11、麻烦的)。jpa的注解,你们懂的,不解释。package org.chinasb.framework.modules.demo.model;import java.io.Serializable;import java.util.Date;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import org.hibernate.annotations.Cache;i
12、mport org.hibernate.annotations.CacheConcurrencyStrategy;EntityCache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)public class Demo implements Serializable private static final long serialVersionUID = 1L; Id GeneratedValue(strategy = GenerationType.AUTO) private int id; private String title
13、; private String content; private Date publishdate; public int getId() return id; public void setId(int id) this.id = id; public String getTitle() return title; public void setTitle(String title) this.title = title; public String getContent() return content; public void setContent(String content) th
14、is.content = content; public Date getPublishdate() return publishdate; public void setPublishdate(Date publishdate) this.publishdate = publishdate; DemoDao,接口类。我想在多数程序员的项目里做的绝大多数事情都是相关数据库的CURD操作,所以基础框架里整合一个强大的BaseDao是必须的,而我选择了开源的GenericDao(觉得不适合你的可以替掉)。直接继承GenericDao接口,指定操作的model,与主键的类型。package org.
15、chinasb.framework.modules.demo.dao;import org.chinasb.framework.core.base.dao.hibernate.GenericDAO;import org.chinasb.framework.modules.demo.model.Demo;public interface DemoDao extends GenericDAO DemoDaoImpl,呵,这样写我觉得不麻烦,不多说。Repository注解交给spring管理。 package org.chinasb.framework.modules.demo.dao.impl;
16、import org.chinasb.framework.core.base.dao.BaseDAO;import org.chinasb.framework.modules.demo.dao.DemoDao;import org.chinasb.framework.modules.demo.model.Demo;import org.springframework.stereotype.Repository;Repositorypublic class DemoDaoImpl extends BaseDAO implements DemoDao BaseDAO,主要是注入sessionFac
17、tory给hibernate-generic-dao。package org.chinasb.framework.core.base.dao;import java.io.Serializable;import org.chinasb.framework.core.base.dao.hibernate.GenericDAOImpl;import org.hibernate.SessionFactory;import org.springframework.beans.factory.annotation.Autowired;public class BaseDAO extends Generi
18、cDAOImpl Autowired Override public void setSessionFactory(SessionFactory sessionFactory) super.setSessionFactory(sessionFactory); DemoService,接下来就要定义一些相关数据库操作的业务接口给上层使用了,这里主要列出了baseDao能操作的部分,像分页,字段过滤查询方面的没有列出。package org.chinasb.framework.modules.demo.service;import java.util.List;import org.chinasb
19、.framework.modules.demo.model.Demo;public interface DemoService /* * 增加或更新demo * * param demo * return */ public boolean save(Demo demo); /* * 批量增加或更新demo * * param demo * return */ public boolean save(Demo demos); /* * 删除demo * * param demo * return */ public boolean remove(Demo demo); /* * 批量删除dem
20、o * * param demos */ public void remove(Demo demos); /* * 根据主键删除demo * * param id * return */ public boolean removeById(Integer id); /* * 批量根据主键删除demo * * param ids */ public void removeByIds(Integer ids); /* * 查询demo数据记录集 * * return */ public List findAll(); /* * 根据主键查询demo * * param id * return */
21、 public Demo findById(Integer id); /* * 批量根据主键查询demo记录集 * * param ids * return */ public Demo findByIds(Integer ids); /* * 持久化session数据到数据库 */ public void flush();DemoServiceImpl,接口实现。这里全用注解控制了事务,及演示如何使用baseDao。当然强大的baseDao并不仅仅这些方法,还有分页等强大的查询数据功能。大家可以在/p/hibernate-generic-dao/进行
22、查看。package org.chinasb.framework.modules.demo.service.impl;import java.util.List;import javax.annotation.Resource;import org.chinasb.framework.modules.demo.dao.DemoDao;import org.chinasb.framework.modules.demo.model.Demo;import org.chinasb.framework.modules.demo.service.DemoService;import org.spring
23、framework.stereotype.Service;import org.springframework.transaction.annotation.Propagation;import org.springframework.transaction.annotation.Transactional;ServiceTransactional(readOnly = true, propagation = Propagation.SUPPORTS)public class DemoServiceImpl implements DemoService Resource private Dem
24、oDao demoDao; Override Transactional(readOnly = false, propagation = Propagation.REQUIRED) public boolean save(Demo demo) return demoDao.save(demo); Override Transactional(readOnly = false, propagation = Propagation.REQUIRED) public boolean save(Demo demos) return demoDao.save(demos); Override Trans
25、actional(readOnly = false, propagation = Propagation.REQUIRED) public boolean remove(Demo demo) return demoDao.remove(demo); Override Transactional(readOnly = false, propagation = Propagation.REQUIRED) public void remove(Demo demos) demoDao.remove(demos); Override Transactional(readOnly = false, pro
26、pagation = Propagation.REQUIRED) public boolean removeById(Integer id) return demoDao.removeById(id); Override Transactional(readOnly = false, propagation = Propagation.REQUIRED) public void removeByIds(Integer ids) demoDao.removeByIds(ids); Override public List findAll() return demoDao.findAll(); O
27、verride public Demo findById(Integer id) return demoDao.find(id); Override public Demo findByIds(Integer ids) return demoDao.find(ids); Override public void flush() demoDao.flush(); DemoAction,这里演示了查看,增,删功能。也是基于注解的方式,继承了baseAction。package org.chinasb.framework.modules.demo.action;import java.util.Da
28、te;import java.util.List;import javax.annotation.Resource;import org.apache.struts2.convention.annotation.Action;import org.apache.struts2.convention.annotation.Result;import org.chinasb.framework.core.base.action.BaseAction;import org.chinasb.framework.modules.demo.model.Demo;import org.chinasb.fra
29、mework.modules.demo.service.DemoService;import org.springframework.stereotype.Controller;Controllerpublic class DemoAction extends BaseAction private static final long serialVersionUID = 1L; Resource private DemoService demoService; Action(value = /demoAction, results = Result(name = SUCCESS, locati
30、on = /manager/modules/demo/index.jsp) ) Override public String execute() List demoList = demoService.findAll();httpServletRequest.setAttribute(DEMO_LIST, demoList);return SUCCESS; Action(value = /demoAddAction, results = Result(name = SUCCESS, location = /demoAction, type = redirect) ) public String add() Demo demo = new Demo();demo.setTitle(httpServletRequest.getParameter(title);demo.setContent(httpServletRequest.getParameter(content);demo.setPublishdate(new Date();demoService.sa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年手工木工师制作工技能资格知识考试题与答案
- 危险化学品安全管理与应急处置培训大纲
- 行政人员培训方案
- 城市交通规划合同纠纷咨询重点基础知识点
- 物业员工保密意识培训
- 通讯商业合作合同协议
- 转店协议和租房合同
- 《儿童股骨头坏死》课件
- 输送线合同协议
- 追加合同金额补充协议
- 北师大版八年级数学上册一次函数《一次函数中的三角形面积 》教学课件
- 科技企业研发流程的精益化管理
- 《中央空调原理与维护》课件
- 石油化工压力管道安装工艺及质量控制重点
- 质量管理科提高医疗质量安全不良事件报告率PDCA
- 骨科股骨颈骨折“一病一品”成果汇报
- 《大禹治水的故事》课本剧剧本:感受英雄力量领略坚韧精神(6篇)
- 2018年高考英语全国一卷(精校+答案+听力原文)
- 工程决算书(结算书)模板
- 河北农业大学现代科技学院《试验设计与数据处理实验》2023-2024学年第一学期期末试卷
- 零星工程维修 投标方案(技术方案)
评论
0/150
提交评论