Entity 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
Entity 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
授权协议: Apache
开发语言: D语言 查看源码 »
操作系统: 跨平台
收录时间: 2018-05-14
提 交 者: 冰力

Entity 是 D 语言( DLang )数据库操作 ORM 框架,设计参照 javax JPA 实现,具有很好的扩展性和规范性,数据库驱动依赖 HuntLabs 开发的 database for dlang

特性

  1. 实现了完整的 CriteriaQuery 支持

  2. Repository 也有部分封装

  3. 完全对象化查询,不用考虑底层数据库驱动

  4. 实现 EQL(Entity Query Language)实现对象化 SQL 查询语言

支持的数据库

  • PostgreSQL 9.0+

  • MySQL 5.1+

使用示例

import hunt.entity;

@Table("users")
class User : Entity
{
    @PrimaryKey
    @AutoIncrement
    int id;

    string name;
    double money;
    string email;
    bool status;
}

void main()
{
    DatabaseOption options = new DatabaseOption("mysql://root:123456@localhost:3306/huntblog?charset=utf-8");
    EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("default", options);
    EntityManager em = entityManagerFactory.createEntityManager();

    // begin transaction
    em.getTransaction().begin();

    // define your database existing row id in here
    int id = 10;

    auto user = em.find!User(id);
    log("User name is: ", user.name);

    // commit transaction
    em.getTransaction().commit();

    em.close();
    entityManagerFactory.close();
}

Insert row

    auto user = new User();
    user.name = "Brian";
    user.email = "brian@huntlabs.cn";
    user.money = 99.9;
    
    // insert user
    em.persist(user);
    log("User id is: ", user.id);

Delete row

    int n = em.remove!User(id);
    log("The number of users deleted is: ", n);

Update row

    auto user = em.find!User(id);
    log("User name is: ", user.name);
    user.name = "zoujiaqing";
    em.merge!User(user);
    log("The number of users updated is: ", n);

Use CriteriaQuery to find

    // create CriteriaBuilder object from em
    CriteriaBuilder builder = em.getCriteriaBuilder();

    CriteriaQuery!User criteriaQuery = builder.createQuery!User;
    Root!User root = criteriaQuery.from();
    Predicate p1 = builder.equal(root.User.id, id);
    TypedQuery!User typedQuery = em.createQuery(criteriaQuery.select(root).where(p1));

    auto user = typedQuery.getSingleResult();

    log("User name is: ", user.name);

Use CriteriaQuery to Multi-condition find

    // create CriteriaBuilder object from em
    CriteriaBuilder builder = em.getCriteriaBuilder();

    CriteriaQuery!User criteriaQuery = builder.createQuery!User;
    Root!User root = criteriaQuery.from();

    Predicate p1 = builder.lt(root.User.id, 1000);  // User id is less than 1000.
    Predicate p2 = builder.gt(root.User.money, 0);  // User money is greater than 0.
    Predicate p3 = builder.like(root.User.name, "z%");  // User name prefix is z.

    TypedQuery!User typedQuery = em.createQuery(criteriaQuery.select(root).where(builder.and(p1, p2), p3));
    User[] users = typedQuery.getResultList();

    log("The number of users found is: ", users.length);

EQL 使用

// Example for sample SELECT
auto query = em.createQuery!(User)("SELECT u FROM User u");

foreach(user; query.getResultList())
{
	logDebug(user.name);
}

 

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

Entity 的相关资讯

Entity 的相关博客

Entity Framework只entity与DbContext的分离

说明:以下例子采用的是DB first的模式 在之前的webform开发模式中我们习惯性性的会建立这样的一些类库:Model、DAL、BLL。。...

An entity cannot be annotated with both @Entity and @MappedSuperclass: com.example1.demo1.Entity....

项目问SpringDataJpa项目,在运行的过程中出现的以下错误: Caused by: org.hibernate.AnnotationException: An entity cann...

HTML Entity

1.1 介绍 在编写HTML页面时,需要用到"<"、">"、"空格"等符号,直接输入这些符号时,会错误的把它们与标记混在一起,非常不利...

@Entity 和 @Table

Java Persistence API定义了一种定义,可以将常规的普通Java对象(有时被称作POJO)映射到数据库。 这些普通Java对象被称作E...

entity cannot be tracked

背景:EF Core项目中使用InMemory作为数据库提供程序,编写单元测试。 报错:“The instance of entity type 'Movie' cannot ...

[entity framework core] Entity Framework Core One to One Relationships

<font face="Comic Sans MS"> https://www.learnentityframeworkcore.com/configuration/one-to-one-relationship-configurat...

could not load an entity

nested exception is org.hibernate.exception.SQLGrammarException :could not load an entity XXX...

Attaching an entity of type 'xxx' failed because another entity of the same type already ...

问题的详细描述: Attaching an entity of type 'xxxxx' failed because another entity of the same type already has the s...

Using an entity resolver

Most XML and HTML developers are familiar with entity references, the odd little XML constructs you often see that be...

评论 (3)

加载中
楼主支持调试吗
2019/11/15 18:28
回复
举报
现在搞D, 用什么编辑器呢?
2018/05/14 23:39
回复
举报
冰力软件作者
VSCode 和 idea IDE都有比较好的支持。
2019/07/06 11:00
回复
举报
更多评论
3 评论
9 收藏
分享
返回顶部
顶部