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
对象  
 - ORM(对象关系映射)是Java开发必备了,就是把数据库中一条数据映射为一个Bean对象,一个数据库表映射为一个List
 - 支持ActiveRecord模式
- ActiveRecord思想:就是把数据库中一条数据映射为一个Map
对象。一个数据库表映射为一个List  
 - ActiveRecord思想:就是把数据库中一条数据映射为一个Map
 - 应该以SQL为基准,并提供一种优雅的动态SQL实现
- 关系型数据库是绕不过SQL的,那就是规范,而且Web开发种SQL都极其复杂,所以以SQL为基准是必须的,不需要用Java去模拟一种蹩脚的SQL实现。
 
 - 好的架构设计,好的扩展性,(提供开关式插件)   
- 便于拔插像缓存、事物、sql过滤等其他特性功能
 
 
如何使用?
1.添加配置文件:Maven项目中在src/main/resources目录下添加db.setting文件(非Maven项目添加到ClassPath中即可):
## db.setting文件driver = com.mysql.cj.jdbc.Driverurl = jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=GMTuser = rootpass = root## 可选配置# 是否在日志中显示执行的SQLshowSql = true# 是否格式化显示的SQLformatSql = false# 是否显示SQL参数showParams = true# 打印SQL的日志等级,默认debug,可以是info、warn、errorsqlLevel = debug#### 关于多数据源配置,后边有说明
然后引入MySQL JDBC驱动jar
<!--mysql数据库驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency>
引入jar:该代码还未提交Maven仓库,近期提交,暂时您需要下载源码,然后mvn package 打包为一个jar
我已经打包好了一个 https://github.com/dakuohao/sqlcool/releases/tag/v1.0.1
Maven使用,复制该jar到你的项目
<dependency><groupId>com.github.dakuohao</groupId><artifactId>sql</artifactId><version>1.0.0-SNAPSHOT</version><scope>system</scope><systemPath>${project.basedir}/src/main/resources/lib/sql-1.0.0-SNAPSHOT.jar</systemPath></dependency>
备注说明:本工具底层使用Hutool工具类(Hutool是一个工具类集合,用来代替你项目中的utils包,很方便)。hutool本身提供了多种数据库连接池支持,故本工具的使用跟hutool类似,只需要添加一个数据库配置文件即可,就这么简单。本工具只对Hutool做增强,不做修改,完全兼容,故hutool的老用户可以放心大胆的引入,不会冲突。
快速开始使用
//模拟前端传来的数据user.setName("张三");user.setAge(18);//添加并返回自增主键user.insert();//通过id修改user.updateById();//通过id删除user.deleteById();//复杂查询加分页Page page = new Page(1,10,"name desc,age asc");Page result = Sql.sql("SELECT * FROM `user` WHERE") //创建sql.append(StrUtil.isNotEmpty(user.getName()), "and `name` LIKE #{name}") //动态拼接sql.append(user.getAge() > 0, "AND age >${age}").setParams(user) //设置参数.page(page); //分页查询
集成Spring-Boot
与上述方式一致,优点是不需要写service层和dao层了,项目中只有Controller和Entity。
我写了一个demo,参考这里:https://github.com/dakuohao/spring-boot-sqlcool-demo
用法示例:
@Api(tags = "我的测试-用户管理")@RestController@RequestMapping("testUser")public class MyTestController {@ApiOperation("添加用户")@PostMapping("add")public R add(@RequestBody User user) {return R.ok(user.insert());}@ApiOperation("多种条件分页查询")@PostMapping("page")public R page(@RequestBody Page page) {//模拟前端传来的数据:按照名称和年龄查询User user = new User();user.setName("张三" + "%");user.setAge(18);Page result = Sql.sql("SELECT * FROM `user` WHERE").append(StrUtil.isNotEmpty(user.getName()), "and `name` LIKE #{name}").append(user.getAge() > 0, "AND age >${age}").setParams(user).page(page);return R.ok(result);}}


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