Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
guns-vip
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
chenjunxiong
guns-vip
Commits
3102993e
Commit
3102993e
authored
Apr 30, 2017
by
fsn
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
完善readme文档
parent
f61eb773
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
31 additions
and
214 deletions
+31
-214
README.md
+28
-211
src/main/java/project/generator/MpGenerator.java
+3
-3
No files found.
README.md
View file @
3102993e
...
...
@@ -14,7 +14,34 @@
1.
导入sql/guns.sql文件到数据库
2.
启动项目,管理员账号admin/密码111111
##零spring xml配置
##所用框架
###前端
1.
bootstrap
2.
jquery
3.
表格框架bootstrap-table
4.
弹出层框架layer
5.
树形显示ztree
6.
图片上传框架webuploader
###后端
1.
springmvc
2.
mybatis
3.
mybatis-plus
4.
spring
5.
模板引擎beetl
6.
校验层框架hibernate-validator
7.
缓存框架ehcache
##项目特点
1.
零springxml配置,完全采用javabean方式配置spring,新思路,配置简洁,不易出错。详情请见com.stylefeng.guns.project.config包中具体类。
2.
完善的日志记录体系,可记录登录日志,业务操作日志,通过@BussinessLog注解和LogObjectHolder.me().set()方法,业务操作日志可具体记录哪个用户,执行了哪些业务,修改了哪些数据,详情请见@BussinessLog注解和LogObjectHolder类。
3.
利用beetl模板引擎对前台页面进行封装和拆分,使臃肿的html代码变得简洁,更加易维护。
4.
对常用js插件进行二次封装,使js代码变得简洁,更加易维护,具体请见webapp/static/js/common文件夹内js代码。
5.
利用ehcache框架对经常调用的查询进行缓存,提升运行速度,具体请见ConstantFactory类。
6.
controller层采用map + warpper方式的返回结果,返回给前端更为灵活的数据,具体参见com.stylefeng.guns.modular.system.warpper包中具体类。
##零spring xml配置示例
以下配置示例仅列出部分spring配置,详情请见com.stylefeng.guns.project.config包中具体的配置类
###根配置
```
@Configuration
...
...
@@ -37,19 +64,6 @@ public class DataSourceConfig implements EnvironmentAware {
private Environment em;
/**
* 扫描所有mybatis的接口
*
* @author fengshuonan
*/
@Bean
public MapperScannerConfigurer mappers() {
MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
mapperScannerConfigurer.setBasePackage("com.stylefeng.guns.modular.*.dao;com.stylefeng.guns.persistence.dao");
mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
return mapperScannerConfigurer;
}
/**
* spring和MyBatis整合
*/
@Bean
...
...
@@ -67,59 +81,6 @@ public class DataSourceConfig implements EnvironmentAware {
sqlSessionFactory.setGlobalConfig(globalConfig);
return sqlSessionFactory;
}
/**
* mybatis-plus的配置
*/
@Bean
public GlobalConfiguration globalConfig() {
GlobalConfiguration globalConfig = new GlobalConfiguration();
/**
* AUTO->`0`("数据库ID自增")
* INPUT->`1`(用户输入ID")
* ID_WORKER->`2`("全局唯一ID")
* UUID->`3`("全局唯一ID")
*/
globalConfig.setIdType(1);
globalConfig.setDbType("mysql");
/**
* 全局表为下划线命名设置
*/
globalConfig.setDbColumnUnderline(false);
return globalConfig;
}
/**
* 事务管理, 声明式事务的开启
*/
@Bean
public DataSourceTransactionManager transactionManager(DataSource dataSource) {
DataSourceTransactionManager manager = new DataSourceTransactionManager();
manager.setDataSource(dataSource);
return manager;
}
/**
* 第三方数据库连接池的配置
*/
@Bean(initMethod = "init")
public DruidDataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl(em.getProperty("jdbc.url").trim());
dataSource.setUsername(em.getProperty("jdbc.username").trim());
dataSource.setPassword(em.getProperty("jdbc.password").trim());
DataSourceConfigTemplate.config(dataSource);
return dataSource;
}
@Override
public void setEnvironment(Environment environment) {
this.em = environment;
}
}
```
...
...
@@ -144,62 +105,6 @@ public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServlet
protected String[] getServletMappings() {
return new String[]{"/"};
}
// 通过重载这个方法可以对DispatcherServlt进行额外的配置
@Override
protected void customizeRegistration(Dynamic registration) {
// 上传文件路径的配置
registration.setMultipartConfig(new MultipartConfigElement("e:/tmp"));
}
// 这里注册的Filter只能过滤DispatherServlet
@Override
protected Filter[] getServletFilters() {
return new Filter[]{};
}
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
// Apache Shiro
FilterRegistration.Dynamic shiroFilter = servletContext.addFilter("shiroFilter", new DelegatingFilterProxy());
shiroFilter.setInitParameter("targetFilterLifecycle", "true");
shiroFilter.addMappingForUrlPatterns(null, false, "/*");
// Encoding Filter
FilterRegistration.Dynamic encodingFilter = servletContext.addFilter("encodingFilter",
new CharacterEncodingFilter());
encodingFilter.setInitParameter("encoding", "UTF-8");
encodingFilter.setInitParameter("forceEncoding", "true");
encodingFilter.addMappingForUrlPatterns(null, false, "/*");
// 用来非Controller层获取HttpServletRequest
servletContext.addListener(RequestContextListener.class);
servletContext.addListener(ConfigListener.class);
//防止xss攻击的filter
FilterRegistration.Dynamic xssFilter = servletContext.addFilter("xssSqlFilter",
new XssFilter());
xssFilter.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), false, "/*");
super.onStartup(servletContext);
}
/**
* 添加其他servlet
*
* @param servletContext
*/
@Override
protected void registerDispatcherServlet(ServletContext servletContext) {
super.registerDispatcherServlet(servletContext);
try {
ServletRegistration.Dynamic dynamic = servletContext.addServlet("DruidStatView", StatViewServlet.class);
dynamic.addMapping("/druid/*");
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
...
...
@@ -212,14 +117,6 @@ public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServlet
@Import({ControllerAopConfig.class})
public class SpringMvcConfig extends WebMvcConfigurerAdapter {
// beetl的配置
@Bean(initMethod = "init")
public BeetlConfiguration beetlConfiguration() {
BeetlConfiguration beetlConfiguration = new BeetlConfiguration();
beetlConfiguration.setConfigFileResource(new ClassPathResource("beetl.properties"));
return beetlConfiguration;
}
// beetl的视图解析器
@Bean
public BeetlSpringViewResolver beetlViewResolver() {
...
...
@@ -235,86 +132,6 @@ public class SpringMvcConfig extends WebMvcConfigurerAdapter {
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
// 文件上传用的resolver
@Bean
public MultipartResolver multipartResolver() {
return new StandardServletMultipartResolver();
}
// 校验器的配置
@Bean
public LocalValidatorFactoryBean validator(ReloadableResourceBundleMessageSource messageSource) {
LocalValidatorFactoryBean localValidatorFactoryBean = new LocalValidatorFactoryBean();
localValidatorFactoryBean.setProviderClass(HibernateValidator.class);
localValidatorFactoryBean.setValidationMessageSource(messageSource);
return localValidatorFactoryBean;
}
// 国际化消息资源文件配置(本系统中主要用于显示/错误消息定制)
@Bean
public ReloadableResourceBundleMessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasenames("classpath:org/hibernate/validator/ValidationMessages");
messageSource.setUseCodeAsDefaultMessage(false);
messageSource.setDefaultEncoding("UTF-8");
messageSource.setCacheSeconds(60);
return messageSource;
}
// 配置全局的验证器实例
@Override
public Validator getValidator() {
return this.validator(messageSource());
}
// 配置spring mvc的拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
}
// messageConverter
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(byteMsgConverter());
converters.add(stringHttpMessageConverter());
converters.add(fastJsonHttpMessageConverter());
super.configureMessageConverters(converters);
}
@Bean
public ByteArrayHttpMessageConverter byteMsgConverter() {
return new ByteArrayHttpMessageConverter();
}
@Bean
public StringHttpMessageConverter stringHttpMessageConverter() {
StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter(
Charset.forName("UTF-8"));
List<MediaType> list = new ArrayList<MediaType>();
list.add(MediaType.TEXT_PLAIN);
stringHttpMessageConverter.setSupportedMediaTypes(list);
return stringHttpMessageConverter;
}
@Bean
public FastJsonHttpMessageConverter4 fastJsonHttpMessageConverter() {
FastJsonHttpMessageConverter4 convert = new FastJsonHttpMessageConverter4();
List<MediaType> list = new ArrayList<MediaType>();
list.add(MediaType.TEXT_HTML);
list.add(MediaType.APPLICATION_JSON_UTF8);
convert.setSupportedMediaTypes(list);
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setFeatures(Feature.AllowArbitraryCommas, Feature.AllowUnQuotedFieldNames,
Feature.DisableCircularReferenceDetect);
fastJsonConfig.setSerializerFeatures(SerializerFeature.WriteMapNullValue,
SerializerFeature.WriteNullStringAsEmpty);
fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
convert.setFastJsonConfig(fastJsonConfig);
return convert;
}
}
```
...
...
src/main/java/project/generator/MpGenerator.java
View file @
3102993e
...
...
@@ -69,9 +69,9 @@ public class MpGenerator {
pc
.
setEntity
(
"com.stylefeng.guns.persistence.model"
);
pc
.
setMapper
(
"com.stylefeng.guns.persistence.dao"
);
pc
.
setXml
(
"com.stylefeng.guns.persistence.dao.mapping"
);
pc
.
setService
(
"TTT"
);
//本项目没用
pc
.
setServiceImpl
(
"TTT"
);
//本项目没用
pc
.
setController
(
"TTT"
);
//本项目没用
pc
.
setService
(
"TTT"
);
//本项目没用
,生成之后删掉
pc
.
setServiceImpl
(
"TTT"
);
//本项目没用
,生成之后删掉
pc
.
setController
(
"TTT"
);
//本项目没用
,生成之后删掉
mpg
.
setPackageInfo
(
pc
);
// 注入自定义配置,可以在 VM 中使用 cfg.abc 设置的值
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment