9

Java ORM 框架,基于ActiveRecored 模式

 3 years ago
source link: https://github.com/braisdom/ObjectiveSql
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

ObjectiveSql’s mission is to provide the most intuitive and convenient approach to access various databases, without configuration, without coding relevant to JDBC & ORM . It is an abstraction and encapsulation of java in relation database domain logic.

ObjectiveSql-based programming is the best practice in ActiveRecord pattern in Java, which incorporates both behavior and data and avoids meaningless Interface declaration of Java. Thus, ObjectiveSql-based programming will change the way to build an application base on relation database especially in the WEB development.

Features

  • Defining a domain model, which carries the query and persistence capabilities by itself, no configuration, no no-implementational Interface
  • Validating the Java Bean with Jakarta Bean Validation integrated to ObjectiveSql
  • Database transactions simply add an Annotation to the method
  • Add Queryable annotation to field, which can be queried by static method queryByFieldName

Defining domain models

@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<Order> orders;
}

@DomainModel
public class Order {
    private String no;
    private Integer memberId;
    private Double amount;
    private Double quantity;

    @Relation(relationType = RelationType.BELONGS_TO)
    private Member member;
}

Query methods

Member member = Member.queryByPrimaryKey(11);
Member member = Member.queryFirst("id = ?", 11);
List<Member> members = Member.query("id > ?", 8);
List<Member> members = Member.queryAll();
int count = Member.count("id > ?", 10);
...

Validation methods

try {
    Map<String, String> requestObject = ...; // From the POST request of SpringBoot
    Member rawMember = Member.newInstanceFrom(requestObject, false);
    newMember.validate(); //Skip the validation
} catch(ValidationException ex) {
    ...
}

Persistence methods

Member newMember = new Member();
// To set the field value for "newMember"
newMember.save(false); //Skip the validation
// newMember.save(true); // Validating the field value before save
Map<String, String> requestObject = ...; // From the POST request of SpringBoot
Member rawMember = Member.newInstanceFrom(requestObject, false);
newMember.save(false); //Skip the validation
// newMember.save(true); // Validating the field value before save
Member.update(1, changedMemberInstance, false);
Member.destory(1);
Member.destory("id = ?", 1);
...

The relation query

Member member = Member.queryPrimary(1, Member.HAS_MANY_ORDERS);
List<Order> orders = member.getOrders();
Member member = Member.queryPrimary(1, Member.HAS_MANY_ORDERS);
List<Order> orders = member.getOrders();
Member member = Member.queryByName("demo", Member.HAS_MANY_ORDERS);
List<Order> orders = member.getOrders();

Transactional

@DomainModel
public class Order {
    private String no;
    private Integer memberId;
    private Double amount;
    private Double quantity;

    @Relation(relationType = RelationType.BELONGS_TO)
    private Member member;

    @Transactional
    public static void makeOrder(Order order, OrderLine... orderLines) throws SQLException {
        Order.create(order, false);
        OrderLine.create(orderLines, false);
    }
}

Guides/ 中文

If you are using Maven just add the following dependency to your pom.xml:

<dependency>
    <groupId>com.github.braisdom</groupId>
    <artifactId>objective-sql</artifactId>
    <version>1.3.4</version>
</dependency>

Installing IntelliJ Plugin: Preferences/Settings -> Plugins -> Search with "ObjectiveSql" in market -> Install


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK