# yixsoft-autobatis
**Repository Path**: yixsoft/yixsoft-autobatis
## Basic Information
- **Project Name**: yixsoft-autobatis
- **Description**: auto sql support for mybatis
- **Primary Language**: Java
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-03-20
- **Last Updated**: 2026-09-06
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# YixSoft-Autobatis
MyBatis 自动 SQL 生成插件 - 通过注解驱动,零配置实现单表 CRUD 操作
## 项目简介
YixSoft-Autobatis 是一个基于 MyBatis 的自动 SQL 生成插件,旨在简化单表 CRUD 操作的开发工作。通过注解驱动的方式,开发者只需定义 Mapper 接口方法签名,系统即可自动生成对应的 SQL 语句。
### 核心特性
- **注解驱动**:通过 `@AutoMapper` 和 `@AutoSql` 注解声明表映射和 SQL 类型
- **自动表结构感知**:运行时自动获取数据库表元数据,确保 SQL 与表结构一致性
- **智能参数处理**:自动处理 null 值判断、集合展开为 IN 条件等场景
- **多数据库支持**:方言系统自动适配 MySQL、Oracle、PostgreSQL 等数据库特性
- **主键自动生成**:支持 UUID、SnowFlake、数据库自增等多种策略
### 适用场景
- 管理后台系统:大量单表 CRUD 操作
- 数据导入导出:批量插入、更新、查询
- API 服务开发:快速构建 RESTful API 数据访问层
- 原型开发:减少前期 SQL 编写工作
### 不适用场景
- 复杂多表关联查询(跨表 JOIN、子查询等)
- 业务逻辑复杂的更新(需要复杂条件判断或计算)
- 性能要求极高的查询(需要定制优化 SQL)
## 快速开始
### Maven 依赖
按应用使用的 Spring Boot **主版本** 选择 Autobatis 版本(不要混用 `2.1.x` 与 `4.0.0` 模块;**没有 `3.x` 产品线**):
| 应用 Spring Boot | Autobatis |
|---|---|
| 3.2–3.5 | `2.1.x`(当前冻结线:`2.1.2`) |
| 4.0–4.1 | `4.0.0` |
Boot 3 示例:
```xml
com.yixsoft
yixsoft-batis-spring-boot-starter
2.1.2
```
Boot 4 示例:把上面的 `` 改成 `4.0.0`。方言模块(`yixsoft-batis-dialect-mysql` / `-pg` / `-oracle`)必须与 starter **同一产品版本**。
```xml
com.yixsoft
yixsoft-batis-dialect-mysql
2.1.2
```
选错线会在启动期因自动配置类找不到而失败:Boot 3 应用请用 `2.1.x`,Boot 4 应用请用 `4.0.0`。
### Spring Boot 配置
```yaml
# MySQL 配置
mybatis:
default-key-generator: com.yixsoft.support.mybatis.autosql.pk.UUIDPkProvider
dialects:
- com.yixsoft.support.mybatis.dialects.mysql.MySqlDialect
configuration:
map-underscore-to-camel-case: true
# PostgreSQL 配置
# mybatis:
# default-key-generator: com.yixsoft.support.mybatis.autosql.pk.UUIDPkProvider
# dialects:
# - com.yixsoft.support.mybatis.dialects.pg.PostgreSqlDialect
# configuration:
# map-underscore-to-camel-case: true
# Oracle 配置
# mybatis:
# default-key-generator: com.yixsoft.support.mybatis.autosql.pk.UUIDPkProvider
# dialects:
# - com.yixsoft.support.mybatis.dialects.oracle.OracleDialect
# configuration:
# map-underscore-to-camel-case: true
```
### Mapper 定义示例
```java
@AutoMapper(tablename = "users", pkName = "id")
public interface UserMapper {
@AutoSql(SqlType.SELECT)
User selectById(@Param("id") String id);
@AutoSql(SqlType.INSERT)
void insert(User user); // 主键自动生成
@AutoSql(SqlType.UPDATE)
void update(User user);
@AutoSql(SqlType.DELETE)
void deleteById(@Param("id") String id);
@AutoSql(SqlType.SELECT)
List selectByIds(@Param("id") String[] ids); // 自动生成 IN 条件
}
```
## 核心注解
### @AutoMapper
标注在 Mapper 接口上,定义表映射信息。
| 属性 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `tablename` | String | 是 | 数据库表名 |
| `pkName` | String[] | 是 | 主键列名数组 |
| `keyGenerator` | Class | 否 | 主键生成器类型 |
| `keyPrefix` | String | 否 | 主键前缀 |
### @AutoSql
标注在 Mapper 方法上,声明 SQL 类型。
| SqlType | 说明 |
|---------|------|
| `INSERT` | 插入数据,支持主键自动生成 |
| `UPDATE` | 根据主键更新数据 |
| `SELECT` | 查询数据列表 |
| `DELETE` | 删除数据 |
| `COUNT` | 查询记录数量 |
### 扩展注解
- `@Column`:字段与列名映射
- `@EnumValue`:枚举值映射
- `@StaticUpdate`:静态更新片段
- `@AdvanceSelect`:高级查询配置(排除列、额外条件等)
## 主键生成策略
| 生成器 | 类型 | 适用场景 |
|--------|------|----------|
| `UUIDPkProvider` | String UUID | 通用性强、全局唯一 |
| `SnowFlakeLongKeyProvider` | Long | 有序 ID、性能最佳 |
| `SnowFlakeStringKeyProvider` | String | 分库分表、便于路由 |
| `Jdbc3KeyGenerator` | 自增 | 数据库原生支持 |
## 技术栈
- Java 17+
- MyBatis 3.5+
- Spring Boot 3.2–3.5(Autobatis `2.1.x`)或 Spring Boot 4.0–4.1(Autobatis `4.0.0`)
- Maven 3.9+
## 文档导航
详细文档请参阅 [docs/index.md](docs/index.md):
- [快速开始指南](docs/quick-start.md)
- [注解详解](docs/annotations.md)
- [最佳实践](docs/best-practices.md)
- [高级用法](docs/advanced-usage.md)
- [架构设计](openspec/specs/architecture.md)
- [扩展机制](openspec/specs/extension-mechanisms.md)
## 版本信息
- 当前版本:`4.0.0`(Boot 4 线);Boot 3 线冻结在 `2.1.x`
- 开源协议:MIT License
- 源码仓库:https://gitee.com/yixsoft/yixsoft-autobatis
## 开发团队
- 主要开发者:Astro Dai (davepotter@163.com)