# ObjectiveSql **Repository Path**: mirrors/ObjectiveSql ## Basic Information - **Project Name**: ObjectiveSql - **Description**: ObjectiveSQL(简称: objsql,中文译为: 对象化SQL或者面向对象SQL)是一种ORM 技术在Java 中的应用,其主要思想为ActiveRecord - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: https://www.oschina.net/p/objectivesql - **GVP Project**: No ## Statistics - **Stars**: 53 - **Forks**: 11 - **Created**: 2020-10-07 - **Last Updated**: 2023-08-17 ## Categories & Tags **Categories**: database-dev **Tags**: None ## 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. ### Key Features - With one annotation your `Class` has fully featured capabilities of SQL programming - Easy to relational(`has_one`, `has_many` and `belongs_to`) query and paged query - Writing SQL expressions(`arithmetic`, `comparison` and `logical`) using Java syntax ### Why ObjectiveSQL - 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 - 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 ### Performance(Oracle JMH) ![query_perf](./doc/perf.png) ### Installation ##### IntelliJ IDEA plugin installation `Preferences/Settings` -> `Plugins` -> `Search with "ObjectiveSql" in market` -> `Install` ##### Maven dependencies ```xml com.github.braisdom objective-sql 1.4.6 ``` ```xml com.github.braisdom objsql-springboot 1.3.4 ``` Refer to the [pom.xml](https://github.com/braisdom/ObjectiveSql/blob/master/examples/mysql/pom.xml#L67) for more configuration ### Examples ObjectiveSQL 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. If you want to run without configuration, you can try: [SQLite](https://github.com/braisdom/ObjectiveSql/tree/master/examples/sqlite) Others: [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) #### Simple SQL programming without coding > You define just a JavaBean with annotations ```java @DomainModel public class Member { private String no; @Queryable private String name; private Integer gender; private String mobile; private String otherInfo; @Relation(relationType = RelationType.HAS_MANY) private List orders; } ``` ##### Persistence ```java Member.create(newMember); Member.create(new Member[]{newMember1, newMember2, newMember3}, false); Member.update(1L, newMember, true); Member.update("name = 'Smith => Jackson'", "name = ?", "Alice"); Member.destroy(1L); Member.destroy("name = ?", "Mary"); ``` ##### Counting and querying ```java Member.countAll(); Member.count("id > ?", 1); Member.queryByPrimaryKey(1); Member.queryFirst("id = ?", 1); Member.query("id > ?", 1); Member.queryAll(); ``` ##### Paged querying ```java Page page = Page.create(0, 10); PagedList members = Member.pagedQueryAll(page, Member.HAS_MANY_ORDERS); ``` ##### Relation querying ```java Member.queryAll(Member.HAS_MANY_ORDERS); Member.queryByPrimary(1, Member.HAS_MANY_ORDERS); Member.queryByName("demo", Member.HAS_MANY_ORDERS); ... ``` ### Complex SQL programming ```java Order.Table orderTable = Order.asTable(); Select select = new Select(); // In ObjectiveSQL, Java operator can be overloaded select.project(sum(orderTable.amount) / sum(orderTable.quantity) * 100) .from(orderTable) .where(orderTable.quantity > 30 && orderTable.salesAt.between("2020-10-10 00:00:00", "2020-10-30 23:59:59")) .groupBy(orderTable.productId); ``` ```sql SELECT SUM(`T0`.`amount`) / SUM(`T0`.`quantity`) * 100 FROM `orders` AS `T0` WHERE `T0`.`quantity` > 30 AND `T0`.`sales_at` BETWEEN '2020-10-10 00:00:00' AND '2020-10-30 23:59:59') GROUP BY `T0`.`product_id` ``` ### Reference documentation - [English](https://github.com/braisdom/ObjectiveSql/wiki/ObjectiveSQL-Tutorial) - [Chinese(中文)](https://github.com/braisdom/ObjectiveSql/wiki/ObjectiveSQL-%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97)