{"id":37027067,"url":"https://github.com/cotide/sql2o-plus","last_synced_at":"2026-01-14T03:12:05.185Z","repository":{"id":36316627,"uuid":"145939313","full_name":"cotide/sql2o-plus","owner":"cotide","description":" 🍌sql2o-plus a simple object mapper for java","archived":false,"fork":false,"pushed_at":"2022-06-21T00:05:09.000Z","size":281,"stargazers_count":9,"open_issues_count":5,"forks_count":6,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-08-02T04:42:38.685Z","etag":null,"topics":["database","java8","orm","orm-framework","sql2o","sql2o-plus"],"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/cotide.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}},"created_at":"2018-08-24T03:46:19.000Z","updated_at":"2020-12-15T01:27:26.000Z","dependencies_parsed_at":"2022-08-19T17:40:48.954Z","dependency_job_id":null,"html_url":"https://github.com/cotide/sql2o-plus","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/cotide/sql2o-plus","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cotide%2Fsql2o-plus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cotide%2Fsql2o-plus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cotide%2Fsql2o-plus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cotide%2Fsql2o-plus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cotide","download_url":"https://codeload.github.com/cotide/sql2o-plus/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cotide%2Fsql2o-plus/sbom","scorecard":{"id":305823,"data":{"date":"2025-08-11","repo":{"name":"github.com/cotide/sql2o-plus","commit":"eb8527fc4f99334250ccb1feedf8700e7e5742ad"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.9,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":9,"reason":"1 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-4jrv-ppp4-jm57"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-17T22:00:26.390Z","repository_id":36316627,"created_at":"2025-08-17T22:00:26.390Z","updated_at":"2025-08-17T22:00:26.390Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28408815,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T01:52:23.358Z","status":"online","status_checked_at":"2026-01-14T02:00:06.678Z","response_time":107,"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":["database","java8","orm","orm-framework","sql2o","sql2o-plus"],"created_at":"2026-01-14T03:12:04.467Z","updated_at":"2026-01-14T03:12:05.178Z","avatar_url":"https://github.com/cotide.png","language":"Java","readme":"# sql2o-plus  \n\n\n[![Build Status](https://travis-ci.org/cotide/sql2o-plus.svg?branch=master)](https://travis-ci.org/cotide/sql2o-plus)\n[![Maven Central](https://img.shields.io/maven-central/v/org.apache.maven/apache-maven.svg)](https://search.maven.org/artifact/io.github.cotide/sql2o-plus/1.0.1/jar)\n[![License](https://img.shields.io/badge/license-Apache2-blue.svg)](https://github.com/cotide/sql2o-plus/blob/master/LICENSE)\n[![Gitter](https://img.shields.io/gitter/room/nwjs/nw.js.svg)](https://gitter.im/sql2o-plus/Lobby)\n\n🍌sql2o-plus a simple object mapper for java \n\n\u003e Java版本 1.8\n\n## Maven \n\n\u003e pom.xml \n\n \n### releases 版本\n\n```xml \n\u003cdependency\u003e\n    \u003cgroupId\u003eio.github.cotide\u003c/groupId\u003e\n    \u003cartifactId\u003esql2o-plus\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.3\u003c/version\u003e\n\u003c/dependency\u003e \n```\n\n### snapshots 版本\n\n```xml\n\u003crepository\u003e\n    \u003cid\u003eoss-snapshots\u003c/id\u003e\n    \u003curl\u003ehttps://oss.sonatype.org/content/repositories/snapshots\u003c/url\u003e\n    \u003creleases\u003e\n        \u003cenabled\u003efalse\u003c/enabled\u003e\n    \u003c/releases\u003e\n    \u003csnapshots\u003e\n        \u003cenabled\u003etrue\u003c/enabled\u003e\n    \u003c/snapshots\u003e\n\u003c/repository\u003e \n\u003cdependency\u003e\n    \u003cgroupId\u003eio.github.cotide\u003c/groupId\u003e\n    \u003cartifactId\u003esql2o-plus\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.4-SNAPSHOT\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n \n## 特点\n\n- [sql2o](https://github.com/aaberg/sql2o)驱动\n- 集成SQL Lambda表达式\n- 集成SQL分页\n- CRUD 封装/简化调用方法\n- 支持事务\n\n  \n\n## 实体映射 \n\n```java\npackage com.sqltest.model;\n\nimport com.sqltest.model.enums.EnumGroup;\nimport com.sqltest.model.enums.EnumUserStatus;\nimport com.sqltest.model.enums.EnumVipLevel;\nimport io.github.cotide.dapper.basic.domain.Entity; \nimport io.github.cotide.dapper.core.attr.Column;\nimport io.github.cotide.dapper.core.attr.Ignore;\nimport io.github.cotide.dapper.core.attr.PrimaryKey;\nimport io.github.cotide.dapper.core.attr.Table;\n\nimport java.util.Date;\n\n/**\n * 用户信息\n */\n@lombok.Getter\n@lombok.Setter\n@Table(\"user_info\")\npublic class UserInfo extends Entity {\n\n    @PrimaryKey(\"user_id\")\n    private int id;\n\n    @Column(\"user_Name\")\n    private String name;\n\n    @Column(\"password\")\n    private String pwd;\n\n    @Column(\"status\")\n    private EnumUserStatus status;\n\n    @Column(\"level\")\n    private EnumVipLevel level;\n\n    @Column(\"`group`\")\n    private EnumGroup group;\n\n    private int login;\n\n    @Column(\"create_time\")\n    private Date createTime;\n\n    @Ignore\n    private String other;\n}\n\n```\n\n### 枚举定义 \n\n- IntegerEnum 整数型枚举存储-\u003e [例子](src/test/java/com/sqltest/model/enums/EnumUserStatus.java)\n- StringEnum 字符串型枚举存储-\u003e [例子](src/test/java/com/sqltest/model/enums/EnumGroup.java)\n \n\n### 注解描述\n\n- @Table (表名)\n- @PrimaryKey (主键)\n- @Column (字段名,与数据库字段名称一致可不标记)\n- @Ignore (忽略字段) \n\n\n## Dto实体\n\n```java\npackage com.sqltest.dto;\n\nimport com.sqltest.model.enums.EnumGroup;\nimport com.sqltest.model.enums.EnumUserStatus;\nimport com.sqltest.model.enums.EnumVipLevel; \nimport lombok.Data;\nimport java.util.Date;\n\n\n@Data\npublic class UserInfoDto {\n \n    @Column(\"user_id\")\n    private int id;\n\n    @Column(\"user_name\")\n    private String name;\n\n    private int login;\n\n    private EnumUserStatus status;\n\n    @Column(\"`group`\")\n    private EnumGroup group;\n\n    private EnumVipLevel level;\n\n    private Date createTime;\n\n    @Ignore\n    private String other;\n}\n```\n\n## 初始化\n\n\n```java \n\nString url = \"jdbc:mysql://192.168.1.100:3307/g_main_test?useUnicode=true\u0026characterEncoding=utf-8\u0026serverTimezone=GMT%2B8\u0026useSSL=false\";\nString user =\"test\";\nString pass =\"123456\";\n\n// Mysql\nprotected Database getDatabase() { \n   return new Database(url,user,pass);\n} \n\n// Druid DataSource\nprotected Database getDruidDatabase() {\n    DruidDataSource dataSource = new DruidDataSource();\n    dataSource.setDriverClassName(\"com.mysql.cj.jdbc.Driver\");\n    dataSource.setUrl(url);\n    dataSource.setUsername(user);\n    dataSource.setPassword(pass);\n    return new Database(dataSource);\n}\n\n```\n\n## 查询\n\n### 列表查询\n\n```java\nDatabase db = getDatabase();\nIRepository\u003cUserInfo\u003e userInfoRepository =  db.getRepository(UserInfo.class);\n\n// getList()\nList\u003cUserInfo\u003e result1 =  userInfoRepository.getList();\n\n// getList(Sql sql)\nList\u003cUserInfo\u003e result2 = userInfoRepository.getList(Sql.builder().select().from(UserInfo.class));\n\n// getList(String sql,Object ... param)\nString sql = \"select * from user_info where user_id = ? \";\nList\u003cUserInfo\u003e result3 = userInfoRepository.getList(sql,1);\n\n// ** Dto getList **\nSql sql1 = Sql.builder().select(\" user_id as id, user_Name as name \").from(UserInfo.class).where(\"user_id = ?\",1);\nList\u003cUserInfoDto\u003e result4 =  db.getSqlQuery().getDtoList(UserInfoDto.class,sql1);\n\nString sql2 = \"select user_id as id, user_Name as name from user_info where user_id = ? \";\nList\u003cUserInfoDto\u003e result5 =  db.getSqlQuery().getDtoList(UserInfoDto.class,sql2,1);\n```\n\n \n\n### 获取对象\n\n```java\nDatabase db = getDatabase();\nIRepository\u003cUserInfo\u003e userInfoRepository =  db.getRepository(UserInfo.class);\n\n// getById(Object primaryKey)\nUserInfo result1 =  userInfoRepository.getById(1);\n\n// get(Sql sql)\nUserInfo result2 = userInfoRepository.get(\n        Sql.builder().select().from(UserInfo.class).where(\"user_id  = ?\",1));\n\n// get(String sql, Object ...  param)\nString sql = \"select * from user_info where user_id = ? \";\nUserInfo result3 = userInfoRepository.get(sql,1);\n\n// ** Dto get **\n// getDto(Class\u003cTDto\u003e returnType, Sql sql)\nUserInfoDto result4 = db.getSqlQuery().getDto(\n        UserInfoDto.class,Sql.builder().select(\"user_id as id, user_Name as name\").from(UserInfo.class).where(\"user_id  = ?\",1));\n```\n\n\n### 联表查询\n\n```java\nDatabase db = getDatabase();\nSql sql = Sql.builder()\n    .select(\"a.user_id as id,\" +\n            \"a.user_Name as name,\"+\n            \"b.id as typeId,\"+\n            \"b.name as typeName,\"+\n            \"a.login,\"+\n            \"a.status,\"+\n            \"a.group,\"+\n            \"a.level,\"+\n            \"a.create_time as createTime\")\n    .from(UserInfo.class,\"a\")\n    .join(UserType.class,\"b\")\n    .on(\"a.user_type_id = b.id\");\nList\u003cUserInfoDetailDto\u003e result =  db.getSqlQuery(.getDtoList(UserInfoDetailDto.class,sql); \n```\n\n\n### 分页\n\n```java\nDatabase db = getDatabase();\nIRepository\u003cUserInfo\u003e userInfoRepository =  db.getRepository(UserInfo.class);\n// getPageList(int pageIndex, int pageSize, Sql sql)\nPageList\u003cUserInfo\u003e result = userInfoRepository.getPageList(1,10,Sql.builder().select().from(UserInfo.class));\n```\n\n## Sql Lambda\n\n```java\nSql sql = Sql.builder()\n          .select(UserInfo::getId,UserInfo::getName)\n          .from(UserInfo.class)\n          .where(UserInfo::getName,\"Test\")\n          .whereIn(UserInfo::getId,1,2)\n          .orderBy(UserInfo::getCreateTime, OrderBy.DESC);\n                \n/*** [Sql语句] ***/\n// select user_id,user_name \n// FROM user_info \n// where user_name  = :p0 and user_id in (:p1,:p2)\n// order by create_time desc\n/*** [参数值] ***/\n// [Test],[1],[2]\n```\n \n## Sql or\n \n```java\nSql sql = Sql.builder().select().from(UserInfo.class)\n            .whereLike(UserInfo::getName,\"Test_2\")\n            .or()\n            .whereLike(UserInfo::getName,\"Test_2\")\n            .orderBy(UserInfo::getId);\n \n/*** [Sql语句] ***/\n// select * \n// from user_info \n// where user_name like :p0 \n// or \n// user_name like :p1 \n// order by user_id asc  \n/*** [参数值] ***/\n// [Test_2],[Test_2]\n```\n\n\n \n\n## Dto Mapper\n\n### ResultMap\n\n```java\nResultMap column  = new ResultMap();\ncolumn.put(UserInfo::getId, UserInfoDto::getId);\ncolumn.put(UserInfo::getName, \"name\");\ncolumn.put(UserInfo::getUserTypeId); \n\nSql sql = Sql.builder().select(\n         column)\n        .from(UserInfo.class)\n        .where(UserInfo::getName,\"Test\")\n        .whereIn(UserInfo::getId,1,2)\n        .orderBy(UserInfo::getCreateTime, OrderBy.DESC); \n\n/*** [Sql语句] ***/\n// select user_id  as id,\n// user_name  as name,\n// user_type_id \n// from user_info \n// where user_name  = :p0 \n// and user_id in (:p1,:p2)\n// order by create_time DESC\n/*** [参数值] ***/\n// [Test],[1],[2]\n```\n\n### SelectTo\n\n```java\nSql sql = Sql.builder()\n                .selectTo(UserInfoDto.class)\n                .from(UserInfo.class)\n                .where(UserInfo::getName,\"Test\")\n                .whereIn(UserInfo::getId,1,2)\n                .orderBy(UserInfo::getCreateTime, OrderBy.DESC);\n\n/*** [Sql语句] ***/\n// select createTime,\n// level,\n// `group` as group,\n// user_id as id,\n// user_name as name,\n// login,\n// status \n// from user_info \n// where user_name  = :p0 \n// and user_id in (:p1,:p2)\n// order by create_time DESC\n/*** [参数值] ***/\n// [Test],[1],[2]\n``` \n\n\n## 持久化\n\n\n### 新增\n\n```java\nDatabase db = getDatabase();\nIRepository\u003cUserInfo\u003e userInfoRepository =  db.getRepository(UserInfo.class);\nUserInfo domain = new UserInfo();\ndomain.setName(\"Test\");\ndomain.setLogin(10086);\ndomain.setPwd(\"123456\");\ndomain.setCreatTime(new Date());\nUserInfo user =   userInfoRepository.create(domain);\n```\n\n### 修改\n\n```java\nDatabase db = getDatabase();\nIRepository\u003cUserInfo\u003e userInfoRepository =  db.getRepository(UserInfo.class);\n// get \nUserInfo user =  userInfoRepository.get(Sql.builder().select().from(UserInfo.class).where(\"user_id = ?\",3399));\n// update\nuser.setName(\"Test_2 ## -- \"); \nuserInfoRepository.update(user); \n```\n\n### 修改2\n\n```java \nDatabase db = getDatabase();\nIRepository\u003cUserInfo\u003e userInfoRepository =  db.getRepository(UserInfo.class);\n// get \nUserInfo user =  userInfoRepository.get(Sql.builder().select().from(UserInfo.class).where(\"user_id = ?\",3399));\n// update\nUpdate\u003cUserInfo\u003e userInfoUpdate =  userInfoRepository.createUpdate();\n// 指定修改字段值\nuserInfoUpdate.set(UserInfo::getPwd,\"6543421\"); \nuserInfoRepository.update(user,userInfoUpdate);\n```\n\n### 删除\n\n```java\nDatabase db = getDatabase();\nIRepository\u003cUserInfo\u003e userInfoRepository =  db.getRepository(UserInfo.class);\n// get\nUserInfo user =  userInfoRepository.get(Sql.builder().select().from(UserInfo.class).where(\"user_id = ?\",3391));\n// delete\nuserInfoRepository.delete(user);\n```\n\n## 事务\n\n### 事务支持\n\n```java\ntry(Database db = getDatabase()){\n   // 开启事务\n   db.beginTransaction();\n   IRepository\u003cUserInfo\u003e userInfoIRepository =\n           db.getRepository(UserInfo.class); \n   UserInfo domain = new UserInfo();\n   domain.setName(\"Test\");\n   domain.setLogin(10086);\n   domain.setPwd(\"123456\");\n   domain.setCreateTime(new Date()); \n   // 新增\n   UserInfo user = userInfoIRepository.create(domain); \n   user.setName(\"Test_Update\");\n   // 修改\n   userInfoIRepository.update(user);  \n   // 提交事务\n   db.commit();\n   assert(user.getId()\u003e0):\"database transaction is error\";\n}  \n```\n\n\n**注意：如果使用事务请使用try(){} 用于释放数据库连接**\n\n## SQL语句执行\n\n```java\ntry(Database db = getDatabase()){\n   // 开启事务\n   db.beginTransaction();\n   final  String insertSql  =\n           \"INSERT INTO user_info (user_Name,password,login,create_time) VALUES (?,?,?,?)\";\n   // Create\n   int id =  db.getSqlRun().execute(\n           insertSql,\n           \"Execute Test\",\n           \"123456\",\n           10086,\n           new Date()).asInt();  \n   // Update\n   final String updateSql  =\n           \"UPDATE user_info set user_Name = ? WHERE user_id = ?\";\n   db.getSqlRun().execute(updateSql,\"Execute Test2\",id);\n   // 事务提交\n   db.commit();\n   // Select\n   Sql sql = Sql.builder()\n           .select(\"user_id as id, user_Name as name\")\n           .from(UserInfo.class).where(\"user_id  = ?\", id);\n   UserInfoDto resultDto = db.getSqlQuery().getDto(UserInfoDto.class,sql);  \n}\n```\n\n## Debug模式\n\n```java\nDatabase db = getDatabase();\ndb.isDebug(true); \n```\nDatabase指定isDebug(true)后，查询结果属性不能匹配会抛出异常信息,[例子](src/test/java/com/sqltest/db/DebugTest.java)\n \n\n## 获取表字段名\n\n```java\nSql2oUtils.getColumnName(UserInfo::getId);\n// 输出\nuser_id\n```\n\n## 其他\n\n- [示例数据库脚本](https://github.com/cotide/sql2o-plus/wiki/%E7%A4%BA%E4%BE%8B%E6%95%B0%E6%8D%AE%E5%BA%93%E8%84%9A%E6%9C%AC)\n- [示例项目](https://github.com/cotide/moni-webapi)\n\n## License\n\n- [Apache2](http://www.apache.org/licenses/LICENSE-2.0.txt)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcotide%2Fsql2o-plus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcotide%2Fsql2o-plus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcotide%2Fsql2o-plus/lists"}