java beetl输出demo_Beetl 快速入门
简单快速了解
Beetl 是前端视图填充数据的工具,是个页面模板,可以像 el 表达式那样操作数据,jsp 那样公共代码引用,很多好用的方法。官方模板对比:
清楚一点,beetl 很好用,但是用 beetl,最好就不要再用 jsp 什么的模板了。
BeetlSQL 操作数据库的框架,类似 Hibernate 那样直接通过对象操作数据的增删改查,简单操作,而且,像 Mybatis 那样侧重 sql,你可以在 md 文件(就是 mapper.xml)修改优化 sql 语句,而且 sql 语句的拼接判断语法,可以用 beetl 中的方法表达式,类似 js 使用很方便。官方性能对比:
快速入门开发
环境:
jdk8
maven 3.5.4
Spring5 快速接入
Beetl 接入
1.新建 maven 项目,pom.xml 文件:
1.8
1.8
1.8
UTF-8
5.0.8.RELEASE
1.2.17
1.6.11
javax.servlet
javax.servlet-api
3.1.0
provided
org.springframework
spring-context
${spring.version}
org.springframework
spring-test
${spring.version}
org.springframework
spring-core
${spring.version}
org.springframework
spring-beans
${spring.version}
org.springframework
spring-web
${spring.version}
org.springframework
spring-webmvc
${spring.version}
org.springframework
spring-expression
${spring.version}
org.springframework
spring-context-support
${spring.version}
org.springframework
spring-jdbc
${spring.version}
log4j
log4j
${log4j.version}
com.ibeetl
beetl
2.8.5
ROOT
org.apache.tomcat.maven
tomcat7-maven-plugin
2.1
UTF-8
8080
/
2.java 代替 web.xml的启动类 配置:
public class ApplicationInit implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) {
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.register(AppConfig.class);
context.setServletContext(servletContext);
ServletRegistration.Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(context));
servlet.setLoadOnStartup(1);
servlet.addMapping("/");
servlet.setAsyncSupported(true);
}
}
3.springmvc配置文件用 java 配置:
@Configuration
@EnableWebMvc
@ComponentScan(value = "com.*")
@PropertySource(value = "classpath:config.properties")
public class AppConfig implements WebMvcConfigurer{
private static final Logger logger = LoggerFactory.getLogger(AppConfig.class);
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/statics/**")
.addResourceLocations("/statics")
.setCachePeriod(31556926);
}
/***
* beetl配置
*/
@Bean(name = "beetlConfig", initMethod = "init")
public BeetlGroupUtilConfiguration getBeetlGroupUtilConfiguration() {
logger.info("##### GENERATE BeetlGroupUtilConfiguration BEAN #####");
BeetlGroupUtilConfiguration beetlGroupUtilConfiguration = new BeetlGroupUtilConfiguration();
beetlGroupUtilConfiguration.setRoot("/WEB-INF/view");
return beetlGroupUtilConfiguration;
}
/**
* beetl视图解析器
*
* @return
*/
@Bean(name = "viewResolver")
public BeetlSpringViewResolver getBeetlSpringViewResolver(BeetlGroupUtilConfiguration beetlConfig) {
logger.info("##### GENERATE BeetlSpringViewResolver BEAN #####");
BeetlSpringViewResolver beetlSpringViewResolver = new BeetlSpringViewResolver();
beetlSpringViewResolver.setConfig(beetlConfig);
;
beetlSpringViewResolver.setContentType("text/html;charset=UTF-8");
beetlSpringViewResolver.setSuffix(".html");
return beetlSpringViewResolver;
}
}
4.测试,写一个 Controller,向 request 放入属性,解析视图:
controller
@GetMapping("/")
public String test(HttpServletRequest req) {
req.setAttribute("test", "SUCCESS");
return "index";//返回 /WEB-INF/view 下的 index.html
}
index.html
首页
Hello
${test}
请求页面显示:
这样,spring5 已经整合了 beetl,好像没啥特别的好,没有对比就没有伤害,来个代码显示 beetl 的好用:
@for(user in users){
${user.name}${user.age}
@}elsefor{
没有数据
@}
用
${user.name}${user.age}
额不知道写对了没,恩还是看个人喜好吧,@是 beet 语法的开始定界符,结束定界符是回车,默认不是这个,可以在 classpath 下的 beetl.properties 中修改:
DELIMITER_STATEMENT_START=@
DELIMITER_STATEMENT_END=
BeetlSQL 接入
1.在 pom 中添加 beetlsql 和数据源的依赖:
1.8
1.8
1.8
UTF-8
5.0.8.RELEASE
1.2.17
1.6.11
javax.servlet
javax.servlet-api
3.1.0
provided
org.springframework
spring-context
${spring.version}
org.springframework
spring-test
${spring.version}
org.springframework
spring-core
${spring.version}
org.springframework
spring-beans
${spring.version}
org.springframework
spring-web
${spring.version}
org.springframework
spring-webmvc
${spring.version}
org.springframework
spring-expression
${spring.version}
org.springframework
spring-context-support
${spring.version}
org.springframework
spring-jdbc
${spring.version}
org.aspectj
aspectjrt
${aspectj.version}
org.aspectj
aspectjweaver
${aspectj.version}
mysql
mysql-connector-java
5.0.5
com.alibaba
druid
1.0.15
log4j
log4j
${log4j.version}
com.ibeetl
beetl
2.8.5
com.ibeetl
beetlsql
2.10.30
ROOT
org.apache.tomcat.maven
tomcat7-maven-plugin
2.1
UTF-8
8080
/
注意:beetlsql 的版本是 2.10.30,如果用之前的版本,太早的不能逆向生成 dao,有些会有不兼容的情况,如 beetlsql-2.10.29+druid-1.1.10 会产生SQLFeatureNotSupportedException 异常等。连接
现在可以测试逆向生成 pojo 和 mapper 了:
新建一个测试类:
public static void main(String[] args) throws Exception {
ConnectionSource source = ConnectionSourceHelper.getSimple("com.mysql.jdbc.Driver", "jdbc:mysql://127.0.0.1:3306/catenate?useUnicode=true&characterEncoding=utf8&useSSL=false", "root", "root");
DBStyle mysql = new MySqlStyle();
// sql语句放在classpagth的/mapper 目录下
SQLLoader loader = new ClasspathLoader("/mapper");
// 数据库命名跟java命名一样,所以采用DefaultNameConversion,还有一个是UnderlinedNameConversion,下划线风格的,
UnderlinedNameConversion unc = new UnderlinedNameConversion();
// 最后,创建一个SQLManager,DebugInterceptor 不是必须的,但可以通过它查看sql执行情况
SQLManager sqlManager = new SQLManager(mysql,loader,source,unc, new Interceptor[]{new DebugInterceptor()});
// sqlManager.genPojoCodeToConsole("bg_admin"); //快速生成,显示到控制台
// 或者直接生成java文件
//pojo代码生成配置
GenConfig config = new GenConfig();
//忽略表前缀bg_admin默认为BgAdmin,忽略bg为Admin
config.setIgnorePrefix("bg");
//dao代码生成配置,无参构造会有默认的模板
MapperCodeGen mapper = new MapperCodeGen();
String mapperTemplatePath = mapper.getMapperTemplate();
//有参构造出传入的是dao生成所在的包,但是没有模板,生成后是空白
mapper=new MapperCodeGen("com.catenate.dao");
//把有参构造的模板位置,放入有参构造,这样可以设置dao的生成位置,又不会空白
mapper.setMapperTemplate(mapperTemplatePath);
//添加Dao代码生成
config.codeGens.add(mapper);
sqlManager.setBaseMapper(BaseMapper.class);
//生成所有,慎用,会覆盖
sqlManager.genALL("com.catenate.pojo", config, null);
}
其实上面代码可以直接些模板位置,就在beetlsql依赖包下,可以写成下面这样:
MapperCodeGen mapper = new MapperCodeGen("com.catenate.dao");
mapper.setMapperTemplate(new GenConfig().getTemplate("/org/beetl/sql/ext/gen/mapper.btl"));
生成文件:
小测一下:
ConnectionSource source = ConnectionSourceHelper.getSimple("com.mysql.jdbc.Driver", "jdbc:mysql://127.0.0.1:3306/catenate?useUnicode=true&characterEncoding=utf8&useSSL=false", "root", "root");
DBStyle mysql = new MySqlStyle();
// sql语句放在classpagth的/sql 目录下
SQLLoader loader = new ClasspathLoader("/mapper");
// 数据库命名跟java命名一样,所以采用DefaultNameConversion,还有一个是UnderlinedNameConversion,下划线风格的,
UnderlinedNameConversion unc = new UnderlinedNameConversion();
// 最后,创建一个SQLManager,DebugInterceptor 不是必须的,但可以通过它查看sql执行情况
SQLManager sqlManager = new SQLManager(mysql,loader,source,unc, new Interceptor[]{new DebugInterceptor()});
//使用内置sql查询用户
int id = 1;
Admin admin = sqlManager.unique(Admin.class,id);
System.out.println("time==>"+admin.getCreateTime());
AdminDao mapper = sqlManager.getMapper(AdminDao.class);
Admin single = mapper.single(1);
System.out.println("password==>"+single.getPassword());
beetlSql的核心就是SQLManager,包含很多方法,可以阅读官网文档
2.添加 java 配置文件,添加数据源配置,和 beetlsql 的配置:
@Configuration
@PropertySource({"classpath:config.properties"})
public class DataSourceConfig {
@Value("${datasource.exam.url}")
private String examUrl;
@Value("${datasource.exam.username}")
private String examUserName;
@Value("${datasource.exam.password}")
private String examPassword;
@Value("${datasource.maxActive}")
private int maxActive;
@Value("${datasource.initialSize}")
private int initialSize;
@Value("${datasource.maxWaitMillis}")
private long maxWaitMillis;
@Value("${datasource.minIdle}")
private int minIdle;
@Value("${datasource.timeBetweenEvictionRunsMillis}")
private long timeBetweenEvictionRunsMillis;
@Value("${datasource.minEvictableIdleTimeMillis}")
private long minEvictableIdleTimeMillis;
@Value("${datasource.validationQuery}")
private String validationQuery;
@Value("${datasource.testWhileIdle}")
private boolean testWhileIdle;
@Value("${datasource.testOnBorrow}")
private boolean testOnBorrow;
@Value("${datasource.testOnReturn}")
private boolean testOnReturn;
@Bean(value = "examDB")
@Primary
public DataSource getExamDataSource(){
DruidDataSource druidDataSource=new DruidDataSource();
druidDataSource.setName("examDB");
druidDataSource.setUrl(examUrl);
druidDataSource.setUsername(examUserName);
druidDataSource.setPassword(examPassword);
//druidDataSource配置
druidDataSource.setMaxActive(maxActive);
druidDataSource.setInitialSize(initialSize);
druidDataSource.setMaxWait(maxWaitMillis);
druidDataSource.setMinIdle(minIdle);
druidDataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
druidDataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
druidDataSource.setValidationQuery(validationQuery);
druidDataSource.setTestWhileIdle(testWhileIdle);
druidDataSource.setTestOnBorrow(testOnBorrow);
druidDataSource.setTestOnReturn(testOnReturn);
return druidDataSource;
}
}
@Configuration
public class SQLManagerConfig {
@Bean(name = "examSqlManager")
@Primary
public SqlManagerFactoryBean getSqlManagerFactoryBean(@Qualifier("examDB")DataSource master){
SqlManagerFactoryBean factoryBean=new SqlManagerFactoryBean();
BeetlSqlDataSource source=new BeetlSqlDataSource();
source.setMasterSource(master);
factoryBean.setCs(source);
factoryBean.setDbStyle(new MySqlStyle());
//开启驼峰
factoryBean.setNc(new UnderlinedNameConversion());
//sql文件路径
factoryBean.setSqlLoader(new ClasspathLoader("/mapper"));
return factoryBean;
}
/**
* 配置包扫描
* @return
*/
@Bean(name = "examSqlScannerConfigurer")
public BeetlSqlScannerConfigurer getBeetlSqlScannerConfigurer() {
BeetlSqlScannerConfigurer conf = new BeetlSqlScannerConfigurer();
conf.setBasePackage("com.catenate.dao");
conf.setDaoSuffix("Dao");
conf.setSqlManagerFactoryBeanName("examSqlManager");
return conf;
}
}
3.web测试
修改 Controller
@Autowired
private SQLManager sqlManager;
@Autowired
private AdminDao adminDao;
@GetMapping("/")
public String test(HttpServletRequest req) {
// AdminDao adminDao=null;
// try {
// adminDao = sqlManager.getMapper(AdminDao.class);
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
req.setAttribute("test", adminDao.single(1));
return "index";
}
可以直接注入Dao,或者注入 SQLManager,当 Dao 的方法满足不了的时候,可以用 SQLManager 来执行,SQLManager包含 Dao的所有方法
修改 index.html
首页
Hello
${test.name}
访问,页面显示
admin,就是从数据库 bg_admin中查询出来的主键为1的数据。
目录结构:
Spring Boot 快速接入
深入了解
待续。。。
java beetl输出demo_Beetl 快速入门相关推荐
- 好程序员Java培训分享如何快速入门Java编程
好程序员Java培训分享如何快速入门Java编程,作为老牌编程语言,Java拥有广阔的市场应用,企业对Java人才的需求一直居高不下.有很多非专业.零基础的人想要学习Java却不知道怎么快速入门,接下 ...
- android java教程_[Java教程]Android开发快速入门
[Java教程]Android开发快速入门 0 2020-12-22 18:01:40 Xamarin.Android 应用程序剖析 以下屏幕截图列出了解决方案的内容. 下面是一个解决方案资源管理器, ...
- java akka 教程_快速入门 Akka Java 指南
快速入门 Akka Java 指南 Akka 是一个用于在 JVM 上构建高并发.分布式和容错的事件驱动应用程序的运行时工具包.Akka 既可以用于 Java,也可以用于 Scala.本指南通过描述 ...
- java beetle_Beetle Web框架快速入门.pdf
BeetleWeb框架快速入门 简介1 运行环境1 安装配置1 入门示例2 简介 BeetleWeb是一个基于J2EE标准Servlet 容器技术构建的请求驱动式的MVC 快速开发 Web框架.它功能 ...
- Java Persistence API:快速入门
各位读者好! 在我的一些朋友提出无数请求之后,我决定写一篇关于Java Persistence API的简短文章. 面向对象的编程范式是当今最流行和使用最广泛的模型,它具有无缝建模现实生活实体的能 ...
- Java任务调度之Quartz快速入门
首先所谓的任务调度指的是软件系统在从某个时间节点开始,以固定的频率,除去特定的某些时间段,定期执行某项任务,比如可以在某个夜深人静的时候做一些大批量的文件传输.备份等耗费极大资源的工作,那么通过这个概 ...
- java fx 教程_JavaFX快速入门
1- 前提条件 在本文中,将学习如何在 Eclipse IDE 开发和执行JavaFX编程. e(fx)eclipse e(fx)eclipse是一组工具和必要的库,它们帮助您执行JavaFX编程,确 ...
- 黑马JAVA P182 TCP通信快速入门
package com.itheima.d5_socket1;import java.io.IOException; import java.io.OutputStream; import java. ...
- Java如何学才能快速入门(零基础入门)
对于初入Java的伙伴们来说,都会有一个疑惑?我适合学习编程吗? 编程入门遇到难题的时候想到过放弃,当你写完一个程序的时候感到内心的欣慰,这都取决你自己. 对于初学者来说(或者每一种编程语言)都会有这 ...
- 【Java】流(Stream)快速入门
本文是面向Java初学者的流(Stream)学习指导教程.文章内容偏向怎么用,而弱化其诞生背景.流的概念.内部原理等说明解释性的语段. 主要内容: Optional 创建流 操作流 收集流 目录 什么 ...
最新文章
- 使用机智云APP控制战舰V3 (转)
- 面对996,程序员如何利用“碎片时间”涨薪?
- React-项目-引入外部的样式(14)
- linux中python如何调用matlab的数据_?如何在Python中加入多个数据帧?
- Android IPC机制(五)用Socket实现跨进程聊天程序
- java之的读取文件大全
- Note that ‘/home/w/.local/share‘ is not in the search pathset by the XDG_DATA_HOME and XDG_DATA_DIRS
- tolua集成lua-protobuf库
- dell服务器设置bios设置u盘启动不了系统,详解戴尔通过BIOS设置U盘启动的技巧
- 脱壳之aspack压缩壳
- SAP mbew 标准价和移动平均价
- 论文笔记-对话系统综述
- iperf for linux 使用方法
- imu matlab,IMU姿态解算matlab
- 【BPF入门系列-4】如何在 BPF 程序中正确地按照 PID 过滤?
- 深析 | 手机摄像产业趋势—多摄/TOF/高倍变焦或成行业新风口
- C语言初学知识准备(Linux方面)
- 闲话网名之“J0ker”
- 北华大学计算机考研资料汇总
- Tenth season second episode,Ross is fine about Rachel and Joey?Chandler and Monica e going to adopt?
热门文章
- python--mysql创建数据库
- linux种子搜索关键字,基于 DHT 网络的磁力链接和BT种子的搜索引擎架构
- xp系统共享文件夹免密码访问设置
- 情怀java手机网游_Java开发游戏马里奥,就要码出我们这一代人的情怀
- 09.第十章.项目沟通和干系人管理
- Word/Excel快捷键F4(重复上次操作)失效的解决办法
- 速度曲线规划 ---- 梯形速度曲线
- Magick.NET图片处理:解决png转jpg背景色为黑色的问题(设置背景色)
- js禁止中文输入 最简洁的【禁止输入中文】
- c# 使用正则表达式 提取章节小说正文全本篇