# zealot
**Repository Path**: mirrors_gspandy/zealot
## Basic Information
- **Project Name**: zealot
- **Description**: 一个轻量级的SQL和参数动态生成工具库
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-09-24
- **Last Updated**: 2025-09-20
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Zealot
[](https://travis-ci.org/blinkfox/zealot) [](http://www.javadoc.io/doc/com.blinkfox/zealot) [](http://hits.dwyl.io/blinkfox/zealot) [](https://github.com/blinkfox/zealot/issues) [](https://github.com/blinkfox/zealot/blob/master/LICENSE) [](http://search.maven.org/#artifactdetails%7Ccom.blinkfox%7Czealot%7C1.2.0%7Cjar) [](https://github.com/blinkfox/zealot/network) [](https://github.com/blinkfox/zealot/stargazers) [](https://codecov.io/gh/blinkfox/zealot)
一个简单、强大的Java动态SQL和参数生成工具库。[文档地址](https://blinkfox.github.io/zealot/)
> My life for Auir!
## 一、创建初衷
SQL对开发人员来说是核心的资产之一,在开发中经常需要书写冗长、动态的SQL,许多项目中仅仅采用Java来书写动态SQL,会导致SQL分散、不易调试和阅读。所谓易于维护的SQL应该兼有动态性和可调试性的双重特性。在Java中书写冗长的SQL,虽然能很好的做到动态性,缺大大降低了SQL本身的可调试性,开发人员必须运行项目调试打印出SQL才能知道最终的SQL长什么样。所以为了做到可调试性,开发人员开始将SQL单独提取出来存放到配置文件中来维护,这样方便开发人员复制出来粘贴到SQL工具中来直接运行,但无逻辑功能的配置文件虽然解决了可调试性的问题,却又丧失了动态SQL的能力。所以,才不得不诞生出类似于mybatis这样灵活的半ORM工具来解决这两个的问题,但众多的项目却并未集成mybaits这样的工具。
[Zealot][1]是基于Java语言开发的SQL及对应参数动态拼接生成的工具包,其核心设计目标是帮助开发人员书写和生成出具有动态的、可复用逻辑的且易于维护的SQL及其对应的参数。为了做到可调试性,就必须将SQL提取到配置文件中来单独维护;为了保证SQL根据某些条件,某些逻辑来动态生成,就必须引入表达式语法或者标签语法来达到动态生成SQL的能力。因此,两者结合才诞生了Zealot。
> **注**:zealot即狂热者,是游戏[星际争霸][2]中的单位。
## 二、主要特性
- 轻量级,jar包仅仅`72`k大小,简单、无副作用的集成和使用
- 提供了纯`Java`代码和`XML`两种方式书写维护SQL
- `Java`的方式采用流式API的方式书写动态SQL,易于书写和阅读
- `XML`的方式让SQL和Java代码解耦和,易于维护
- 具有动态性、可复用逻辑和可半调试性的优点
- 具有可扩展性,可自定义`XML`标签和处理器来完成自定义逻辑的SQL和参数生成
## 1.3.0版本新增特性
- 完善各种动态SQL操作符和XML标签的`与`、`或`、`非`的逻辑
- 新增了Zealot配置和调用的更多重载方法
- 新增了通过注解来配置自定义标签和其对应的Handler
- 新增了扫描XML文件所在位置(可多个位置,用逗号隔开,目录或具体XML文件均可),默认扫描项目资源目录下`zealot`目录及子目录下的xml文件
- 新增了`removeIfExist()`方法用来消除`where 1 = 1`等类似无用SQL片段的SQL
## 三、集成使用
### 1. 支持场景
适用于Java (web)项目,JDK1.6及以上
### 2. Maven集成
这里以Maven为例,Maven的引入方式如下:
```xml
com.blinkfox
zealot
1.3.1
```
### 3. Gradle
```bash
compile 'com.blinkfox:zealot:1.3.1'
```
### 4. SpringBoot
如果你的项目是SpringBoot2.x,那么可以直接引入Zealot的[Starter](https://github.com/blinkfox/zealot-spring-boot-starter),且几乎不需要做任何其他方面的配置即可使用,这里是[zealot-spring-boot-starter](https://github.com/blinkfox/zealot-spring-boot-starter)的引入及使用方式说明。
```xml
com.blinkfox
zealot-spring-boot-starter
```
### 3. SpringBoot
如果你的项目是`SpringBoot2.x`,那么可以直接引入Zealot的[Starter](https://github.com/blinkfox/zealot-spring-boot-starter),且几乎不需要做任何其他方面的配置即可使用,这里是[zealot-spring-boot-starter](https://github.com/blinkfox/zealot-spring-boot-starter)的引入及使用方式说明。
```xml
com.blinkfox
zealot-spring-boot-starter
```
## 四、Java链式式之ZealotKhala
在Java中书写中等长度的SQL,用`+`连接的字符串尤其是动态字符串,会导致SQL的可读性极差且拼接性能较低,在`Zealot v1.0.4`版本中提供了一个额外高效的SQL字符串链式拼接工具`Khala`(**已被弃用**),但Khala只提供拼接字符串的功能,并不具有返回动态SQL和参数的特性,便决定在`v1.1.0`版本中新增了`ZealotKhala`,`ZealotKhala`类也采用流式API的方式可以书写出更流畅的动态SQL,且会得到动态SQL的有序参数。其使用示例如下:
```java
public class ZealotKhalaTest {
/**
* 测试使用ZealotKhala书写的sql.
*/
@Test
public void testSql() {
String userName = "zhang";
String startBirthday = "1990-03-25";
String endBirthday = "2010-08-28";
Integer[] sexs = new Integer[]{0, 1};
SqlInfo sqlInfo = ZealotKhala.start()
.select("u.id, u.name, u.email, d.birthday, d.address")
.from("user AS u")
.leftJoin("user_detail AS d").on("u.id = d.user_id")
.where("u.id != ''")
.andLike("u.name", userName)
// 该doAnything方法可以在拼接期间做任何代码插入和注入,如果是Java8的话,可以转为Lamda表达式
.doAnything(true, new ICustomAction() {
@Override
public void execute(final StringBuilder join, final List