{"id":20929669,"url":"https://github.com/swiftech/swiftdao","last_synced_at":"2025-10-23T17:50:53.483Z","repository":{"id":31267214,"uuid":"34828954","full_name":"swiftech/swiftdao","owner":"swiftech","description":"SwiftDAO is a lightweight generic DAO layer based on Hibernate and Spring, implemented many basic CRUD operations.","archived":false,"fork":false,"pushed_at":"2022-07-07T19:22:23.000Z","size":23216,"stargazers_count":3,"open_issues_count":9,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-19T18:47:28.998Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/swiftech.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-04-30T02:08:10.000Z","updated_at":"2020-04-13T07:37:49.000Z","dependencies_parsed_at":"2022-07-09T19:30:35.227Z","dependency_job_id":null,"html_url":"https://github.com/swiftech/swiftdao","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swiftech%2Fswiftdao","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swiftech%2Fswiftdao/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swiftech%2Fswiftdao/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swiftech%2Fswiftdao/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/swiftech","download_url":"https://codeload.github.com/swiftech/swiftdao/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243324267,"owners_count":20273099,"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","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":[],"created_at":"2024-11-18T21:22:42.063Z","updated_at":"2025-10-23T17:50:48.452Z","avatar_url":"https://github.com/swiftech.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"## This project has been deprecated because the Spring Data Jpa provides similar but more powerful functionalities.\n\nSwiftDAO is a lightweight generic DAO layer based on Hibernate and Spring, implemented many basic CRUD operations.\n\nSwiftDAO是一个轻量级的，基于Hibernate框架的泛型DAO层。如果您使用 Hibernate 和 Spring 框架做开发，想要快速为项目添加DAO层但又不想在这上面花太多时间，那么SwiftDAO实现了常见的CRUD操作，利用它可以省去很多简单重复代码的编写。\n使用SwiftDAO必须对Hibernate和Spring框架相当熟悉并且理解数据库基本概念。\n\n\n#### 支持：\n\n###### v0.2.x\n* JDK 1.7+\n* Spring 4.3.x\n* Hibernate 4.3.x\n\n###### v0.1.2\n* JDK 1.6+\n* Hibernate 3.6.x\n* Spring 3.2.x\n\n#### 使用方法：\n\n###### 1. 创建实体类：  \n  实现 org.swiftdao.entity.KeyedPersistable 接口（接口泛型为主键类型），并使用 annotation 方式做映射。\n  例如：  \n```java\n@Entity()\n@Table(name = \"USER\")\npublic class User implements KeyedPersistable\u003cLong\u003e{\n\n\t@Id()\n\t@Column(name = \"USER_ID\")\n\tprotected Long id;\n\n\t@Column(name = \"USER_NAME\", length = 32, nullable = false)\n\tprotected String name;\n\t......\n\t// Getter and Setter\n}\n```\n\n###### 2. 创建DAO接口以及接口的实现类：  \n  DAO接口，继承 org.swiftdao.KeyedCrudDao 接口：  \n  ```java\n  public interface UserDao extends KeyedCrudDao\u003cUser\u003e {\n\n  }\n  ```\n  DAO接口实现类，继承org.swiftdao.impl.HibernateKeyedCrudDaoImpl类：\n  ```java\n  public class UserDaoImpl extends HibernateKeyedCrudDaoImpl\u003cUser\u003e implements UserDao {\n\n  }\n  ```\n\n###### 3. 这时你的DAO就已经拥有基本的CRUD功能了，可以直接使用了。如果有更加复杂的持久层的操作则可以在这个子DAO接口中实现。  \n  以下为SwiftDAO已经实现的CRUD方法集：\n  ```java\n\t// 持久化一个实体。\n\tvoid create(E entity) throws DataAccessException;\n\n\t// 持久化多个实体。\n\tvoid create(Collection\u003cE\u003e entities) throws DataAccessException;\n\n\t// 持久化或者更新实体。\n\tvoid createOrUpdate(E entity) throws DataAccessException;\n\n\t// 持久化或者更新多个实体。\n\tvoid createOrUpdate(Collection\u003cE\u003e entities) throws DataAccessException;\n\n\t// 更新实体。\n\tvoid update(E entity) throws DataAccessException;\n\n\t// 更新多个实体。\n\tvoid update(Collection\u003cE\u003e entities) throws DataAccessException;\n\n\t// 更新处于游离状态的实体，更新后实体对象仍然处于游离状态。\n\tvoid merge(E entity) throws DataAccessException;\n\n\t// 保存处于游离状态的多个实体，更新后实体对象仍然处于游离状态。\n\tvoid merge(Collection\u003cE\u003e entities) throws DataAccessException;\n\n\t// 删除一个持久化的实体。\n\tvoid delete(E entity) throws DataAccessException;\n\n\t// 删除多个持久化的实体。\n\tvoid delete(Collection\u003cE\u003e entities) throws DataAccessException;\n\n\t// 删除实体主键id标识的实体。\n\tvoid delete(long id) throws DataAccessException;\n\n\t// 通过复合主键类的实例来删除实体对象。\n\tvoid delete(Serializable key) throws DataAccessException;\n\n\t// 通过给定复合主键的各个属性值来删除实体对象。\n\tvoid delete(String[] keyNames, Object[] keyValues) throws DataAccessException;\n\n\t// 按照实体类型和实体唯一标识查询实体。\n\tE find(long id) throws DataAccessException;\n\n\t// 按照实体类型和实体唯一标识查询实体。\n\tE find(Serializable id) throws DataAccessException;\n\n\t// 通过给定复合主键的各个属性值来查找实体对象。\n\tE find(String[] keyNames, Object[] keyValues) throws DataAccessException;\n\n\t// 按照实体类型和实体唯一标识查询实体，并锁定该实体对象，直到事务结束。\n\tE findAndLock(long id) throws DataAccessException;\n\n\t// 按照实体类型和实体唯一标识查询实体，并锁定该实体对象，直到事务结束。\n\tE findAndLock(Serializable id) throws DataAccessException;\n\n\t// 按照给定的实体类型和唯一标识查询实体。通用的查询方法，适用于所有的实现KeyedPersistable接口的实体类。\n\tKeyedPersistable find(Class clazz, long id) throws DataAccessException;\n\n\t// 按照给定的实体类型和唯一标识查询实体。通用的查询方法，适用于所有的实现KeyedPersistable接口的实体类。\n\tKeyedPersistable find(Class clazz, Serializable id) throws DataAccessException;\n\n\t// 按照唯一的（Unique）属性名和属性值，查询得到一个实体对象。\n\tE findByUniqueParam(String uniqueParamName, String value) throws DataAccessException;\n\n\t// 按照指定的属性值查询多个实体对象。\n\tList\u003cE\u003e findByParam(String paramName, Object value) throws DataAccessException;\n\n\t// 按照指定属性值查找多个实例，并按照分页条件分页，返回指定页的实体集合。\n\tList\u003cE\u003e findByParamPagination(String paramName, Object value, int pageSize, int pageNumber) throws DataAccessException;\n\n\t// 按照指定属性值、排序条件和分页条件进行查找指定页的多个实例。\n\tList\u003cE\u003e findByParamPagination(String paramName, Object value, String orderParam,\n\t\t\tboolean isDescending, int pageSize, int pageNumber) throws DataAccessException;\n\n\t// 按照指定的属性值映射查找多个实体对象。\n\tList\u003cE\u003e findByParams(Map\u003cString, Object\u003e paramMap) throws DataAccessException;\n\n\t// 按照指定的条件表达式查找多个实体对象。\n\tList\u003cE\u003e findByParams(String extraCondition, Map\u003cString, Object\u003e extraParams) throws DataAccessException;\n\n\t// 按照指定的属性值映射查找多个实体对象。\n\tList\u003cE\u003e findByParams(Map\u003cString, Object\u003e paramMap, String extraCondition, Map\u003cString, Object\u003e extraParams) throws DataAccessException;\n\n\t// 按照指定属性值映射、分页条件查找多个实例。\n\tList\u003cE\u003e findByParamsPagination(Map\u003cString, Object\u003e paramMap, int pageSize, int pageNumber) throws DataAccessException;\n\n\t// 按照指定属性值映射查找多个实例，并按照分页条件分页，返回指定页的实体列表。\n\tList\u003cE\u003e findByParamsPagination(String condition, Map\u003cString, Object\u003e params, int pageSize, int pageNumber) throws DataAccessException;\n\n\t// 按照指定属性值映射查找多个实例，并按照分页条件分页，返回指定页的实体列表。\n\tList\u003cE\u003e findByParamsPagination(Map\u003cString, Object\u003e paramMap, String extraCondition,\n\t\t\tMap\u003cString, Object\u003e extraParams, int pageSize, int pageNumber) throws DataAccessException;\n\n\t// 按照指定属性值映射、排序条件和分页条件进行查找指定页的多个实例。\n\tList\u003cE\u003e findByParamsPagination(Map\u003cString, Object\u003e paramMap, String orderParam, boolean isDescending,\n\t\t\tint pageSize, int pageNumber) throws DataAccessException;\n\n\t// 按照指定参数值映射和额外的查询条件、排序条件和分页条件查找多个实例。\n\tList\u003cE\u003e findByParamsPagination(Map\u003cString, Object\u003e paramMap, String extraCondition,\n\t\t\tMap\u003cString, Object\u003e extraParams, String orderParam, boolean isDescending,\n\t\t\tint pageSize, int pageNumber) throws DataAccessException;\n\n\t// 按照泛型的实体类型查询得到所有持久化实体。\n\t// 如果实体类被设置为缓存的，则该方法首先从缓存中获取。\n\tList\u003cE\u003e findAll() throws DataAccessException;\n\n\t// 按照指定实体类型查询得到所有持久化实体。\n\t// 如果实体类被设置为缓存的，则该方法首先从缓存中获取。\n\tList\u003cE\u003e findAll(Class clazz) throws DataAccessException;\n\n\t// 忽略实体类的缓存配置，直接查询所有持久化实体。\n\tList\u003cE\u003e findAllOverCache(Class clazz) throws DataAccessException;\n\n\t// 在所有的持久化实体中查询指定页的实体集合。\n\tList\u003cE\u003e findAllByPagination(int pageSize, int pageNumber) throws DataAccessException;\n\n\t// 在所有的持久化实体中按照排序方式查询指定页的实体集合。\n\tList\u003cE\u003e findAllByPagination(String orderParam, boolean isDescending, int pageSize, int pageNumber) throws DataAccessException;\n\n\t// 统计所有持久化实体对象的数量。\n\tlong countAll() throws DataAccessException;\n\n\t// 按条件统计持久化实体对象的数量。\n\tlong countByParam(String paramName, Object value) throws DataAccessException;\n\n\t// 按给定的限制条件统计持久化实体对象的数量。\n\tlong countByParams(Map\u003cString, Object\u003e paramMap) throws DataAccessException;\n\n\t// 按给定的限制条件统计实体对象的数量。\n\tlong countByParams(Map\u003cString, Object\u003e paramMap, String extraCondition, Map\u003cString, Object\u003e extraParams) throws DataAccessException;\n\n\t// 获得指定Sequence的值(仅用于Oracle)\n\tlong getSequence(String seqName) throws DataAccessException;\n```\n\n\n#### 更新记录\n* 0.2.4\n\t* 修复了 find**Pagination() 方法查询一对多和多对多实体类的错误\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fswiftech%2Fswiftdao","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fswiftech%2Fswiftdao","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fswiftech%2Fswiftdao/lists"}