微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

HibernateD D 语言的 ORM 框架

程序名称:HibernateD

授权协议: 未知

操作系统: 跨平台

开发语言:

HibernateD 介绍

HibernateD 是 D 语言的 ORM 框架,类似 Java 的 Hibernate,示例代码

import hibernated.core;


// Annotations of entity classes

class User {
    long id;
    string name;
    Customer customer;
    @ManyToMany // cannot be inferred, requires annotation
    LazyCollection!Role roles;
}

class Customer {
    int id;
    string name;
    // Embedded is inferred from type of Address
    Address address;

    Lazy!AccountType accountType; // ManyToOne inferred

    User[] users; // OnetoMany inferred

    this() {
        address = new Address();
    }
}

@Embeddable
class Address {
    string zip;
    string city;
    string streetAddress;
}

class AccountType {
    int id;
    string name;
}

class Role {
    int id;
    string name;
    @ManyToMany // w/o this annotation will be OnetoMany by convention
    LazyCollection!User users;
}

// create Metadata from annotations
EntityMetaData schema = new SchemaInfoImpl!(User, Customer, AccountType, 
                                 T1, TypeTest, Address, Role, GeneratorTest);




// setup DB connection factory
MysqLDriver driver = new MysqLDriver();
string url = MysqLDriver.generateUrl("localhost", 3306, "test_db");
string[string] params = MysqLDriver.setUserAndPassword("testuser", "testpasswd");
DataSource ds = ConnectionPoolDataSourceImpl(driver, url, params);

// create session factory
Dialect dialect = new MysqLDialect();
SessionFactory factory = new SessionFactoryImpl(schema, dialect, ds);
scope(exit) factory.close();

// Create schema if necessary
{
// get connection
Connection conn = ds.getConnection();
scope(exit) conn.close();
// create tables if not exist
factory.getDBMetaData().updateDBSchema(conn, false, true);
}

// Now you can use HibernateD

// create session
Session sess = factory.openSession();
scope(exit) sess.close();

// use session to access DB

// read all users using query
Query q = sess.createquery("FROM User ORDER BY name");
User[] list = q.list!User();

// create sample data
Role r10 = new Role();
r10.name = "role10";
Role r11 = new Role();
r11.name = "role11";
Customer c10 = new Customer();
c10.name = "Customer 10";
User u10 = new User();
u10.name = "Alex";
u10.customer = c10;
u10.roles = [r10, r11];
sess.save(r10);
sess.save(r11);
sess.save(c10);
sess.save(u10);

// load and check data
User u11 = sess.createquery("FROM User WHERE name=:Name").
                           setParameter("Name", "Alex").uniqueResult!User();
assert(u11.roles.length == 2);
assert(u11.roles[0].name == "role10" || u11.roles.get()[0].name == "role11");
assert(u11.roles[1].name == "role10" || u11.roles.get()[1].name == "role11");
assert(u11.customer.name == "Customer 10");
assert(u11.customer.users.length == 1);
assert(u11.customer.users[0] == u10);
assert(u11.roles[0].users.length == 1);
assert(u11.roles[0].users[0] == u10);

// remove reference
u11.roles.get().remove(0);
sess.update(u11);

// remove entity
sess.remove(u11);

HibernateD 官网

https://github.com/buggins/hibernated

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐