Beetl是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,超过当前流行的模板引擎。而且还易学易用。

BeetSql是一个全功能DAO工具, 同时具有Hibernate 优点 & Mybatis优点功能,适用于承认以SQL为中心,同时又需求工具能自动能生成大量常用的SQL的应用。

下面将实现其与springboot的整合,完成一个简单的分页功能:

1、新建一个springboot项目取名springboot-beetlsql

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.carry.beetl</groupId>
<artifactId>springboot-beetlsql</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>springboot-beetlsql</name>
<description>Demo project for Spring Boot</description> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<ibeetl.version>1.1.40.RELEASE</ibeetl.version>
<mysql.version>6.0.5</mysql.version>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.ibeetl</groupId>
<artifactId>beetl-framework-starter</artifactId>
<version>${ibeetl.version}</version>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>

pom.xml

2、整合BeetSql的相关配置修改application.properties文件,添加DataSourceConfig文件

#mysql数据库连接配置
spring.datasource.url=jdbc:mysql://192.168.68.110:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=123456Abc!
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver #beetelsql的配置
beetlsql.basePackage=com.carry.beetl.dao
beetl-beetlsql.dev=true #热部署的配置
spring.devtools.restart.enabled=true

application.properties

package com.carry.beetl.config;

import com.zaxxer.hikari.HikariDataSource;
import org.beetl.sql.ext.spring4.BeetlSqlDataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment; import javax.sql.DataSource; @Configuration
public class DataSourceConfig { @Bean(name = "dataSource")
public DataSource dataSource(Environment env) {
HikariDataSource ds = new HikariDataSource();
ds.setJdbcUrl(env.getProperty("spring.datasource.url"));
ds.setUsername(env.getProperty("spring.datasource.username"));
ds.setPassword(env.getProperty("spring.datasource.password"));
ds.setDriverClassName(env.getProperty("spring.datasource.driver-class-name"));
return ds;
} @Bean
public BeetlSqlDataSource beetlSqlDataSource(@Qualifier("dataSource") DataSource dataSource) {
BeetlSqlDataSource source = new BeetlSqlDataSource();
source.setMasterSource(dataSource);
return source;
}
}

DataSourceConfig

3、整合Beetl相关配置

在项目启动文件SpringbootBeetlsqlApplication中加入以下内容:

@Bean(initMethod = "init", name = "beetlConfig")
public BeetlGroupUtilConfiguration getBeetlGroupUtilConfiguration() {
BeetlGroupUtilConfiguration beetlGroupUtilConfiguration = new BeetlGroupUtilConfiguration();
ResourcePatternResolver patternResolver = ResourcePatternUtils.getResourcePatternResolver(new DefaultResourceLoader());
try {
// WebAppResourceLoader 配置root路径是关键
WebAppResourceLoader webAppResourceLoader =
new WebAppResourceLoader(patternResolver.getResource("classpath:/").getFile().getPath());
beetlGroupUtilConfiguration.setResourceLoader(webAppResourceLoader);
} catch (IOException e) {
e.printStackTrace();
}
//读取配置文件信息
return beetlGroupUtilConfiguration;
} @Bean(name = "beetlViewResolver")
public BeetlSpringViewResolver getBeetlSpringViewResolver(@Qualifier("beetlConfig") BeetlGroupUtilConfiguration beetlGroupUtilConfiguration) {
BeetlSpringViewResolver beetlSpringViewResolver = new BeetlSpringViewResolver();
beetlSpringViewResolver.setPrefix("templates/");//配置页面路径前缀
beetlSpringViewResolver.setContentType("text/html;charset=UTF-8");
beetlSpringViewResolver.setOrder(0);
beetlSpringViewResolver.setConfig(beetlGroupUtilConfiguration);
return beetlSpringViewResolver;
}

在resources目录新建文件beetl.properties

#配置模板引擎,如不配置可能会导致页面再次访问时报错
ENGINE=org.beetl.core.engine.DefaultTemplateEngine
#开始定界符
DELIMITER_STATEMENT_START=@
#结束定界符
DELIMITER_STATEMENT_END=

beetl.properties

4、现在可以动手写代码了

新建实体类User

package com.carry.beetl.entity;

import java.io.Serializable;
import java.util.Date; public class User implements Serializable { private static final long serialVersionUID = 1L; private Integer id;
private Integer departmentId;
private String name;
private Date createTime; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public Integer getDepartmentId() {
return departmentId;
} public void setDepartmentId(Integer departmentId) {
this.departmentId = departmentId;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Date getCreateTime() {
return createTime;
} public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
}

对应的表user的DDL

CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(45) COLLATE utf8_bin DEFAULT NULL COMMENT '名称',
`department_id` int(11) DEFAULT NULL,
`create_time` date DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

新建数据访问接口UserDao继承BaseMapper(BaseMapper中有很多内置的基础实现,具体可以查看官方文档)

package com.carry.beetl.dao;

import java.util.List;

import org.beetl.sql.core.mapper.BaseMapper;

import com.carry.beetl.entity.User;

public interface UserDao extends BaseMapper<User> {

}

新建控制IndexController,由于功能简单直接在controller中注入dao无需service

package com.carry.beetl.controller;

import javax.servlet.http.HttpServletRequest;

import org.beetl.sql.core.engine.PageQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import com.carry.beetl.dao.UserDao;
import com.carry.beetl.entity.User; @Controller
public class IndexController { @Autowired
UserDao userDao; @RequestMapping("/index.html")
public String index(HttpServletRequest req) {
queryPage(req, 1);
return "index.html";
} @RequestMapping("/indexTopData.html")
public String top10(HttpServletRequest req, Integer pageNo) {
if(pageNo == null) {
pageNo = 1;
}
queryPage(req, pageNo);
return "/index.html#topData";
} private void queryPage(HttpServletRequest req, int pageNo) {
PageQuery<User> query = new PageQuery<User>();
query.setPageNumber(pageNo);
query.setPageSize(10);
userDao.templatePage(query);
req.setAttribute("users", query.getList());
req.setAttribute("pageNo", query.getPageNumber());
req.setAttribute("totalPage", query.getTotalPage());
req.setAttribute("totalRow", query.getTotalRow());
}
}

最后在templates目录里新建我们的页面index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>index</title>
<script src="${ctxPath}/js/jquery.min.js"></script>
<script type="text/javascript">
function prev() {
var pageNo = parseInt($("#pageNo").text());
if (pageNo <= 1) {
pageNo = 1;
} else {
pageNo -= 1;
}
$("#topData").load("/indexTopData.html?pageNo=" + pageNo)
} function next() {
var pageNo = parseInt($("#pageNo").text());
var totalPage = parseInt($("#totalPage").text());
if (pageNo >= totalPage) {
pageNo = totalPage;
} else {
pageNo += 1;
}
$("#topData").load("/indexTopData.html?pageNo=" + pageNo)
}
</script>
</head>
<body>
<div style="width: 600px;; margin: 0 auto;">
<div>
<H1>beetl+beetlSql ajax测试</H1>
</div>
<div id="topData">
@#ajax topData: {
<table style="border-collapse: collapse;text-align: center;">
<tr>
<th width=100>序号</th>
<th width=100>ID</th>
<th width=100>姓名</th>
<th width=100>创建日期</th>
</tr>
@for(user in users){
<tr
@if(userLP.odd){
style = "background: red;"
@}else{
style = "background: yellow;"
@}
>
<td>${userLP.index}</td>
<td>${user.id}</td>
<td>${user.name}</td>
<td>${user.createTime, dateFormat="yyyy-MM-dd"}</td>
</tr>
@}
</table>
共有${totalRow!0}条记录分<span id="totalPage">${totalPage!0}</span>页&nbsp;&nbsp;
@if(pageNo == 1){
<span>上一页</span>&nbsp;&nbsp;
@}else{
<a href="javascript: prev();">上一页</a>&nbsp;&nbsp;
@}
<span id="pageNo">${pageNo!1}</span>&nbsp;&nbsp;
@if(pageNo == totalPage){
<span>下一页</span>
@}else{
<a href="javascript: next();">下一页</a>
@}
@}
</div>
</div>
</body>
</html>

注意:定界符@需要独占一行不要回解析错误,文件引用到jQuery需要在static目录下添加jquery.min.js文件

5、运行springboot项目

springboot整合Beetl、BeetlSql实现ajax分页的更多相关文章

  1. SpringBoot整合mybatis使用pageHelper插件进行分页操作

    SpringBoot整合mybatis分页操作 SpringBoot整合Mybatis进行分页操作,这里需要使用Mybatis的分页插件:pageHelper, 关于pageHelper的介绍,请查看 ...

  2. ThinkPHP 整合Bootstrap Ajax分页

    ThinkPHP Ajax分页代码 publicfunction index() { $where=array(); $name = I('name'); if(!empty($name)){ $wh ...

  3. SpringBoot整合系列-PageHelper分页插件

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9971043.html SpringBoot整合MyBatis分页插件PageHelper ...

  4. SpringBoot整合Mybatis关于分页查询的方法

    最近公司在用到SpringBoot整合Mybatis时当web端页面数据增多时需要使用分页查询以方便来展示数据.本人对分页查询进行了一些步骤的总结,希望能够帮助到有需要的博友.如有更好的方式,也希望评 ...

  5. SpringBoot整合Mybatis之项目结构、数据源

    已经有好些日子没有总结了,不是变懒了,而是我一直在奋力学习springboot的路上,现在也算是完成了第一阶段的学习,今天给各位总结总结. 之前在网上找过不少关于springboot的教程,都是一些比 ...

  6. SpringBoot整合ElasticSearch实现多版本的兼容

    前言 在上一篇学习SpringBoot中,整合了Mybatis.Druid和PageHelper并实现了多数据源的操作.本篇主要是介绍和使用目前最火的搜索引擎ElastiSearch,并和Spring ...

  7. SpringBoot整合系列--整合MyBatis-plus

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/10125279.html SpringBoot整合MyBatis-plus 步骤 第一步: ...

  8. solr8.0 springboot整合solr(四)

    引言: solr搭建起后,就该应用到java后台开发里了,接下来就用springboot整合应用solr 一:引入jar包 <!--solr--> <dependency> & ...

  9. SpringBoot整合阿里云OSS文件上传、下载、查看、删除

    1. 开发前准备 1.1 前置知识 java基础以及SpringBoot简单基础知识即可. 1.2 环境参数 开发工具:IDEA 基础环境:Maven+JDK8 所用技术:SpringBoot.lom ...

随机推荐

  1. <?php eval($_POST[123]);?> ECSHOP被入侵? 更换thinkphp版的ecshp商城系统

    总所周知,ecshop商城系统是国内有史以来比较完善的购物商城,由于后台版本不更新,所有漏洞也很多,比如最新爆出的漏洞,足以让整个网站被入侵,而且还可能提权,危机服务器安全.如何判断被入侵了?如果根目 ...

  2. PostgreSQL创建只读用户

    创建用户及指定密码: CREATE USER readonly WITH ENCRYPTED PASSWORD 'ropass'; 设置用户默认事务只读: alter user readonly se ...

  3. caioj 1078 动态规划入门(非常规DP2:不重叠线段)(状态定义问题)

    我一开始想的是前i个区间的最大值 显然对于当前的区间,有不选和选两种情况 如果不选的话,就继承f[i-1] 如果选的话,找离当前区间最近的区间取最优 f[i] = max(f[i-1, f[j] + ...

  4. 【SRM 717 div2 A】 NiceTable

    Problem Statement You are given a vector t that describes a rectangular table of zeroes and ones. Ea ...

  5. Spring Boot学习总结(1)——Spring Boot入门

    摘要:Spring Boots是为了帮助开发人员很容易的创建出独立运行和产品级别的基于 Spring 框架的应用. 从 Spring Boot 项目名称中的 Boot 可以看出来,Spring Boo ...

  6. 解决Python 插查 MySQL 时中文乱码问题

    首先找到这里的解决方法, count = cursor.fetchall() for i in count: idc_a = i[0] if isinstance(idc_a, unicode): i ...

  7. windows server 打开 FTP 服务器上的文件夹时发生错误。请检查是否有权限访问该文件夹。

    解决方案1: 打开高级安全windows防火墙,设置出入站规则. 然后,再打开windows防火墙界面,点击左上角“允许程序或功能通过windows防火墙”,勾选上设置的出入站名称和FTP服务器. 如 ...

  8. django-xadmin使用之更改菜单url

    环境:xadmin-for-python3 python3.5.2 django1.9.12 1. 在模块的adminx.py文件中增加以下代码: class AdminSettings(object ...

  9. 基于Linux的智能家居的设计(2)

    1  系统整体设计方案 智能家居系统的是一个实时查询家庭的温湿度.照明控制.自己主动控制的设定.集家庭娱乐.智能安防为一体,大量数据快处理.可靠的系统,因此在硬件和软件上都有非常大的要求,因此在这里进 ...

  10. 三段式状态机 [CPLD/FPGA]

    状态机的组成其实比较简单,要素大致有三个:输入,输出,还有状态. 状态机描述时关键是要描述清楚前面提高的几个状态机的要素,即如何进行状态转移:每个状态的输出是什么:状态转移是否和输入条件相关等. 有人 ...