# tiny-jdbc
**Repository Path**: leisureLXY/tiny-jdbc
## Basic Information
- **Project Name**: tiny-jdbc
- **Description**: 🌟 tiny-jdbc:一款专为 Java 开发者量身打造的极致轻量级数据库 ORM 神器✨!它依托 Spring JdbcTemplate 的强大内核,以精妙的架构设计和卓越的性能表现,无缝融合了 SQL 操作的灵活性与实体类映射操作的便捷性。无论是简单的数据查询,还是复杂的事务处理,tiny-jdbc 都能让数据库操作变得如同行云流水般简单,助你在开发之路上一路狂飙🚀!
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 7
- **Forks**: 1
- **Created**: 2023-07-28
- **Last Updated**: 2025-12-02
## Categories & Tags
**Categories**: Uncategorized
**Tags**: SpringBoot, Java, JdbcTemplate, ORM, 数据库
## README
TinyJDBC
一个优雅的 ORM 框架,轻量、灵活、高性能
## 1、简介
`tiny-jdbc` 是一款基于 `Spring JDBC` 精心打造的轻量、灵活且高性能的数据库 `ORM` 框架。它在继承 `Spring JDBC`
原有强大功能的基础上,进行了大量的增强和优化,为开发者提供了更加便捷、高效的数据库操作体验,让操作数据库这件事变得更加简单!
### 优势
- **轻量级**:除了 Spring JDBC 本身,再无任何第三方依赖,轻量可靠
- **性能高**:依托高性能的 Spring JDBC,在执行数据库操作时性能基本无损耗,能够满足高并发场景下的应用需求
- **功能强**:既支持原生 sql 操作,让开发者可以灵活编写复杂的 sql 语句;又支持实体类映射操作,通过简单的配置即可实现对象与数据库表的映射。BaseDao
里封装了大量的通用方法,配合强大灵活的条件构造器(Criteria)和SQL构造器(SQL),基本能满足各类使用需求。
- **支持 Lambda 形式调用**:条件构造器(Criteria)和SQL构造器(SQL)支持Lambda形式调用,编译期语法增强,无需再担心字段写错,提高代码的安全性和可维护性
- **支持主键自动生成**:内含多种主键生成策略,包括自增主键、UUID、雪花ID 等,同时也支持自定义 ID 生成策略,满足不同业务场景下的主键生成需求。
- **支持多种数据库分页方言**:包括 MySQL、ORACLE、DB2、PostgreSql 等多种常用数据库,无需额外配置,框架会自动识别数据库类型并采用相应的分页方言,大大简化了分页查询的开发工作。
- **同时支持 SpringBoot2 和 SpringBoot3 **
### 支持数据库
- 分页插件目前支持MySQL、MARIADB、ORACLE、DB2、PostgreSql、SQLite、H2、OceanBase、openGauss、informix、达梦数据库、人大金仓数据库、瀚高数据库等常见数据库
- 其他操作支持任何使用标准 SQL 的数据库
## 2、快速开始
### 引入Maven依赖
```xml
top.lxyccc
tiny-jdbc-boot-starter
1.9.3
```
### application.yml参数配置
- **或application.properties**
```yaml
tiny-jdbc:
# 打印banner,默认false
banner: true
# 分页器适配类型,可不配置,不配置的话会自动获取
db-type: mysql
# 是否使用运行时数据库类型,默认值为 false,设置为 true 时,会在运行时根据多数据源自动识别对应的分页处理器
open-runtime-db-type: false
# 通过metadata获取jdbcurl时是否自动关闭连接,默认为true
close-conn: true
# 数据源连接池类型(配置获取jdbcUrl的方法),允许配置为 hikari,druid,tomcat-jdbc,c3p0,dbcp,beecp,default,默认为空
datasource-type: druid
```
### 定义Entity实体类
- **实体类对应数据库的一张表**
- **实体类属性名必须使用`驼峰命名规则`,与数据库表字段一一映射**
```java
@Table("b_upload_file")
public class UploadFile implements Serializable {
private static final long serialVersionUID = -1L;
/**
* @Id 注解用于标记表的主键,目前只支持单主键,请不要在多个属性上设置此注解,会导致程序出错
*
* idType: 主键ID策略,目前支持以下7种 AUTO_INCREMENT、INPUT、OBJECT_ID、ASSIGN_ID、UUID、SEQUENCE、CUSTOM
* value: 则代表的是sequence 序列的 sql 内容,idType=SEQUENCE时,必须设置此内容
*
* 注意!
* 如果设置为 AUTO_INCREMENT 自增主键 的话,则此字段必须为Long
* 如果设置为 UUID 的话,则此属性类型必须为String
* 如果设置为 OBJECT_ID 的话,则此属性类型必须为String
* 如果设置为 ASSIGN_ID 的话,则此属性类型必须为String或者Long
* 如果设置为 SEQUENCE 的话,则此属性类型必须为Integer或者Long,且必须设置value属性为查询序列值的SQL
* 如果设置为 CUSTOM 的话,则需要自己实现 IdGeneratorInterface 接口并注册为bean
*
*
* @Column 注解用于标记属性和表字段的对应关系
*/
@Id(idType = IdType.AUTO_INCREMENT)
@Column(value = "id")
private Long id;
/**
* 文件id
*/
@Column("file_id")
private String fileId;
/**
* 文件原名称
*/
@Column("file_name_old")
private String fileNameOld;
/**
* 文件新名称
*/
@Column("file_name_new")
private String fileNameNew;
/**
* 文件路径
*/
@Column("file_path")
private String filePath;
/**
* 文件md5
*/
@Column("file_md5")
private String fileMd5;
/**
* 上传时间
*/
@Column("created_at")
private Date createdAt;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
// 其他 getter 和 setter 方法...
}
```
### 定义Dao类,继承自BaseDao
- **泛型一为对应实体类,泛型二实体类主键类型**
```java
import org.springframework.stereotype.Repository;
import org.tinycloud.jdbc.BaseDao;
import org.tinycloud.entity.UploadFile;
@Repository
public class UploadFileDao extends BaseDao {
// 可添加自定义方法...
}
```
### Service层注入使用
```java
import org.springframework.stereotype.Service;
import org.tinycloud.dao.UploadFileDao;
@Service
public class UploadFileService {
@Autowired
private UploadFileDao uploadFileDao;
}
```
## 3、注解说明
#### @Table
- 描述:表名注解,标识实体类对应的表
- 使用位置:实体类
```java
@Table("b_upload_file")
public class UploadFile implements Serializable {
private static final long serialVersionUID = -1L;
}
```
| 属性 | 类型 | 必须指定 | 默认值 | 描述 |
|-------|--------|------|-----|---------|
| value | String | 是 | "" | 对应数据库表名 |
#### @Id
- 描述:主键注解,标识实体类主键属性
- 使用位置:实体类属性
```java
@Table("b_upload_file")
public class UploadFile implements Serializable {
private static final long serialVersionUID = -1L;
@Id(idType = IdType.AUTO_INCREMENT)
@Column(value = "id")
private Long id;
}
```
| 属性 | 类型 | 必须指定 | 默认值 | 描述 |
|--------|--------|------|--------------|------------------------------------------------------------|
| idType | String | 是 | IdType.INPUT | 主键策略 |
| value | String | 否 | "" | 若 idType 类型是 sequence, value 则代表的是sequence 序列的 sql 内容,此时必填 |
##### IdType主键策略说明
| 值 | 描述 |
|----------------|---------------------------------------------------------------|
| INPUT | 自行 set 主键值 |
| AUTO_INCREMENT | 数据库 ID 自增 |
| OBJECT_ID | 自动设置 MongoDb objectId 作为主键值 |
| ASSIGN_ID | 自动设置 雪花ID 作为主键值 |
| UUID | 自动设置 UUID 作为主键值 |
| SEQUENCE | 自动设置 调用序列SQL结果 作为主键值 |
| CUSTOM | 自定义主键ID生成器,需自行实现 IdGeneratorInterface 接口,详见[自定义ID生成器](#idGen) |
#### @Column
- 描述:字段注解,标识实体类属性和字段的对应关系
- 使用位置:实体类属性
```java
@Table("b_upload_file")
public class UploadFile implements Serializable {
private static final long serialVersionUID = -1L;
@Id(idType = IdType.AUTO_INCREMENT)
@Column(value = "id")
private Long id;
@Column("file_id")
private String fileId;
}
```
| 属性 | 类型 | 必须指定 | 默认值 | 描述 |
|-------|--------|------|-----|----------|
| value | String | 是 | "" | 对应数据库字段名 |
## 4、BaseDao CRUD接口说明
### 查询操作
| 方法 | 说明 |
|---------------------------------------------------------------------------------|----------------------------------------------------------|
| `List selectAll();` | 查询所有数据并返回实体类对象列表,类型使用的是xxxDao的类型 |
| ` List select(String sql, Class classz, Object... params);` | 根据给定的sql语句和实体类型和参数,查询数据并返回实体类对象列表 |
| `List select(String sql, Object... params);` | 根据给定的sq语句l和参数,查询数据并返回实体类对象列表,类型使用的是xxxDao的类型 |
| ` F selectOne(String sql, Class classz, Object... params);` | 根据给定的sql语句和实体类型和参数,查询数据并返回一个实体类对象 |
| `T selectOne(String sql, Object... params);` | 根据给定的sql语句和参数,查询数据并返回一个实体类对象,类型使用的是xxxDao的类型 |
| `List