[施工中]Spring Boot集成 Beetl以及Hibernate(甚至是POI)不完全指北
[施工中]Spring Boot集成 Beetl以及Hibernate不完全指北
SpringBoot 工具集成
本文仅做集成spring boot主要工具记录。
前言
因为工作问题导致之前ECS服务器搭建后一直没有后续,在采用通用模板后工作量有适度减轻,因工作业务功能模块需要,本篇文章进度应该会更新至excel表格导出。
如有不足,希望大家批评指正。
一、Beetl
1.1 Beetl与其他知名模板引擎对比
Beetl(Bee Template Language)是一种功能强大,性能良好的模板引擎。在官网首页他们非常不要脸的放出了Beetl和其他目前知名模板引擎的性能对比图。
至于Beetl与主流模板引擎Thmeleaf的代码及性能对比,在知乎有专贴进行讨论 beetl和thymeleaf 性能比较和怎样分析? 我还没看完,由于公司框架目前是集成Beetl,所以本文档也以Beetl为例。
1.2 SpringBoot与Beetl集成
依照惯例,我们首先在pom.xml中添加如下坐标。
<dependency>
<groupId>com.ibeetl</groupId>
<artifactId>beetl</artifactId>
<version>2.9.3</version>
</dependency>
默认情况下,beetl会自动加载位于默认的配置文件,(位于/org/beetl/core/beetl-default.properties),作为初次使用新手,需要关注定界符的配置,以及模板字符集的配置就可以了
//定界符
DELIMITER_PLACEHOLDER_START=${
DELIMITER_PLACEHOLDER_END=}
DELIMITER_STATEMENT_START=<%
DELIMITER_STATEMENT_END=%>
//模板字符集
TEMPLATE_CHARSET = UTF-8
starter 自动处理以btl结尾的视图,模板根目录是Spring Boot默认的templates目录。如下配置可以修改beetl部分属性。
1.beetl-beetlsql.dev,默认为true,即自动检查模板变化
2.beetl.enabled 默认为true,集成beetl。
3.beetl.suffix 默认为btl,表示只处理视图后缀为btl的模板,比如controller里代码是“return /common/index.btl”,则能被Beetl处理,你写成"return /common/index",或者"/common/index.html",都会出现404错误。
Starter可以实现BeetlTemplateCustomize来定制Beetl
@Configuration
public MyConfig{
@Bean
public BeetlTemplateCustomize beetlTemplateCustomize(){
return new BeetlTemplateCustomize(){
public void customize(GroupTemplate groupTemplate){
}
};
}
}
使用Starter来配置已经够用,如果你想自己配置模板引擎, 通过java config来配置 beetl需要的BeetlGroupUtilConfiguration,和 BeetlSpringViewResolver,参考代码如下
@Configuration
public class BeetlConf {
@Value("${beetl.templatesPath}") String templatesPath;//模板根目录 ,比如 "templates"
@Bean(name = "beetlConfig")
public BeetlGroupUtilConfiguration getBeetlGroupUtilConfiguration() {
BeetlGroupUtilConfiguration beetlGroupUtilConfiguration = new BeetlGroupUtilConfiguration();
//获取Spring Boot 的ClassLoader
ClassLoader loader = Thread.currentThread().getContextClassLoader();
if(loader==null){
loader = BeetlConf.class.getClassLoader();
}
//beetlGroupUtilConfiguration.setConfigProperties(extProperties);//额外的配置,可以覆盖默认配置,一般不需要
ClasspathResourceLoader cploder = new ClasspathResourceLoader(loader,
templatesPath);
beetlGroupUtilConfiguration.setResourceLoader(cploder);
beetlGroupUtilConfiguration.init();
//如果使用了优化编译器,涉及到字节码操作,需要添加ClassLoader
beetlGroupUtilConfiguration.getGroupTemplate().setClassLoader(loader);
return beetlGroupUtilConfiguration;
}
@Bean(name = "beetlViewResolver")
public BeetlSpringViewResolver getBeetlSpringViewResolver(@Qualifier("beetlConfig") BeetlGroupUtilConfiguration beetlGroupUtilConfiguration) {
BeetlSpringViewResolver beetlSpringViewResolver = new BeetlSpringViewResolver();
beetlSpringViewResolver.setContentType("text/html;charset=UTF-8");
beetlSpringViewResolver.setOrder(0);
beetlSpringViewResolver.setConfig(beetlGroupUtilConfiguration);
return beetlSpringViewResolver;
}
}
值得注意的是,beetlConf.java文件的地址是需要与starter同级而不是子级的,也就是放置在主目录底下:
最后在application.properties中对Beetl的模板路径进行配置,在项目启动后会自动注入到BeetlConf.java中:
#模板路径
beetl.templatesPath=beetls
这样我们的页面就可以放置在项目/resources/beetls/路径下。
1.3 Beetl使用
在项目下一级目录中我们建立一个文件夹,例如com.yd.test.beetltset,粘贴进如下代码:
package com.yangdong.score.base;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/student")
public class StudentBaseInformation {
@RequestMapping("/base")
public String studentBase() {
return "studentbase.html"; //由于我们并没有在模板中设置html扫描的后缀,所以我们还是需要加上.html进行识别,否则会出现403错误。
}
}
这样,在项目启动后。我们输入 localhost:8081/student/base就可以访问到我们想要访问的页面
这样集成Beetl的具体步骤就如图所示,至于Beetl的使用细节则会专门写一篇文档进行介绍。
二、Hibernate
2.1 MyBatis与Hibernate区别与对比
因为相对于MyBatis,Hibernate更加的复杂,沉重。它有QBC,HQL,SQL三种查询方式,这也就意味着我们在sql语句优化时会遇到一定的困难,还要它的抽取策略,处理表的关系时也是尤为复杂。一般的中小型项目中,MyBatis的性能足以应付,所以现在中小公司大多数都会采用MyBatis这种技术来进行持久层的开发。
2.2 Hibernate集成(施工中)
周一晚上继续