GithubHelp home page GithubHelp logo

mark8866 / neo Goto Github PK

View Code? Open in Web Editor NEW

This project forked from simonalong/neo

0.0 0.0 0.0 613 KB

Orm框架:基于JDBC开发的一个至简化且功能很全的Orm框架,相关文档:

Home Page: https://simons.gitbook.io/neo/

Java 98.77% FreeMarker 0.28% TSQL 0.95%

neo's Introduction

Neo:Orm框架

Neo是一个基于JDBC开发的至简化框架。开发源头,源于几个原因,一个是之前几个公司采用的都是各自单独开发的Orm框架,这些框架不是开源,如果想自己使用,很多时候不方便,也不合适。另外一个主要是接触到的之前公司老大开发的那个框架**很好,大道至简,对自己影响很大,该框架有很多**借鉴之处。另一个是mybatis确实感觉不是很好用,把很多简单的东西设计的很复杂。最后是由于自己有很多想法,比如sql的规范落入到框架中、sql耗时统计和sql优化监控等等很多特性,且在之前接触的一些Orm框架中都没有。因此就有想法设计一个符合自己想法的Orm框架,下面的一些设计和各种特性有有借鉴之前接触到的一些优秀**,也有在秉承着大道至简的原则进行的设计,框架刚起步,希望有兴趣的同学,一起添砖加瓦,共同成长。
下面介绍下框架的功能和一些用法,其中后面有(*)的部分是该框架亮点部分,也算特有部分。

maven引入

当前已经发布到maven**仓库,直接使用即可,最低版本0.3.0

<dependency>
  <groupId>com.github.simonalong</groupId>
  <artifactId>Neo</artifactId>
  <version>0.3.0</version>
</dependency>

快速入门

一个DB对应的一个对象Neo,操作表,则填入对应的表名即可

public void testDemo1() {
    String url = "jdbc:mysql://127.0.0.1:3306/neo?useUnicode=true&characterEncoding=UTF-8&useSSL=false";
    String user = "neo_test";
    String password = "neo@Test123";
    String tableName = "neo_table1";
    // 连接
    Neo neo = Neo.connect(url, user, password);

    // 插入
    NeoMap data = neo.insert(tableName, NeoMap.of("group", "value"));

    data.put("group", "value1");

    // 更新
    neo.update(tableName, data);

    // 删除
    neo.delete(tableName, data);

    // 查询一行
    neo.one(tableName, data);

    // 查询多行
    neo.list(tableName, data);

    // 查询指定列的一个值
    neo.value(tableName, "group", data);

    // 查询指定列的多个值
    neo.values(tableName, "group", data);

    // 查询分页
    neo.page(tableName, data, NeoPage.of(1, 20));

    // 执行sql
    neo.execute("select * from %s where group =?", tableName, "group1");

    // 事务
    neo.tx(()->{
        neo.update(tableName, NeoMap.of("id", 12, "group", "value1"));
        neo.one(tableName, 12);
        neo.update("neo_table2", NeoMap.of("column2", 12));
    });

    // 批量
    List<NeoMap> list = new ArrayList<>();
    list.add(NeoMap.of("group", "v1"));
    list.add(NeoMap.of("group", "v2"));
    list.add(NeoMap.of("group", "v3"));
    list.add(NeoMap.of("group", "v4"));
    neo.batchInsert(tableName, list);
}

指定表的话,就更简单,一个表对应一个对象NeoTable

public void testDemo2() {
    String url = "jdbc:mysql://127.0.0.1:3306/neo?useUnicode=true&characterEncoding=UTF-8&useSSL=false";
    String user = "neo_test";
    String password = "neo@Test123";
    String tableName = "neo_table1";
    // 连接
    Neo neo = Neo.connect(url, user, password);
    NeoTable table = neo.getTable(tableName);

    // 插入
    NeoMap data = table.insert(NeoMap.of("group", "value"));

    data.put("group", "value1");

    // 更新
    table.update(data);

    // 删除
    table.delete(data);

    // 查询一行
    table.one(data);

    // 查询多行
    table.list(data);

    // 查询指定列的一个值
    table.value("group", data);

    // 查询指定列的多个值
    table.values("group", data);

    // 查询分页
    table.page(data, NeoPage.of(1, 20));

    // 批量
    List<NeoMap> list = new ArrayList<>();
    list.add(NeoMap.of("group", "v1"));
    list.add(NeoMap.of("group", "v2"));
    list.add(NeoMap.of("group", "v3"));
    list.add(NeoMap.of("group", "v4"));
    table.batchInsert(list);
}

其他使用

也可以继承使用,针对业务接入,可以直接继承类AbstractBizService即可具备一个表的常见的所有功能,只需要实现如下两个方法即可

public class BizServiceTest extends AbstractBizService {

    public BizServiceTest() throws SQLException {
    }

    @Override
    public DbSync getDb() {
        String url = "jdbc:mysql://127.0.0.1:3306/neo?useUnicode=true&characterEncoding=UTF-8&useSSL=false";
        String user = "neo_test";
        String password = "neo@Test123";
        return Neo.connect(url, user, password);
    }

    @Override
    public String getTableName() {
        return "neo_table1";
    }

    @Test
    public void testInsert() {
        TestEntity entity = new TestEntity()
            .setGroup("ok")
            .setUserName("me")
            .setName("hello");
        insert(entity);
    }
}

更多功能

  • 数据库连接
  • 基本功能
  • DB异步
  • 结构信息
  • 批量功能
  • 命名转换
  • 单机事务
  • sql监控
  • 主从
  • join
  • 实体代码生成器
  • 分布式
    • 全局id
    • 分布式锁
    • 分布式事务(待支持)
  • 动态分库分表(待支持)
  • 多数据源(待验证)

详细的用法请看这里 Neo文档介绍

neo's People

Contributors

simonalong avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.