![ThinkJDBC](https://gitee.com/uploads/images/2018/0428/174620_372c5f0f_890966.png)
[![最新版本](https://img.shields.io/badge/%E6%9C%80%E6%96%B0%E7%89%88%E6%9C%AC-V1.4.6__17-green.svg?longCache=true&style=flat-square)](https://gitee.com/Leytton/ThinkJD) [![中文文档](https://img.shields.io/badge/%E4%B8%AD%E6%96%87%E6%96%87%E6%A1%A3-V1.4.6__17-green.svg?longCache=true&style=flat-square)](https://blog.csdn.net/Leytton/article/details/80021702) [![English Document](https://img.shields.io/badge/English%20Document-V1.4.2__10-yellowgreen.svg?longCache=true&style=flat-square)](https://blog.csdn.net/Leytton/article/details/80021029) [![Maven](https://img.shields.io/badge/Maven-V1.4.5__16-green.svg?longCache=true&style=flat-square)](https://mvnrepository.com/artifact/com.llqqww/thinkjdbc) [![CSDN Blog](https://img.shields.io/badge/CSDN%20Bolg-Leytton-red.svg?longCache=true&style=flat-square)](https://blog.csdn.net/Leytton)
# 1 简介
`ThinkJD`,又名`ThinkJDBC`,一个简洁而强大的开源JDBC操作库。你可以使用Java像`ThinkPHP`框架的M方法一样,`一行代码搞定数据库操作`。ThinkJD会自动管理数据库连接,默认使用完毕或程序异常都会关闭连接以免造成内存溢出。也可以设置手动关闭以复用Connection连接,无需传入连接实例参数,ThinkJD内部已做多线程安全处理,详见`【0x0A 多线程安全】`。
## 特性
- 核心jar包只有19KB
- 支持复杂SQL语句以及直接执行SQL语句
- 自动管理数据库连接
- 支持增删改查ORM映射
- 支持字段注解映射
- 主键、自增、是否ORM字段等属性配置
- 动态设置>注解设置>全局设置
- 数据库连接多线程安全
- 支持数据库连接池
- 简易的事务操作
- 支持调试模式,输出SQL语句
- 基于DBUtils,Apache出品,底层质量有保障
## 先睹为快:
```java
//数据库配置(只需调用一次)
D.setDbConfig("jdbc:mysql://127.0.0.1:3306/DbName?characterEncoding=UTF-8","root","root");
//JavaBean模式,自动获取表名、主键、自增属性、字段名和数据
User user = new User();
user.setAge(10);
user.setName("Hello");
user.setSex(true);
//插入数据
long id=D.M(user).add();
//查询数据
user=D.M(User.class).find(id);
//更新数据
user.setSex(false);
D.M(user).field("sex").save();//不指定字段名默认更新JavaBean的所有非空属性
//删除数据
D.M(user).delete();
//D.M(User.class).delete(id);
//Table模式,手动指定表名、主键、自增属性、字段名和数据
//插入数据
long id=D.M("user").field("name,weight").data("Tom",60).add();
//更新数据
D.M("user").field("name,weight").data("Tom",100).where("id=?",id).save();
//查询数据
user=D.M(User.class).find(id);
//删除数据
D.M("user").delete(id);
```
## 项目主页
https://gitee.com/Leytton/ThinkJD (码云) https://github.com/Leytton/ThinkJD (Github)
## 测试项目
https://github.com/Leytton/ThinkJD_Demo
# 2 使用方法
## 0x01 添加依赖
### 导入Jar包
引入ThinkJDBC-x.x.x.jar库和commons-dbutils-1.6.jar依赖库:
或者
### Maven
```xml
<dependency>
<groupId>com.llqqww</groupId>
<artifactId>thinkjdbc</artifactId>
<version>1.4.5_16</version>
</dependency>
```
> 此外记得添加你要操作的数据库依赖库,如`mysql-connector-java`、`ojdbc`、`sqljdbc`等
## 0x02 定义数据库
ThinkJD支持直接定义用户名密码访问数据库,也支持使用Hikari、C3P0等数据库连接池。
**数据库连接方式有三种:**
### (1)配置文件方式
在项目根目录下添加文件(跟Hikari配置文件格式一样)
程序第一次启动时会自动加载读取配置文件,如果文件不存在则忽略。【V1.2.4_5 增加功能】
`thinkjdbc.properties`
```java
jdbcUrl = jdbc:mysql://127.0.0.1:3306/thinkjdbc?useUnicode=true&characterEncoding=UTF-8
dataSource.user = root
dataSource.password = root
dataSource.driverClassName=com.mysql.jdbc.Driver
```
### (2)帐号密码方式
```java
D.setDbConfig("jdbc:mysql://127.0.0.1:3306/database?useUnicode=true&characterEncoding=UTF-8","root","root");
```
默认驱动名是 com.mysql.jdbc.Driver,即默认操作MySQL数据库,若使用的是其他数据库则可以修改驱动路径
```java
D.setDbConfig(new DbConfig(dbUrl, dbUser, dbPassword, driverName));
```
### (3)使用数据库连接池
例如使用Hikari连接池:
```java
HikariConfig config = new HikariConfig("/hikari.properties");
HikariDataSource dataSource = new HikariDataSource(config);
D.setDataSource(dataSource);
```
`注:如果定义了数据库连接池,ThinkJD会优先使用。`
### (3)配置表前缀
只需调用一次,配置表前缀不是必需的
```java
D.setTablePrefix("jd_");
//D.M('user') D.M(User.class)将会操作 `jd_user` 表
```
> 注:`D.M('user').prefix('jd_')`方法可单独指定表前缀【V1.2.3新增】
## 0x03 连贯操作
| 操作| 参数| 示例 |说明|
| ------------- |------------- |------------- | -------------
|`table`|table(String table) | table("user") |
|`pk`|pk(String key) | pk("id") |
|`autoInc`|autoInc(boolean isPkAutoInc) | autoInc(false) |
|`join` |join(String join)| join("left join machine on user.id=user_id and machine_status=1")|
|`field`|field(String filed)| field("id,username")|
|`data`|data(Object... dataParam)| data(11,"Leytton")|
|`setInc`|setInc(String key,long num)| setInc("gold",5) //gold=gold+5|
|`setDec`|setDec(String key,long num)| setDec("gold",5) //gold=gold-5|
|`where`|①where(String where)<br>②where(String where, Object... whereParam)|①where("id=1111 and username='Leytton'")<br> ②where("id=? and username=?",1111,"Leytton")
|`group`|group(String group)|group("type")
|`having`|having(String having)|having("id>1234")
|`order`|order(String order)|order("id desc")
|`asc`|asc(String key)|asc("id")
|`desc`|desc(String key)|desc("id")
|`page`|page(long page, long rows)|page(1,10)
|`limit`|①limit(long rows)<br>②limit(long offset, long rows)|①limit(10)<br>②limit(1,10)
|`union`|union(String union,Boolean isAll)|①union("select * from user_two where id>1234",false)<br>②union("select * from user_two where id>1234",true)
## 0x04 查询数据
| 操作| 参数| 说明|
| -------- |--------|--------
|select|①<`T`> List<`T`> select()<br>②<`T`> List<`T`> select(String key, Object value)
|find|①<`T`> T find()<br>②<`T`> T find(Object value)<br>③<`T`> T find(String key, Object value)
|count|①long count()<br>②long count(String field)
|max|double max(String field)
|min|double min(String field)
|avg|double avg(String field)
|sum|double sum(String field)
```java
//find查询
//select id,name from jd_user where id>4 order by id asc limit 0,1
User res = D.M(User.class).field("id,name").where("id>?",4).order("id asc").find();
//find 根据id查询
//select * from jd_user where id=3 limit 0,1
User user = D.M(User.class).find(3);
//find根据字段查询
//select * from jd_user where name='Tom' limit 0,1
User user=D.M(User.class).fetchSql(true).find("name","Bob");
//where,field过滤
//select id,name,weight from jd_user where id>3
List<User> res = D.M(User.class).field("id,name,weight").where("id>3").select();
//group分组查询
//select sex,sum(weight) as weight,avg(age) as age,count(id) as num from jd_user where id>5 group by sex order by sex desc limit 0,10
res = D.M(User.class).field("sex,sum(weight) as weight,avg(age) as age,count(id) as num").where("id>?",5).group("sex").order("sex desc").page(1, 10).select();
//join联表查询
//select jd_user.id,name,weight,sum(gold) as num from jd_user left join jd_gold on user_id=jd_user.id where jd_user.id>3 group by jd_user.id
res = D.M(User.class).field("jd_user.id,name,weight,sum(gold) as num").join("left join jd_gold on user_id=jd_user.id").where("jd_user.id>3").group("jd_user.i
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
ThinkJD-master.zip (28个子文件)
ThinkJD-master
lib
commons-dbutils-1.6.jar 76KB
.classpath 781B
.settings
org.eclipse.jdt.core.prefs 736B
org.eclipse.core.resources.prefs 77B
org.eclipse.m2e.core.prefs 90B
pom.xml 2KB
UPDATE.md 1KB
src
com
llqqww
thinkjdbc
Column.java 704B
FieldInfo.java 837B
Table.java 515B
D.java 6KB
M.java 23KB
DbConfig.java 1KB
LICENSE 11KB
release
ThinkJDBC-1.4.1_8-core.jar 27KB
thinkjdbc-1.4.5_16.jar 19KB
ThinkJDBC-1.4.4_12-core.jar 32KB
thinkjdbc-1.4.6_17.jar 17KB
ThinkJDBC-1.1.2.jar 15KB
ThinkJDBC-1.4.4_13-core.jar 33KB
ThinkJDBC-1.3.1_6.jar 20KB
ThinkJDBC-1.4.2_10-core.jar 27KB
ThinkJDBC-1.4.5_15-core.jar 33KB
ThinkJDBC-1.2.3.jar 19KB
README_EN.md 13KB
.project 559B
.gitignore 15B
README.md 16KB
共 28 条
- 1
资源评论
普通网友
- 粉丝: 3458
- 资源: 505
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功