{"id":15030351,"url":"https://github.com/braisdom/objectivesql","last_synced_at":"2025-05-15T15:08:38.043Z","repository":{"id":41293184,"uuid":"278270052","full_name":"braisdom/ObjectiveSql","owner":"braisdom","description":"Writing SQL using Java syntax","archived":false,"fork":false,"pushed_at":"2024-05-06T07:03:37.000Z","size":2600,"stargazers_count":1256,"open_issues_count":18,"forks_count":158,"subscribers_count":71,"default_branch":"master","last_synced_at":"2025-04-07T20:11:21.330Z","etag":null,"topics":["activerecord","java","java-api","java-orm","objsql","orm","orm-framework","rapid-development","sql","sql-programming"],"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/braisdom.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}},"created_at":"2020-07-09T05:19:03.000Z","updated_at":"2025-03-14T15:09:43.000Z","dependencies_parsed_at":"2024-05-06T08:27:05.899Z","dependency_job_id":"826f18b0-6d49-4ec0-be80-81fd02921f91","html_url":"https://github.com/braisdom/ObjectiveSql","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/braisdom%2FObjectiveSql","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/braisdom%2FObjectiveSql/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/braisdom%2FObjectiveSql/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/braisdom%2FObjectiveSql/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/braisdom","download_url":"https://codeload.github.com/braisdom/ObjectiveSql/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247721898,"owners_count":20985084,"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":["activerecord","java","java-api","java-orm","objsql","orm","orm-framework","rapid-development","sql","sql-programming"],"created_at":"2024-09-24T20:13:10.357Z","updated_at":"2025-04-07T20:11:30.263Z","avatar_url":"https://github.com/braisdom.png","language":"Java","readme":"ObjectiveSQL is an ORM framework in Java based on ActiveRecord pattern, which encourages rapid development and clean, codes with the least, and convention over configuration.\n\n\n### Key Features\n\n- With one annotation your `Class` has fully featured capabilities of SQL programming\n- Easy to relational(`has_one`, `has_many` and `belongs_to`) query and paged query\n- Writing SQL expressions(`arithmetic`, `comparison` and `logical`) using Java syntax\n\n### Why ObjectiveSQL\n\n- If your project focuses on data analysis based on relation database, and a lot of arithmetic expressions in SQL statement. ObjectiveSQL will help you write expressions conveniently and safely using Java syntax\n- If you don’t want to write Java codes of database access and various configuration files, ObjectiveSQL's dynamic code generation will help you access the database without coding\n\n### Performance(Oracle JMH)\n\n![query_perf](./doc/perf.png)\n\n### Installation\n\n##### IntelliJ IDEA plugin installation\n\n`Preferences/Settings` -\u003e `Plugins` -\u003e `Search with \"ObjectiveSql\" in market` -\u003e `Install`\n\n##### Maven dependencies\n\n```xml\n\u003c!-- In standalone --\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.github.braisdom\u003c/groupId\u003e\n    \u003cartifactId\u003eobjective-sql\u003c/artifactId\u003e\n    \u003cversion\u003e1.4.6\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n```xml\n\u003c!-- In Spring Boot --\u003e\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.github.braisdom\u003c/groupId\u003e\n  \u003cartifactId\u003eobjsql-springboot\u003c/artifactId\u003e\n  \u003cversion\u003e1.3.4\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\nRefer to the [pom.xml](https://github.com/braisdom/ObjectiveSql/blob/master/examples/mysql/pom.xml#L67) for more configuration\n\n### Examples\n\nObjectiveSQL provides full example for various databases below, You can open it directly with IntelliJ IDEA as a standalone project. In fact, they are not just examples, but also unit tests of ObjectiveSQL in various databases.\n\nIf you want to run without configuration, you can try: [SQLite](https://github.com/braisdom/ObjectiveSql/tree/master/examples/sqlite)\n\nOthers: [MySQL](https://github.com/braisdom/ObjectiveSql/tree/master/examples/mysql),  [Oracle](https://github.com/braisdom/ObjectiveSql/tree/master/examples/oracle),  [MS SQL Server](https://github.com/braisdom/ObjectiveSql/tree/master/examples/sqlserver), [PostgreSQL](https://github.com/braisdom/ObjectiveSql/tree/master/examples/postgres),  [Spring Boot](https://github.com/braisdom/ObjectiveSql/tree/master/examples/springboot-sample)\n\n#### Simple SQL programming without coding\n\n\u003e You define just a JavaBean with annotations\n```java\n@DomainModel\npublic class Member {\n    private String no;\n    \n    @Queryable\n    private String name;\n    private Integer gender;\n    private String mobile;\n    private String otherInfo;\n\n    @Relation(relationType = RelationType.HAS_MANY)\n    private List\u003cOrder\u003e orders;\n}\n```\n\n##### Persistence\n\n```java\nMember.create(newMember);\nMember.create(new Member[]{newMember1, newMember2, newMember3}, false);\n\nMember.update(1L, newMember, true);\nMember.update(\"name = 'Smith =\u003e Jackson'\", \"name = ?\", \"Alice\");\n\nMember.destroy(1L);\nMember.destroy(\"name = ?\", \"Mary\");\n```\n\n##### Counting and querying\n\n```java\nMember.countAll();\nMember.count(\"id \u003e ?\", 1);\nMember.queryByPrimaryKey(1);\nMember.queryFirst(\"id = ?\", 1);\nMember.query(\"id \u003e ?\", 1);\nMember.queryAll();\n```\n\n##### Paged querying\n\n```java\nPage page = Page.create(0, 10);\nPagedList\u003cMember\u003e members = Member.pagedQueryAll(page, Member.HAS_MANY_ORDERS);\n```\n\n##### Relation querying\n\n```java\nMember.queryAll(Member.HAS_MANY_ORDERS);\nMember.queryByPrimary(1, Member.HAS_MANY_ORDERS);\nMember.queryByName(\"demo\", Member.HAS_MANY_ORDERS);\n...\n```\n\n### Complex SQL programming\n\n```java\nOrder.Table orderTable = Order.asTable();\nSelect select = new Select();\n\n// In ObjectiveSQL, Java operator can be overloaded\nselect.project(sum(orderTable.amount) / sum(orderTable.quantity) * 100)\n        .from(orderTable)\n        .where(orderTable.quantity \u003e 30 \u0026\u0026\n            orderTable.salesAt.between(\"2020-10-10 00:00:00\", \"2020-10-30 23:59:59\"))\n        .groupBy(orderTable.productId);\n```\n\n```sql\nSELECT SUM(`T0`.`amount`) / SUM(`T0`.`quantity`) * 100\nFROM `orders` AS `T0`\nWHERE `T0`.`quantity` \u003e 30 AND \n       `T0`.`sales_at` BETWEEN '2020-10-10 00:00:00' AND '2020-10-30 23:59:59')\nGROUP BY `T0`.`product_id`\n```\n\n### Reference documentation\n\n- [English](https://github.com/braisdom/ObjectiveSql/wiki/ObjectiveSQL-Tutorial)\n- [Chinese(中文)](https://github.com/braisdom/ObjectiveSql/wiki/ObjectiveSQL-%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbraisdom%2Fobjectivesql","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbraisdom%2Fobjectivesql","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbraisdom%2Fobjectivesql/lists"}