sql是一个数据库操作工具,极致简洁、快速、高效、稳定。
永久开源免费!
**

为什么重复造轮子?

因为市面上没发现有很好用的Java操作数据库的工具或框架
Mybatis太繁琐,在XML里写动态SQL太蠢且复杂
JPA太重,学习成本也过高,复杂查询使用极复杂,效率低下
Github搜索一圈,没有我想要的工具,so……自己写
源码地址 https://github.com/dakuohao/sqlcool
使用依赖:https://www.hutool.cn/

我想要的是什么?

  • 极致高效
    • Java中最快的应该是JDBC了,那就基于JDBC封装,为了效率我甚至尽量不使用或少使用反射(虽然JDK已经把反射优化的很好了)。
  • 极致稳定
    • 提供100%的单元测试,代码要规范,注释要全面,保证代码的健壮性就是保证工具的稳定性。
  • 极致简单
    • 开发者开箱即用,不用看文档,看代码就知道怎么用。是一个工具类而不是框架,引入即用,设计思想是静态方法大于对象面向接口大于面向对象,开发者直接使用(而不需要先new一个对象再使用)
  • 支持ORM(对象关系映射)
    • ORM(对象关系映射)是Java开发必备了,就是把数据库中一条数据映射为一个Bean对象,一个数据库表映射为一个List对象
  • 支持ActiveRecord模式
    • ActiveRecord思想:就是把数据库中一条数据映射为一个Map对象。一个数据库表映射为一个List>。由于Map写着费劲,且get对象需要类型转换,所以我封装了一个Entity(本质就是一个LinkHashMap)来代替Map,方便使用。
  • 应该以SQL为基准,并提供一种优雅的动态SQL实现
    • 关系型数据库是绕不过SQL的,那就是规范,而且Web开发种SQL都极其复杂,所以以SQL为基准是必须的,不需要用Java去模拟一种蹩脚的SQL实现。
  • 好的架构设计,好的扩展性,(提供开关式插件)
    • 便于拔插像缓存、事物、sql过滤等其他特性功能

如何使用?

1.添加配置文件:Maven项目中在src/main/resources目录下添加db.setting文件(非Maven项目添加到ClassPath中即可):

  1. ## db.setting文件
  2. driver = com.mysql.cj.jdbc.Driver
  3. url = jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT
  4. user = root
  5. pass = root
  6. ## 可选配置
  7. # 是否在日志中显示执行的SQL
  8. showSql = true
  9. # 是否格式化显示的SQL
  10. formatSql = false
  11. # 是否显示SQL参数
  12. showParams = true
  13. # 打印SQL的日志等级,默认debug,可以是info、warn、error
  14. sqlLevel = debug
  15. #### 关于多数据源配置,后边有说明
  1. 然后引入MySQL JDBC驱动jar

    1. <!--mysql数据库驱动 -->
    2. <dependency>
    3. <groupId>mysql</groupId>
    4. <artifactId>mysql-connector-java</artifactId>
    5. <version>${mysql.version}</version>
    6. </dependency>
  2. 引入jar:该代码还未提交Maven仓库,近期提交,暂时您需要下载源码,然后mvn package 打包为一个jar

我已经打包好了一个 https://github.com/dakuohao/sqlcool/releases/tag/v1.0.1
image.png
Maven使用,复制该jar到你的项目

  1. <dependency>
  2. <groupId>com.github.dakuohao</groupId>
  3. <artifactId>sql</artifactId>
  4. <version>1.0.0-SNAPSHOT</version>
  5. <scope>system</scope>
  6. <systemPath>${project.basedir}/src/main/resources/lib/sql-1.0.0-SNAPSHOT.jar</systemPath>
  7. </dependency>

备注说明:本工具底层使用Hutool工具类(Hutool是一个工具类集合,用来代替你项目中的utils包,很方便)。hutool本身提供了多种数据库连接池支持,故本工具的使用跟hutool类似,只需要添加一个数据库配置文件即可,就这么简单。本工具只对Hutool做增强,不做修改,完全兼容,故hutool的老用户可以放心大胆的引入,不会冲突。

快速开始使用

  1. //模拟前端传来的数据
  2. user.setName("张三");
  3. user.setAge(18);
  4. //添加并返回自增主键
  5. user.insert();
  6. //通过id修改
  7. user.updateById();
  8. //通过id删除
  9. user.deleteById();
  10. //复杂查询加分页
  11. Page page = new Page(1,10,"name desc,age asc");
  12. Page result = Sql.sql("SELECT * FROM `user` WHERE") //创建sql
  13. .append(StrUtil.isNotEmpty(user.getName()), "and `name` LIKE #{name}") //动态拼接sql
  14. .append(user.getAge() > 0, "AND age >${age}")
  15. .setParams(user) //设置参数
  16. .page(page); //分页查询

集成Spring-Boot

与上述方式一致,优点是不需要写service层和dao层了,项目中只有Controller和Entity。
我写了一个demo,参考这里:https://github.com/dakuohao/spring-boot-sqlcool-demo

用法示例:

  1. @Api(tags = "我的测试-用户管理")
  2. @RestController
  3. @RequestMapping("testUser")
  4. public class MyTestController {
  5. @ApiOperation("添加用户")
  6. @PostMapping("add")
  7. public R add(@RequestBody User user) {
  8. return R.ok(user.insert());
  9. }
  10. @ApiOperation("多种条件分页查询")
  11. @PostMapping("page")
  12. public R page(@RequestBody Page page) {
  13. //模拟前端传来的数据:按照名称和年龄查询
  14. User user = new User();
  15. user.setName("张三" + "%");
  16. user.setAge(18);
  17. Page result = Sql.sql("SELECT * FROM `user` WHERE")
  18. .append(StrUtil.isNotEmpty(user.getName()), "and `name` LIKE #{name}")
  19. .append(user.getAge() > 0, "AND age >${age}")
  20. .setParams(user)
  21. .page(page);
  22. return R.ok(result);
  23. }
  24. }

image.png
image.png

(其他框架类似,举一反三)
**