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.Driver
url = jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT
user = root
pass = root
## 可选配置
# 是否在日志中显示执行的SQL
showSql = true
# 是否格式化显示的SQL
formatSql = false
# 是否显示SQL参数
showParams = true
# 打印SQL的日志等级,默认debug,可以是info、warn、error
sqlLevel = 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);
}
}
(其他框架类似,举一反三)
**