SpringMVC学习系列(12) 完结篇 之 基于Hibernate+Spring+Spring MVC+Bootstrap的管理系统实现
到这里已经写到第12篇了,前11篇基本上把Spring MVC主要的内容都讲了,现在就直接上一个项目吧,希望能对有需要的朋友有一些帮助。
一、首先看一下项目结构:
InfrastructureProjects:是抽取出的基础项目,主要封装了一些通用的操作。
SpringMVC3Demo:就是管理系统所在的项目。
WeiXinAPI:是之前做微信管理平台测试时封装一些操作,如果不需要把该项目移除即可。
注:项目的前端UI框架用的是国外的一个基于Bootstrap框架的开发的Demo,如不需要替换为自己熟悉的UI框架即可。
二、实现的功能:
登录:
注册:
首页:
用户管理:
账户绑定:
角色管理:
角色授权:
权限管理:
组织机构管理:
这是权限添加界面:
PS:
1.关于权限配置:权限配置是按正则表达式匹配的,可参见下表是我现在数据库里面的权限配置:
2.在Hibernate配置文件比如Role.hbm.xml中,authorities一对多我这里配的是lazy="false",是因为在用户登录时检查权限肯定要获取对应Role下的所有authorities,所以没必要开lazy加载,但是如果你要添加其它功能是,请根据需求来决定是否开lazy,比如账户—>订单这样的就需要开lazy。关于Hibernate网上有很多资料可供参考,这里推荐一下刘冬大哥写的NHibernate系列文章:http://www.cnblogs.com/GoodHelper/category/214139.html可以作为学习Hibernate的参考。
3.由于OpenSessionInView会有性能上的损失,所以项目没有开OpenSessionInView,而且Hibernate的事务是配置到Service的,所以请在Service层返回数据时准备好所有需要的数据,否则在Controller或View中想调用lazy加载数据会抛出事务已关闭的异常。
4.运行项目时最好用新的chrome或firefox浏览器,Bootstrap3不支持IE8以下浏览器,而且用IE的话要想完全显示出Bootstrap3的效果则至少IE10.
5.由于最近事情比较多,项目的国际化还没来得及添加,可以根据系列(8)所讲的内容自行添加也算做练手(^.^)~~~
6.项目引用的jar包是用的User Library添加进的,在把项目解压到本地时有可能里面的引用的路径和我机器上的不一样,如果包路径不正确请按包在自己机器上的路径进行更改。
代码下载:http://pan.baidu.com/s/1sjwdPLz
总共70多MB,但是别激动,项目没那么大主要是找需要的包时,下载的zip文件解压后会有一堆包文件,很多是没用到的,我没删都放在Dependence文件夹下面了,只是在项目中对需要的包添加了引用。
数据库文件下载:http://pan.baidu.com/s/1i33gczN
PPS:因为这个系统有2个项目,一个是通用的基础项目,一个是网站,当时为了管理包的方便所以用了User Library的方式添加项目中需要的包,前些时间感觉电脑越来越慢了,就把电脑中的虚拟机卸载掉了,只保留的项目的源码,然后有朋友告诉我项目导入后User Library里面内容是空的,之后我把项目导入到我win系统中的eclipse中也发现User Library没有内容(又遇到了一个坑,还是我用的方式不对?)。所以,不知道User Library引用什么包的朋友可以参考第11篇的项目源码,里面引用的包是直接添加到项目里面的,当然第11篇引用的包是少于这个项目的,不过少引用的包根据提示到Dependence文件夹下找到后添加即可,另:Infrastructure Projects中引用的User Library和SpringMVC3 Demo引用的是不同的,需要注意。
PPPS:贴一下一个朋友调试成功项目所引用的包(我机器的开发环境没有了,懒得折腾了,原谅我的懒惰~),给需要的做一个参考:
InfrastructureProjects项目:
/InfrastructureProjects/lib/antlr-2.7.7.jar
/InfrastructureProjects/lib/dom4j-1.6.1.jar
/InfrastructureProjects/lib/hibernate-commons-annotations-4.0.2.Final.jar
/InfrastructureProjects/lib/hibernate-core-4.2.8.Final.jar
/InfrastructureProjects/lib/hibernate-jpa-2.0-api-1.0.1.Final.jar
/InfrastructureProjects/lib/javassist-3.18.1-GA.jar
/InfrastructureProjects/lib/jboss-logging-3.1.0.GA.jar
/InfrastructureProjects/lib/jboss-transaction-api_1.1_spec-1.0.1.Final.jar
/InfrastructureProjects/lib/jstl.jar
/InfrastructureProjects/lib/spring-beans-3.2.5.RELEASE
/InfrastructureProjects/lib/standard.jar
SpringMvc3Demo项目:
antlr-2.7.7.jar
aopalliance-1.0.jar
aspectjrt.jar
aspectjweaver.jar
commons-beanutils-1.8.0.jar
commons-collections-3.2.1.jar
commons-fileupload-1.3.1.jar
commons-io-2.4.jar
commons-lang-2.5.jar
commons-logging-1.1.3.jar
dom4j-1.6.1.jar
ezmorph-1.0.6.jar
hibernate-commons-annotations-4.0.2.Final.jar
hibernate-core-4.2.8.Final.jar
hibernate-jpa-2.0-api-1.0.1.Final.jar
hibernate-validator-4.3.1.Final.jar
hibernate-validator-annotation-processor-4.3.1.Final.jar
jackson-core-asl-1.9.13.jar
jackson-mapper-asl-1.9.13.jar
javassist-3.18.1-GA.jar
jboss-logging-3.1.0.CR2.jar
jboss-logging-3.1.0.GA.jar
jboss-transaction-api_1.1_spec-1.0.1.Final.jar
joda-time-2.3.jar
json-lib-2.4-jdk15.jar
jstl.jar
mysql-connector-java-5.1.10.jar
proxool-0.9.1.jar
proxool-cglib.jar
spring-aop-3.2.5.RELEASE.jar
spring-aop-3.2.5.RELEASE-javadoc.jar
spring-aop-3.2.5.RELEASE-sources.jar
spring-aspects-3.2.5.RELEASE.jar
spring-aspects-3.2.5.RELEASE-javadoc.jar
spring-aspects-3.2.5.RELEASE-sources.jar
spring-beans-3.2.5.RELEASE.jar
spring-beans-3.2.5.RELEASE-javadoc.jar
spring-beans-3.2.5.RELEASE-sources.jar
spring-build-src-3.2.5.RELEASE.jar
spring-context-3.2.5.RELEASE.jar
spring-context-3.2.5.RELEASE-javadoc.jar
spring-context-3.2.5.RELEASE-sources.jar
spring-context-support-3.2.5.RELEASE.jar
spring-context-support-3.2.5.RELEASE-javadoc.jar
spring-context-support-3.2.5.RELEASE-sources.jar
spring-core-3.2.5.RELEASE.jar
spring-core-3.2.5.RELEASE-javadoc.jar
spring-core-3.2.5.RELEASE-sources.jar
spring-expression-3.2.5.RELEASE.jar
spring-expression-3.2.5.RELEASE-javadoc.jar
spring-expression-3.2.5.RELEASE-sources.jar
spring-instrument-3.2.5.RELEASE.jar
spring-instrument-3.2.5.RELEASE-javadoc.jar
spring-instrument-3.2.5.RELEASE-sources.jar
spring-instrument-tomcat-3.2.5.RELEASE.jar
spring-instrument-tomcat-3.2.5.RELEASE-javadoc.jar
spring-instrument-tomcat-3.2.5.RELEASE-sources.jar
spring-jdbc-3.2.5.RELEASE.jar
spring-jdbc-3.2.5.RELEASE-javadoc.jar
spring-jdbc-3.2.5.RELEASE-sources.jar
spring-jms-3.2.5.RELEASE.jar
spring-jms-3.2.5.RELEASE-javadoc.jar
spring-jms-3.2.5.RELEASE-sources.jar
spring-orm-3.2.5.RELEASE.jar
spring-orm-3.2.5.RELEASE-javadoc.jar
spring-orm-3.2.5.RELEASE-sources.jar
spring-oxm-3.2.5.RELEASE.jar
spring-oxm-3.2.5.RELEASE-javadoc.jar
spring-oxm-3.2.5.RELEASE-sources.jar
spring-struts-3.2.5.RELEASE.jar
spring-struts-3.2.5.RELEASE-javadoc.jar
spring-struts-3.2.5.RELEASE-sources.jar
spring-test-3.2.5.RELEASE.jar
spring-test-3.2.5.RELEASE-javadoc.jar
spring-test-3.2.5.RELEASE-sources.jar
spring-tx-3.2.5.RELEASE.jar
spring-tx-3.2.5.RELEASE-javadoc.jar
spring-tx-3.2.5.RELEASE-sources.jar
spring-web-3.2.5.RELEASE.jar
spring-web-3.2.5.RELEASE-javadoc.jar
spring-web-3.2.5.RELEASE-sources.jar
spring-webmvc-3.2.5.RELEASE.jar
spring-webmvc-3.2.5.RELEASE-javadoc.jar
spring-webmvc-3.2.5.RELEASE-sources.jar
spring-webmvc-portlet-3.2.5.RELEASE.jar
spring-webmvc-portlet-3.2.5.RELEASE-javadoc.jar
spring-webmvc-portlet-3.2.5.RELEASE-sources.jar
standard.jar
validation-api-1.0.0.GA.jar
PPPPS:请把InfrastructureProjects项目中ChainEntityDao类中的setLevelCode方法改为以下代码:
protected void setLevelCode(EntityType entity) throws ValidatException {
PKType id=(PKType)super.getSession().save(entity);
if(entity.getParent()==null){
entity.setLevelCode(id.toString());
super.getSession().update(entity);
}
else{
EntityType parentEntity=super.get(entity.getParent().getId());
if(parentEntity==null)
throw new ValidatException("The parent does not exist!");
else{
entity.setLevelCode(parentEntity.getLevelCode()+","+id.toString());
super.getSession().update(entity);
}
} /*DecimalFormat df = new DecimalFormat( "000" );
EntityType maxLevelCodeEntity;
if(entity.getParent()==null)
maxLevelCodeEntity=getMaxLevelCodeExceCurrentEntity(null, entity.getId());
else
maxLevelCodeEntity=getMaxLevelCodeExceCurrentEntity(entity.getParent().getId(), entity.getId()); if(maxLevelCodeEntity==null){
if(entity.getParent()==null)
entity.setLevelCode(df.format(1));
else
entity.setLevelCode(entity.getParent().getLevelCode()+df.format(1));
}
else{
String maxLevelCodeStr=maxLevelCodeEntity.getLevelCode();
int maxLevelCode=Integer.parseInt(maxLevelCodeStr.substring(maxLevelCodeStr.length()-3, maxLevelCodeStr.length()));
if(maxLevelCode+1>999)
throw new ValidatException("The levelcode exceeds the maximum of 999!");
else{
if(entity.getParent()==null)
entity.setLevelCode(df.format(maxLevelCode+1));
else
entity.setLevelCode(entity.getParent().getLevelCode()+df.format(maxLevelCode+1));
}
}*/
}
原来代码里面注释的部分才是最终的代码,下面的才是应该被注释的,不知道为什么变成以前的版本了。
SpringMVC学习系列(12) 完结篇 之 基于Hibernate+Spring+Spring MVC+Bootstrap的管理系统实现的更多相关文章
- SpringMVC Hibernate+Spring+Spring MVC+Bootstrap的管理系统实现
SpringMVC学习系列(12) 完结篇 之 基于Hibernate+Spring+Spring MVC+Bootstrap的管理系统实现 到这里已经写到第12篇了,前11篇基本上把Spring M ...
- SpringMVC学习系列-后记 开启项目的OpenSessionInView
在系列的 SpringMVC学习系列(12) 完结篇 的示例项目中,由于当时考虑到OpenSessionInView会对性能有一定的影响,所以就没有配置项目的OpenSessionInView.在ma ...
- Spring源码学习笔记12——总结篇,IOC,Bean的生命周期,三大扩展点
Spring源码学习笔记12--总结篇,IOC,Bean的生命周期,三大扩展点 参考了Spring 官网文档 https://docs.spring.io/spring-framework/docs/ ...
- Caffe学习系列(12):训练和测试自己的图片--linux平台
Caffe学习系列(12):训练和测试自己的图片 学习caffe的目的,不是简单的做几个练习,最终还是要用到自己的实际项目或科研中.因此,本文介绍一下,从自己的原始图片到lmdb数据,再到训练和测 ...
- SpringMVC学习系列-后记 解决GET请求时中文乱码的问题
SpringMVC学习系列-后记 解决GET请求时中文乱码的问题 之前项目中的web.xml中的编码设置: <filter> <filter-name>CharacterEnc ...
- SpringMVC学习系列-后记 结合SpringMVC和Hibernate-validator,根据后台验证规则自动生成前台的js验证代码
在SpringMVC学习系列(6) 之 数据验证中我们已经学习了如何结合Hibernate-validator进行后台的数据合法性验证,但是通常来说后台验证只是第二道保险,为了更好的用户体验会现在前端 ...
- Intelli IDEA学习系列之快捷键篇
Intelli IDEA学习系列之快捷键篇 IDEA简介: IDEA 全称IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能 ...
- springmvc学习笔记(12)-springmvc注解开发之包装类型參数绑定
springmvc学习笔记(12)-springmvc注解开发之包装类型參数绑定 标签: springmvc springmvc学习笔记12-springmvc注解开发之包装类型參数绑定 需求 实现方 ...
- SpringMVC:学习笔记(12)——ThreadLocal实现会话共享
SpringMVC:学习笔记(12)——ThreadLocal实现会话共享 ThreadLocal ThreadLocal,被称为线程局部变量.在并发编程的情况下,使用ThreadLocal创建的变量 ...
随机推荐
- paip.获取地理位置根据Ip
paip.获取地理位置根据Ip html转换txt 正则表达式截取mid 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http:// ...
- jquery parent和parents的区别
从字面上不难看出parent是指取得一个包含着所有匹配元素的唯一父元素的元素集合.parents则是取得一个包含着所有匹配元素的祖先元素的元素集合(不包含根元素).可以通过一个可选的表达式进行筛选可以 ...
- js异步加载的三种解决方案
默认情况javascript是同步加载的,也就是javascript的加载时阻塞的,后面的元素要等待javascript加载完毕后才能进行再加载,对于一些意义不是很大的javascript,如果放在页 ...
- [原创]软件质量保证圈QQ群:197915314
[原创]软件质量保证圈QQ群:197915314 软件质量保证圈QQ群:197915314,讨论软件工程.软件过程改进.软件质量保证等(非测试群)! 欢迎各位同学来,来时请自报家门,名片修改格式:sh ...
- AsyncTask实现多线程断点续传
前面一篇博客<AsyncTask实现断点续传>讲解了如何实现单线程下的断点续传,也就是一个文件只有一个线程进行下载. 对于大文件而言,使用多线程下载就会比单线程下载要快一些.多线程下载 ...
- EWM ODO清理功能
ERP OBD下传到EWM会自动产生拣货任务(通常做法),但如果EWM因库存不足或其它原因无法拣货时一般要差异确认,对ODO行项目进行0确认.但问题是零确认后EWM标准流程是无法回传ERP的. ERP ...
- GTD时间管理(1)---捕获搜集
前一段时间感觉自己的整个思路很混乱,每一天觉得自己有很多事情很多,但是坐着做着不知道自己做了多少,做项目的时候做着做着时常东想西想.我个人觉得这种想法是不对经的. 于是在google上都出去寻找这方面 ...
- int android.graphics.Bitmap.getRowBytes()
int android.graphics.Bitmap.getRowBytes() Return the number of bytes between rows in the bitmap's pi ...
- JSP 处理汉字信息
request 对象获取客户端提交的汉字字符时,会出现乱码问题,所以对含有汉字字符的信息必须进行特殊处理.将获取的字符串用 ISO-8859-1 进行编码,并将编码存放到一个字节数组中,再将这个数组转 ...
- Linux内核同步方法
1.原子操作,是其它同步方法的基础. 2.自旋锁,线程试图获取一个已经被别人持有的自旋锁,当前线程处于忙等待,占用cpu资源. 3.读写自旋锁,根据通用性和针对性的特点,普通自旋锁在特定场景下的表现会 ...