3

源码地址:https://github.com/braisdom/ObjectiveSql/tree/master/springboot_example

ObjectiveSQL(简称: objsql,中文译为: 对象化SQL或者面向对象SQL)是一种ORM 技术在Java 中的应用,其主要思想为ActiveRecord,使传统应用程序开发中的VO,PO等变为真正的Java Class,不仅拥有相关状态,同时也应有相关行为。ObjectiveSQL 基于JSR 269,实现了数据库访问的动态代码生成,并且在其中封装了关系型数据库的常用逻辑,使得应用程序开发变得极其简单,由于动态代码生成,ObjectiveSQL 不依赖外部依赖注入型框架,可以在任何环境下独立运行。

SpringBoot 是一种快速构造应用程序的框架,以动态代理(Dynamic Proxy)为主,基于Java Annotation 进行应用系统扩展点,从而实现对基础框架无感的形式进行系统开发。

ObjectiveSQL 和SpringBoot 可以无缝结合,类似于Rails 中的WEB 和ActiveRecord 开发一样,具体代码如下:

添加Maven 依赖:

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

Controller 定义:

import com.github.braisdom.example.RequestObject;
import com.github.braisdom.example.ResponseObject;
import com.github.braisdom.example.model.Member;
import com.github.braisdom.example.model.Order;
import org.springframework.web.bind.annotation.*;

import java.sql.SQLException;
import java.util.List;

@RestController
public class MembersController {

    /**
     * The post body is in "resources/json/create_member.json"
     */
    @PostMapping("/members")
    public ResponseObject create(@RequestBody RequestObject rawMember) throws SQLException {
        Member dirtyMember = Member.newInstanceFrom(rawMember, false);
        Member member = Member.create(dirtyMember, true);
        return ResponseObject.createSuccessResponse(member);
    }

    @GetMapping("/members/{no}")
    public ResponseObject getMember(@PathVariable("no") String memberNo) throws SQLException {
        Member member = Member.queryByNo(memberNo);
        return ResponseObject.createSuccessResponse(member);
    }

    @GetMapping("/members")
    public ResponseObject getMembers() throws SQLException {
        List<Member> members = Member.queryAll();
        return ResponseObject.createSuccessResponse(members);
    }

    @GetMapping("/members/{no}/orders")
    public ResponseObject getMemberOrders(@PathVariable("no") String no) throws SQLException {
        Member member = Member.queryByNo(no, Member.HAS_MANY_ORDERS, Order.HAS_MANY_ORDER_LINES);
        return ResponseObject.createSuccessResponse(member);
    }

    @PutMapping("/members/{no}")
    public ResponseObject updateMember(@PathVariable("no") String memberNo,
                                       @RequestBody RequestObject rawMember) throws SQLException {
        Member member = Member.queryByNo(memberNo);
        Member.update(member.getId(), Member.newInstanceFrom(rawMember), true);
        return ResponseObject.createSuccessResponse();
    }

    @DeleteMapping("/members/{no}")
    public ResponseObject deleteMember(@PathVariable("no") String memberNo) throws SQLException {
        int deleteCount = Member.destroy("member_no = ?");
        return ResponseObject.createSuccessResponse(deleteCount);
    }
} 
import com.github.braisdom.objsql.annotations.Column;
import com.github.braisdom.objsql.annotations.DomainModel;
import com.github.braisdom.objsql.annotations.Queryable;
import com.github.braisdom.objsql.annotations.Relation;
import com.github.braisdom.objsql.relation.RelationType;

import java.util.List;

@DomainModel
public class Member {
    @Queryable
    @Column(updatable = false)
    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 无需定义任务方法,就要以实现对数据库的INSERT, UPDATE, DELETE, SELETE 等操作,这些方法均由ObjectiveSQL 自动生成.


Braisdom
19 声望7 粉丝

Braisdom, ObjectiveSql 创始人,主要开发者,有着15+年软件开发&设计经验,精通Java, Ruby, Python 等语言,对面向对象设计,分布式,高并发等系统设计有独立的见解,同时也参与多个在线系统的开发和维护工作。...