欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  资讯频道

Darks ORM框架Beta版发布

程序员文章站 2022-03-06 22:24:47
...

Darks ORM框架是多年前开发的一个Java web ORM框架,现在整理更新后发布。Darks ORM框架综合了hibernate及mybatis的特点,同时也加入了很多新元素。它可以像hibernate一样通过简单易用的API接口进行CRUD数据库操作,也可以像mybatis一样通过XML分离进行高效可配的操作;同时它可以混合两种调用方式,简单普遍的操作采用API,复杂的操作采用XML映射,集各家之所长。并且它可以在XML映射时通过python/JAVA/Javascript进行面向切面的动态处理。

 

开源地址https://github.com/liulhdarks/darks-orm

发布地址https://github.com/liulhdarks/darks-orm/releases

 

Feature

  • 支持通过session直接调用CRUD API方法(对象映射方法以及JDBC方法)。
  • 采用注解方式配置数据模型实体。
  • 支持链式数据源。如果主数据源出现异常,会启用子节点数据源,以此类推。
  • 支持一对一、一对多、多对一注解方式的关联查询。
  • 支持在实体模型类方法上配置query注解。可直接调用实体方法进行相关查询。
  • 框架全部采用懒加载机制。
  • 支持单对象查询、分页查询、集合查询、级联查询。
  • 默认集成BoneCP数据连接池框架。
  • 支持Spring集成配置。配置简单易用。
  • 支持XML映射的SQL mapper。支持DML及DDL配置。
  • SQL mapper支持if/elseif/else/foreach/where/set/trim标签的相互嵌套。
  • 支持Python/Javascript/Java脚本对SQL mapper进行面向切面的开发。
  • 默认集成Ehcache缓存框架。

API调用

List users = session.queryList(User.class, "select * from users where name = ?", "darks");
Page page = session.queryPageList(User.class, "select * from users", page, pageSize);
session.save(new User(....));
session.update(user);
session.delete(User.class, userId);
session.delete(user);
session.executeQuery(....);

 

SQL Mapper调用

<tag id="fieldsUser">
id,name,pwd,depart_id
</tag>

<Query id="queryUsersComplex" queryType="list" resultType="monitor">
    select 
    <include refid="fieldsUser"/>
    from users 
    <where>
        <if test ="user.type != null">
            <if test="user.type == 1">
                type=#user.type
            </if>
            <elseif test="user.type == 2">
                type=#user.type
            </elseif>
            <else>
                type=#user.type
            </else>
        </if>
    </where>
    limit 10
</Query>

<Update id="updateUserEntity">
    update users 
    <set>
        <if test="user.name != null">
            name = #user.name,
        </if>
        <if test="user.pwd != null">
            pwd = #user.pwd,
        </if>
        <if test="#1.type > 0">
            type = #user.type,
        </if>
    </set>
    where id=#user.id
</Update>

 

脚本切面开发

<Query id="queryUsersComplex" queryType="list" resultType="monitor">
    select 
    <include refid="fieldsUser"/>
    from users 
    <where>
        <if test ="user.type != null">
            <if test="user.type == 1">
                type=#user.type
            </if>
            <elseif test="user.type == 2">
                type=#user.type
            </elseif>
            <else>
                type=#user.type
            </else>
        </if>
    </where>
    limit 10
    <aspect>
        <jython className="TestAspect">
            class TestAspect(IAspect):
                def before(self):
                    print __DATA.sql
                    for _user in __DATA.methodParams:
                        print _user
                    __DATA.sql = "select * from users limit 5"
                    return 1
        </jython>
    </aspect>
</Query>