# llsfw
**Repository Path**: libran/llsfw
## Basic Information
- **Project Name**: llsfw
- **Description**: 基于spring mvc,spring,mybatis,quartz,activiti,shiro,等开源技术,作为JAVA项目的基础框架,提供稳定的框架整合以及依赖关系.以扩展和增强的方式整合,无过度封装,可自由的使用以及扩展.
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: V2
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 185
- **Created**: 2018-06-13
- **Last Updated**: 2020-12-18
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# EGRID框架
基于spring mvc,spring,mybatis,quartz,activiti,shiro,等开源技术,作为JAVA项目的基础框架,提供稳定的框架整合以及依赖关系.
以扩展和增强的方式整合,无过度封装,可自由的使用以及扩展.
# DEMO系统访问地址(测试系统性能有限,如访问速度较慢,还请耐心等待)
[点击我](http://121.40.16.139 "DEMO系统访问地址") (demo/qqqqqq)
## 特点
* 基于主流开源框架搭建,扩展性高,稳定性强
* quartz在线管理模块
* 多租户数据源动态切换
* 基于插件的分页查询
* 细颗粒的权限管控
* 分布式session,使用redis存储和缓存session(可切换为内存session)
* 可自动生成部分的代码
* 配置文件少
* 依赖定期更新
* 项目包结构强制规范
* 添加发送email,后端校验,国际化支持
* 框架支持的,FTP操作,HTTP操作,ZIP压缩解压缩操作,Des加密解密操作,等等....
* activiti工作流示例
## 工程用途说明
* llsfw-core : 框架核心工程,包含所有依赖,以及功能实现
* llsfw-generator : llsfw-core的附属工程,存放所有自动生成的文件
* llsfw-demo : 完整的框架使用样例
* llsfw-documentation : 存放项目相关的文档,PDM,以及代码生成工具
* llsfw-web : 框架基础功能前端代码
* llsfw-webcore : 框架基础功能后端代码
* llsfw-webgen : 框架基础功能自动生成代码
* llsfw-activiti : 工作流集成模块
* llsfw-webdemo : 框架基础功能DEMO样例工程
##Maven坐标
可在[Maven中央库](http://search.maven.org/ "Maven中央库")或者[OSC的MAVEN仓库](http://maven.oschina.net/home.html "OSC的MAVEN仓库")中搜索最新版本的llsfw来添加依赖,具体的依赖代码如下:
com.llsfw
llsfw-generator
2.3.2-RELEASE
com.llsfw
llsfw-core
2.3.2-RELEASE
com.llsfw
llsfw-webcore
2.3.2-RELEASE
com.llsfw
llsfw-web
2.3.2-RELEASE
war
org.apache.maven.plugins
maven-war-plugin
2.6
com.llsfw
llsfw-web
## 组件依赖

## 技术栈

## 必要使用的工具
* 依赖管理 : maven
* 版本管理 : git(优选) , svn
## 建议使用的工具
* 质量管理 : findbug和checkStyle(相关配置文件在/llsfw-documentation/checkStyleConf中)
* 其他插件 : properties Editor(应用商店搜索,即可安装)
## 工具设置相关说明
* eclipse中使用space来缩进,而不是使用tab,[参考配置地址](http://my.oschina.net/xunxun10/blog/110074 "参考配置地址")
* eclipse中对文件fommter的长度默认较小,可以调整,[参考配置地址](http://qq85609655.iteye.com/blog/1164664 "参考配置地址")
* eclipse中文件编码设定为UTF-8,在windiw-->Perferences-->General-->Content Types中选择Text,然后在下方的Default encoding框中填写UTF-8,然后apply即可
* eclipse中的字体调整,在windiw-->Perferences-->General-->Appearance-->Colors and Fonts,然后在Basis下找到Text Font,点击edit,一般将字体设置为Courier New,大小设置为10
##快速搭建EGRID环境
* 使用CORE,参考llsfw-demo项目-->[详情点这里](http://git.oschina.net/wangkang/llsfw/wikis/InstallationManual "点这里提交BUG")
* 五步即可完成项目搭建([视频演示](http://v.youku.com/v_show/id_XMTQ4ODQ4ODUwOA==.html "视频演示") ) (吐槽:优酷,90秒的广告....,各位,有其他好的视屏网站可推荐一下..)
1 签出llsfw-web项目
2 签出llsfw-webdemo项目,并重命名为你想要的项目名称
3 执行llsfw-documentation/llsfw_db_model/LLSFW-CORE-DB.pdm中的脚本
4 执行llsfw-documentation/data/中的数据初始化脚本
5 部署TOMCAT,启动
##配置文件详细说明
* i18n : 存放国际化消息文件,文件名例如 : messages_zh_CN.properties , messages_en_US.properties
* sqlmap : 存放Mybatis的SqlMap文件,详情参考"使用者必要的包结构"这个模块
* log4j2.xml : 标准的log4j2配置文件,详情可在官网查询
* [resources.properties](http://git.oschina.net/wangkang/llsfw/wikis/resourcesFile "")
* spring-interceptors.xml : url拦截器,spring标准配置
* [spring-scheduler.xml](http://git.oschina.net/wangkang/llsfw/wikis/scheduler "")
* [spring-security.xml](http://git.oschina.net/wangkang/llsfw/wikis/security "")
* [spring-systemParam.xml](http://git.oschina.net/wangkang/llsfw/wikis/systemParam "")
* [web.xml](http://git.oschina.net/wangkang/llsfw/wikis/web "")
## 使用者项目中必要的包结构
> 前端
* jsp(src/main/webapp/WEB-INF) : /jsp/*/**
* js (src/main/webapp/WEB-INF) : /static/*/**
> 配置文件
* spring容器(src/main/resources) : /config/*/*/spring/spring-*.xml
* spring mvc(src/main/resources) : /config/*/*/springmvc/spring-*.xml
> 后端
* 控制层的扫描规则(src/main/java) : com.*.*.controller.*
* 业务逻辑层的扫描规则 (src/main/java): com.*.*.service.*
* Mapper层的扫描规则 (src/main/java): com.*.*.mapper.standard.* , com.*.*.mapper.expand.*
* model层的扫描规则 (src/main/java): com.*.*.model.standard.* , com.*.*.model.expand.*
* SqlMap层的扫描规则 (src/main/java/resources): sqlmap/*/*/standard/*/*.xml , sqlmap/*/*/expand/*/*.xml
## 使用者项目中必要包结构的说明,以及必要的要求
* 在所有层(contoller,service,mapper,model,sqlmap)中,类或者文件都必须用包隔开,包的含义可认为是"模块名"
* 控制层(controller)添加@RequiresPermissions,则有权限管控,反之则无权限管控
* 业务逻辑层(service)继承com.llsfw.core.service.BaseService,默认事务传播机制为Propagation.REQUIRED
* 业务逻辑层(service)不继承com.llsfw.core.service.BaseService,默认没有事务管控
* 业务逻辑层(service)如需要使用其他的事务传播机制,则在方法上注明@Transactional
* 在mapper,model,sqlmap层下的自动生成的文件需放在standard包中,而自定义的文件需放在expand包中
* DBContextHolder数据库切换,必须在"非业务逻辑层"调用,并且尽可能的减少数据库切换的次数,过多的切换,同样会造成性能降低
* 使用者需自己实现验证的Realm和登陆contoller(可参考llsfw-demo项目)
## 建议使用者项目遵循规范要求
* 所有项目,web类型的项目中只能存放前端的内容
* 所有项目,自动生成的代码,应放在独立的工程中,并且禁止人为修改
* 所有项目,接口,以及VO的定义,以及需公开的类,应放在独立的工程中
* 所有mvc端异常必须抛出到最外一层,如无特殊原因,不得catch异常
* 不允许在SqlMap之外的其他任何地方出现SQL语句
* 在SqlMap中禁止使用${}来传递参数,因为会有SQL注入风险
* 尽量保证所有的业务逻辑在业务逻辑层(service)完成
* 在整个项目的java package中不允许存放.java之外的文件
* 如项目需要国际化,则项目中所有的文字描述,都需配置在国际化文件中,不能在页面中写死
* 整体项目中,不允许出现警告
* 使用代码检查工具,建议findbug和checkStyle(规范配置文件在llsfw-documentation项目中)
## 使用者项目对框架进行扩展的说明
* 动态库的连接池默认为DBCP,如果需要更换,则继承DynamicDataSource类,并且重写getDataSource方法,最后调整resources.properties文件的dynamicDataSource.class属性即可
* 异常信息格式,如要变更,需实现IExceptionOp接口,最后调整resources.properties文件的mvc.exceptionOp属性即可
* MyBatis物理分页拦截器默认实现为PageInterceptor,方言目前只有Oracle和MySql,如需要扩展,可继承PageInterceptor类,并且重写generatePageSql方法,最后调整resources.properties文件的pageResult.plugin等属性即可
##其他说明
* 框架默认的国际化方式是基于cookie的.
* 国际化文件文件默认放在classpath的i18n目录下,文件以messages开头
* 切换国际化语言的参数为locale
## 问题汇总
* 国内maven下载依赖包的速度过慢([解决点我](http://maven.oschina.net/help.html "国内maven下载依赖速度过慢"))
* V2为开发分支,经常更新的,可能会有与maven中版本不匹配的地方,解决方式有2种,1:下载V2的全部包,在本地构建,2:下载tag的包每个版本中的内容与maven都是对应的.
## 提交BUG
[点这里](http://git.oschina.net/wangkang/llsfw/issues/new?issue%5Bassignee_id%5D=&issue%5Bmilestone_id%5D= "点这里提交BUG")
## 联系方式
* 邮箱 : llsfw_admin@163.com
## 更新日志
### V2.3.3版本修改记录:
1 版本更新到2.3.3
2 修改代码检查的描述
3 mybatis-spring更新1.2.5
4 修改分页查询显示,当总数据为0时,显示查询sql语句
5 base.js新增一个替换空格为nbsp的方法
6 分页查询插件修正了一个sql语句中有in时,count数据为0的问题
### (已经发布)V2.3.2版本修改记录:
1 添加无状态登陆认证,适用接口调用
2 基础表TMM前缀更换为TS(坑,这里面故事很多,不细说)
3 修复删除用户,但是用户和PORTAL关联表数据没有删除的问题
4 基于POI做文件导入导出的封装
5 添加运行时异常子类,分页异常处理修改为运行时异常
6 处理菜单树,点击旁边空白地方的事件响应,脚本错误修复
7 修改easyui远程校验,添加提示信息参数
8 修改左边菜单,关闭可拖拉,打开伸缩按钮
9 添加plupload-2.1.8组件
10 添加生成GUID的JS
11 修复左边菜单在IE下会出现纵向滚动条的问题
12 在登录页添加项目主页的超链接[demo环境用]
13 登陆添加验证码
14 修复密码修改,在后端没有旧密码验证的漏洞
15 mybatis的LIKE语句写法调整($改为#)
16 excel导出,可定义表头宽度
17 规范代码
18 更新maven依赖
19 版本更新到2.3.2
### (已经发布)V2.3.1版本修改记录:
1 添加行为日志相关的报表,添加在poratl面板中
2 将项目的JDK要求由JDK1.7+降级到JDK1.6+
3 将日志组件更换为logback
4 更换权限系统表名前缀为TMM
5 抽象出AdminService中操作用户表地方,做成接口
6 分页配置文件,去掉方法名匹配判断
7 mybatis分页拦截器,count方法中SQL语句,去除order by
8 处理菜单树,点击旁边空白地方的事件响应
9 将版本号变更为2.3.1
### (已经发布)V2.3版本修改记录:
1 将mybatis的版本由3.3.0降级为3.2.8,原因是acitviti与mybatis最新版本不兼容,会导致activiti的SQL查询错误.
### (已经发布)V2.2版本修改记录:
1 mybatis拦截器,增加拦截判断,判断被拦截的sqlMap,在调用之前是否调用过PageInterceptor.startPage方法,如果没有,则默认为不分页查询,详细逻辑如下:
2016-01-15日修改:
*.将原有强制定义的返回值类型List