EntityD 語言的 ORM 框架
Entity 是 D 語言( DLang )數(shù)據(jù)庫操作 ORM 框架,設(shè)計(jì)參照 javax JPA 實(shí)現(xiàn),具有很好的擴(kuò)展性和規(guī)范性,數(shù)據(jù)庫驅(qū)動依賴 HuntLabs 開發(fā)的 database for dlang 。
特性
-
實(shí)現(xiàn)了完整的 CriteriaQuery 支持
-
對 Repository 也有部分封裝
-
完全對象化查詢,不用考慮底層數(shù)據(jù)庫驅(qū)動
-
實(shí)現(xiàn) EQL(Entity Query Language)實(shí)現(xiàn)對象化 SQL 查詢語言
支持的數(shù)據(jù)庫
-
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 = "[email protected]";
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);
}
評論
圖片
表情
