{"id":30817905,"url":"https://github.com/wb04307201/entity-sql","last_synced_at":"2025-09-06T09:10:05.306Z","repository":{"id":156276047,"uuid":"566672398","full_name":"wb04307201/entity-sql","owner":"wb04307201","description":"Entity SQL 是一个轻量级的 Java ORM 工具库，旨在简化数据库操作，提供基于注解的实体映射和链式编程的 SQL 构建方式，快速构建单表维护和数据可视化界面。","archived":false,"fork":false,"pushed_at":"2025-08-30T01:54:49.000Z","size":2476,"stargazers_count":132,"open_issues_count":0,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-08-30T03:25:26.094Z","etag":null,"topics":["java","orm","spring-boot","sql"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wb04307201.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-11-16T07:01:51.000Z","updated_at":"2025-08-30T01:49:49.000Z","dependencies_parsed_at":"2023-10-23T08:38:38.143Z","dependency_job_id":"a83f0d52-c3d8-4292-90a9-d517549988c3","html_url":"https://github.com/wb04307201/entity-sql","commit_stats":null,"previous_names":["wb04307201/entity-sql"],"tags_count":36,"template":false,"template_full_name":null,"purl":"pkg:github/wb04307201/entity-sql","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wb04307201%2Fentity-sql","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wb04307201%2Fentity-sql/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wb04307201%2Fentity-sql/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wb04307201%2Fentity-sql/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wb04307201","download_url":"https://codeload.github.com/wb04307201/entity-sql/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wb04307201%2Fentity-sql/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273881017,"owners_count":25184579,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-06T02:00:13.247Z","response_time":2576,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java","orm","spring-boot","sql"],"created_at":"2025-09-06T09:02:40.988Z","updated_at":"2025-09-06T09:10:05.291Z","avatar_url":"https://github.com/wb04307201.png","language":"Java","readme":"# Entity SQL - Java ORM 库\n\n\u003e Entity SQL 是一个轻量级的 Java ORM 工具库，旨在简化数据库操作，提供基于注解的实体映射和链式编程的 SQL 构建方式，快速构建单表维护和数据可视化界面。\n\n[![](https://jitpack.io/v/com.gitee.wb04307201/entity-sql.svg)](https://jitpack.io/#com.gitee.wb04307201/entity-sql)\n[![star](https://gitee.com/wb04307201/entity-sql/badge/star.svg?theme=dark)](https://gitee.com/wb04307201/entity-sql)\n[![fork](https://gitee.com/wb04307201/entity-sql/badge/fork.svg?theme=dark)](https://gitee.com/wb04307201/entity-sql)\n[![star](https://img.shields.io/github/stars/wb04307201/entity-sql)](https://github.com/wb04307201/entity-sql)\n[![fork](https://img.shields.io/github/forks/wb04307201/entity-sql)](https://github.com/wb04307201/entity-sql)  \n![MIT](https://img.shields.io/badge/License-Apache2.0-blue.svg) ![JDK](https://img.shields.io/badge/JDK-17+-green.svg) ![SpringBoot](https://img.shields.io/badge/Srping%20Boot-3+-green.svg)\n\n## 代码示例\n- [一键生成单表维护界面AI项目](https://gitee.com/wb04307201/one-table-ai)  \n这是一个基于Spring Boot和AI技术的一键生成单表维护界面的应用。用户只需描述业务需求，系统会自动分析需求并生成相应的Java实体类和Web界面。  \n\u003cimg src=\"img_7.gif\" width=\"300\" alt=\"示例图片\"\u003e\n\n\n## 功能特性\n\n### 1. 实体映射\n- 基于注解的实体类与数据库表映射\n- 支持主键自动生成（UUID）\n- 字段级别的详细配置（展示、编辑、搜索等）\n\n### 2. SQL 构建\n- 链式编程 API，易于使用和理解\n- 支持常见的 CRUD 操作\n- 自动处理 SQL 注入防护\n- 支持分页查询\n- 多种条件查询（等于、模糊匹配、范围查询等）\n\n### 3. 多数据源支持\n- 灵活的数据源配置\n- 自动连接管理和释放\n\n### 4. 类型转换\n- 自动处理 Java 对象与数据库类型之间的转换\n- 支持常见的数据类型（String、Integer、Date、BigDecimal 等）\n[Table.java](entity-sql/src/main/java/cn/wubo/entity/sql/core/annotations/Table.java)\n### 注解系统\n- [@Table](entity-sql/src/main/java/cn/wubo/entity/sql/core/annotations/Table.java#L5-L11): 标注实体类对应的表名\n- [@Column](entity-sql/src/main/java/cn/wubo/entity/sql/core/annotations/Column.java#L6-L21): 配置字段属性（类型、长度、展示方式等）\n- [@Key](entity-sql/src/main/java/cn/wubo/entity/sql/core/annotations/Key.java#L7-L12): 标识主键字段及生成策略\n- [@View](entity-sql/src/main/java/cn/wubo/entity/sql/core/annotations/View.java#L5-L12): 配置字段的展示属性\n- [@Edit](entity-sql/src/main/java/cn/wubo/entity/sql/core/annotations/Edit.java#L7-L15): 配置字段的编辑属性\n- [@Search](entity-sql/src/main/java/cn/wubo/entity/sql/core/annotations/Search.java#L8-L14): 配置字段的搜索属性\n\n### SQL API（面向SQL构建）\n- [SQL](entity-sql/src/main/java/cn/wubo/entity/sql/core/SQL.java#L4-L38): 静态方法入口，用于构建各种 SQL 语句\n    - [SQL.query()](entity-sql/src/main/java/cn/wubo/entity/sql/core/SQL.java#L7-L10): 构建查询语句\n      - 条件构建器:\n        - 等值查询 ([eq](entity-sql/src/main/java/cn/wubo/entity/sql/core/segment/IWhere.java#L8-L8))\n        - 不等值查询 ([neq](entity-sql/src/main/java/cn/wubo/entity/sql/core/segment/IWhere.java#L10-L10))\n        - 模糊查询 ([like](entity-sql/src/main/java/cn/wubo/entity/sql/core/segment/IWhere.java#L20-L20), [notLike](entity-sql/src/main/java/cn/wubo/entity/sql/core/segment/IWhere.java#L22-L22), [llike](entity-sql/src/main/java/cn/wubo/entity/sql/core/segment/IWhere.java#L24-L24), [rlike](entity-sql/src/main/java/cn/wubo/entity/sql/core/segment/IWhere.java#L26-L26))\n        - 范围查询 ([between](entity-sql/src/main/java/cn/wubo/entity/sql/core/segment/IWhere.java#L28-L28), [notBetween](entity-sql/src/main/java/cn/wubo/entity/sql/core/segment/IWhere.java#L30-L30))\n        - 集合查询 ([in](entity-sql/src/main/java/cn/wubo/entity/sql/core/segment/IWhere.java#L32-L34), [notIn](entity-sql/src/main/java/cn/wubo/entity/sql/core/segment/IWhere.java#L38-L40))\n        - 空值查询 ([isNull](entity-sql/src/main/java/cn/wubo/entity/sql/core/segment/IWhere.java#L44-L44), [isNotNull](entity-sql/src/main/java/cn/wubo/entity/sql/core/segment/IWhere.java#L46-L46))\n        - 比较查询 ([gt](entity-sql/src/main/java/cn/wubo/entity/sql/core/segment/IWhere.java#L12-L12), [ge](entity-sql/src/main/java/cn/wubo/entity/sql/core/segment/IWhere.java#L14-L14), [lt](entity-sql/src/main/java/cn/wubo/entity/sql/core/segment/IWhere.java#L16-L16), [le](entity-sql/src/main/java/cn/wubo/entity/sql/core/segment/IWhere.java#L18-L18))\n      - 分页支持\n        - [page(int page, int pageSize)](entity-sql/src/main/java/cn/wubo/entity/sql/core/segment/IPage.java#L4-L4)分页查询。\n    - [SQL.update()](entity-sql/src/main/java/cn/wubo/entity/sql/core/SQL.java#L10-L12): 构建更新语句\n    - [SQL.insert()](entity-sql/src/main/java/cn/wubo/entity/sql/core/SQL.java#L14-L16): 构建插入语句\n    - [SQL.delete()](entity-sql/src/main/java/cn/wubo/entity/sql/core/SQL.java#L18-L20): 构建删除语句\n    - [SQL.createTable()](entity-sql/src/main/java/cn/wubo/entity/sql/core/SQL.java#L30-L32): 构建建表语句\n    - [SQL.dropTable()](entity-sql/src/main/java/cn/wubo/entity/sql/core/SQL.java#L26-L28): 构建删表语句\n    - [SQL.isTableExists()](entity-sql/src/main/java/cn/wubo/entity/sql/core/SQL.java#L22-L24): 检查表是否存在\n\n### Entity API（面向实体操作）\n- [Entity](entity-sql/src/main/java/cn/wubo/entity/sql/core/Entity.java#L8-L25): 针对实体对象的操作入口\n    - [Entity.insertOrUpdate()](entity-sql/src/main/java/cn/wubo/entity/sql/core/Entity.java#L10-L12): 插入或更新实体\n    - [Entity.query()](entity-sql/src/main/java/cn/wubo/entity/sql/core/Entity.java#L14-L16): 查询实体列表\n    - [Entity.grtById()](entity-sql/src/main/java/cn/wubo/entity/sql/core/Entity.java#L18-L20): 根据主键获取实体\n    - [Entity.deleteById()](entity-sql/src/main/java/cn/wubo/entity/sql/core/Entity.java#L22-L24): 根据主键删除实体\n\n\n## 使用\n### 引入依赖\n增加 JitPack 仓库\n```xml\n\u003crepositories\u003e\n    \u003crepository\u003e\n        \u003cid\u003ejitpack.io\u003c/id\u003e\n        \u003curl\u003ehttps://jitpack.io\u003c/url\u003e\n    \u003c/repository\u003e\n\u003c/repositories\u003e\n```\n\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.gitee.wb04307201.entity-sql\u003c/groupId\u003e\n    \u003cartifactId\u003eentity-sql-spring-boot-starter\u003c/artifactId\u003e\n    \u003cversion\u003e1.4.2\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n## 使用\n\n### SQL API（面向SQL构建）使用示例\n```java\n        if (dataSourceHelper.execute(SQL.isTableExists(User.class))) {\n        dataSourceHelper.execute(SQL.dropTable(User.class));\n        }\n        dataSourceHelper.execute(SQL.createTable(User.class));\n\nint count = dataSourceHelper.execute(SQL.insert(User.class).set(User::getId, \"11111\").set(User::getUserName, \"11111\"));\n        Assertions.assertEquals(count, 1);\n\ncount = dataSourceHelper.execute(SQL.update(User.class).set(User::getUserName, \"11111+++\").eq(User::getId, \"11111\"));\n        Assertions.assertEquals(count, 1);\n\n        IntStream.range(0, 10).forEach(i -\u003e {\n        dataSourceHelper.execute(SQL.insert(User.class).set(User::getId, UUID.randomUUID()).set(User::getUserName, UUID.randomUUID()));\n        });\n\nList\u003cUser\u003e userList = dataSourceHelper.execute(SQL.query(User.class));\n        Assertions.assertEquals(userList.size(), 11);\n\ncount = dataSourceHelper.execute(SQL.delete(User.class).eq(User::getId, \"11111\"));\n\nuserList = dataSourceHelper.execute(SQL.query(User.class));\n        Assertions.assertEquals(userList.size(), 10);\n\ncount = dataSourceHelper.execute(SQL.delete(User.class).isNotNull(User::getUserName));\n        Assertions.assertEquals(count, 10);\n\nuserList = dataSourceHelper.execute(SQL.query(User.class).page(0,1));\n        Assertions.assertEquals(userList.size(), 1);\n```\n\n### Entity API（面向实体操作）使用示例\n先创建一个类\n```java\npackage cn.wubo.entity.sql;\n\nimport cn.wubo.entity.sql.core.annotations.*;\nimport cn.wubo.entity.sql.core.enums.ColumnType;\nimport cn.wubo.entity.sql.core.enums.EditType;\nimport lombok.Data;\n\nimport java.time.LocalDate;\n\n@Data\n@Table(value = \"test_user\", init = true)\npublic class User {\n    @Key\n    @Column(value = \"id\",key = @Key(isKey = true))\n    private String id;\n\n    @Column(value = \"user_name\", label = \"用户名\", type = ColumnType.VARCHAR, length = 20, edit = @Edit(required = true),search = @Search(searchable = true))\n    private String userName;\n\n    @Column(value = \"department\", label = \"部门\",\n            items = {@Item(value = \"1\", label = \"部门1\"), @Item(value = \"2\", label = \"部门2\"), @Item(value = \"3\", label = \"部门3\")},\n            view = @View(width = 300),\n            edit = @Edit(type = EditType.SELECT),\n            search = @Search(searchable = true))\n    private String department;\n\n    @Column(value = \"birth\", label = \"生日\", type = ColumnType.DATE,edit = @Edit(type = EditType.DATE))\n    private LocalDate birth;\n\n    @Column(value = \"age\", label = \"年龄\", type = ColumnType.NUMBER, precision = 10, scale = 0,edit = @Edit(type = EditType.NUMBER))\n    private Integer age;\n\n    @Column(value = \"amount\", label = \"薪酬\", type = ColumnType.NUMBER, precision = 10, scale = 2,edit = @Edit(type = EditType.NUMBER))\n    private Float amount;\n\n    @Column(value = \"status\", label = \"在职\", type = ColumnType.VARCHAR, length = 1,\n            items = {@Item(value = \"Y\", label = \"在职\"), @Item(value = \"N\", label = \"离职\")},\n            view = @View(),\n            edit = @Edit(type = EditType.CHECKBOX)\n    )\n    private String status;\n}\n```\n\n使用\n```java\n        if (dataSourceHelper.execute(SQL.isTableExists(User.class))) {\n        dataSourceHelper.execute(SQL.dropTable(User.class));\n        }\n        dataSourceHelper.execute(SQL.createTable(User.class));\nUser user = new User();\n        user.setUserName(\"99999\");\n        user.setBirth(LocalDate.now());\n        dataSourceHelper.execute(Entity.insertOrUpdate(user));\n\n        user.setUserName(\"99999+\");\n        dataSourceHelper.execute(Entity.insertOrUpdate(user));\n\nUser user1 = dataSourceHelper.execute(Entity.grtById(user));\n        Assertions.assertEquals(user1.getUserName(), \"99999+\");\n\nList\u003cUser\u003e userList = dataSourceHelper.execute(Entity.query(new User()));\n        Assertions.assertEquals(userList.size(), 1);\n\nInteger count = dataSourceHelper.execute(Entity.deleteById(user));\n        Assertions.assertEquals(count, 1);\n\nuserList = dataSourceHelper.execute(Entity.query(new User()));\n        Assertions.assertEquals(userList.size(), 0);\n```\n\n### 快速构建单表维护和数据可视化界面\n\n```java\n@Component\npublic class AppReadyListener implements ApplicationRunner {\n\n    private final EntityWebService entityWebService;\n\n    @Autowired\n    public AppReadyListener(EntityWebService entityWebService) {\n        this.entityWebService = entityWebService;\n    }\n\n    @Override\n    public void run(ApplicationArguments args) throws Exception {\n        // user 为页面访问标识，多个界面注意标识不要重复\n        entityWebService.build(\"user\", User.class);\n    }\n}\n```\n\n#### 页面访问标识访问页面\nhttp://ip:port/entity/view/user\n单表维护  \n![img.png](img.png)\n绘制图表  \n![img_1.png](img_1.png)","funding_links":[],"categories":["数据库开发"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwb04307201%2Fentity-sql","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwb04307201%2Fentity-sql","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwb04307201%2Fentity-sql/lists"}