2 Star 8 Fork 3

Artlongs / fluentsql

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

Fluent-SQL Maven Central

我们不生产SQL,我们只是SQL的搬运工!

Lambda 风格的流式 SQL 查询工具,支持多表 lefjoin,from(子表),sum case , iif ,group by(子表属性)... 集成了SQL2O,JDBCTEMPLATE实现CRUD,分页查询等. 自我感觉良好,有了这个小工具,可以忘却 Hibernate,Mybatis...

Fluent-SQL 优势所在:

  1. 无须编写实体类,您只需创建简单的 POJO 一一对应数据表字段,即可.
  2. 您无须关心各种多对多,一对多等各种 ORM 关联配置,您懂得使用 Left-Join 即可以关联任意数据表.
  3. Fluent-SQL 自带了防 SQL 注入.
  4. 在不考虑缓存的情况下,有那一种 ORM 方案会比原生 SQL 快呢?

开发思历

世面上有的 ORM 我多数都用过,用得最多的是 Hibernate,Mybatis. 日子久了我就在想有没有一种 ORM 既易用而又高性能的呢?鱼与掌真的不能兼得吗? 要说高性能,原生SQL肯定是性能最高,可是原生SQL却有硬代码,并且因为前端的查询条件的可选性,自己手动拼接查询条件时,必然会有许许多多的 IF(null!=xx){sql}... , 这个缺点 Hibernate,Mybatis 一样也会有. 这催发了我 开发出 fluent-sql 这个项目, 这只是一个工具类, 却绝对会让你大叫: SHUANG! SHUANG! SHUANG!

fluent-sql + sql2o ,就是性能与易用的经典示范!

SQL2O 项目地址 : https://github.com/aaberg/sql2o

约定:

  1. 数据库字段默认风格是全小写加下划线分隔的 underline 风格
  2. 使用 Attr.Property类型入参 fun(x::getMethod) 代表是使用默认的主表,
  3. 使用 Attr.parse(x::getMethod) 入参,则使用你指定的 x 做为从表.
  4. 不指定 spell 默认是把字段 AS 为驼峰格式
  5. 如果选择的字段出现在子表查询里则要指定拼写为 Spell.UNDERLINE(受限于第一条约定)

性能测试

    v0.0.8 新增加FluentSql 自己的基于原生JAVA JDBC的底层数据访问,可以完全不依赖第三方ORM实现CRUD,查询效率得到重大的提升。
测试结果如下(同一批数据,各ORM随机查询1000次):
======================================================================
RUNNING 1000 ITERATIONS THAT LOAD UP A POST ENTITY
Select Results
-------------------------
HandCoded took 11ms
FluentSql took 13ms (18.18% slower)
Sql2oTypical took 15ms (36.36% slower)
ApacheDbUtilsTypical took 19ms (72.73% slower)
Sql2oNameType took 22ms (100.00% slower)
BeetlSqlTypical took 25ms (127.27% slower)
FluentSqlNameType took 32ms (190.91% slower)
JDBI took 44ms (300.00% slower)
MyBatis took 51ms (363.64% slower)
SpringJdbcTemplateTypical took 56ms (409.09% slower)
SpringJdbcTemplateNameType took 60ms (445.45% slower)
HibernateTypical took 66ms (500.00% slower)
JOOQ took 81ms (636.36% slower)
======================================================================
测试用例在:fluentsql-core包test目录下的PojoPerformanceTest.class

语法示例:

SELECT user.user_name AS userName,dept.dept_name AS deptName FROM `user` AS user  
LEFT JOIN `dept` ON user.dept_id = dept.id 
WHERE (LOCATE (user.user_name,'jack')>0)
GROUP BY user.dept_id HAVING (user.dept_id>0) 
ORDER BY user.dept_id ASC,user.user_name DESC

等同与:

String sql = new Lq<>(User.class)
                .select(User::getUserName)
                .select(Attr.parse(Dept::getDeptName))
                .leftJoin(Dept.class)
                .andLike(User::getUserName, "jack")
                .group(User::getDeptId)
                .having(User::getDeptId, Qe.Opt.GT, 0)
                .asc(User::getDeptId)
                .desc(User::getUserName)
                .build();

MAVEN

增加对本项目的使用,您可以按自己项目需求只选择对子项目的依赖 fluentsql-core | fluentsql-sql2o | fluentsql-jdbctemplate

<dependency>
  <groupId>com.artfii.fluentsql</groupId>
  <artifactId>fluentsql-core</artifactId>
  <version>0.0.17.1</version>
</dependency>
<dependency>
  <groupId>com.artfii.fluentsql</groupId>
  <artifactId>fluentsql-jdbctemplate</artifactId>
  <version>0.0.17.1</version>
</dependency>
<!-- 或 fluentsql-sql2o -->
<dependency>
  <groupId>com.artfii.fluentsql</groupId>
  <artifactId>fluentsql-sql2o</artifactId>
  <version>0.0.17.1</version>
</dependency>

Version更新内容

0.0.17.1 完善读写分离以及 SQL 注入排查

MIT License Copyright (c) 2019 LiQingFeng (leeton,mailtous@163.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

我们不生产SQL,我们只是SQL的搬运工! 展开 收起
Java
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/artlongs/fluentsql.git
git@gitee.com:artlongs/fluentsql.git
artlongs
fluentsql
fluentsql
master

搜索帮助