<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          HibernateDD 語(yǔ)言的 ORM 框架

          聯(lián)合創(chuàng)作 · 2023-09-30 02:23

          HibernateD 是 D 語(yǔ)言的 ORM 框架,類(lèi)似 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);
          瀏覽 17
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美成人三级在线视频 | 丰满人妻一区二区三区性色 | 国产午夜成人视频 | 操老外小逼视频网 | 青娱乐在线免费观看 |