<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # Hibernate Derby 教程 > 原文: [http://zetcode.com/db/hibernatederby/](http://zetcode.com/db/hibernatederby/) 在本教程中,我們將學習如何在 Derby 數據庫中使用 Hibernate ORM 工具。 本教程中的項目是在 NetBeans IDE 中創建的。 [Tweet](https://twitter.com/share) Hibernate 是 Java 語言的對象關系映射框架。 它提供了一個框架,用于將面向對象的域模型映射到關系數據庫。 對象關系映射(ORM)是一種編程技術,用于在面向對象的編程語言中的不兼容類型系統之間轉換數據。 Apache Derby 是一個完全用 Java 實現的開源關系數據庫。 Derby 占用空間小,易于部署和安裝。 它支持嵌入式和客戶端/服務器模式。 Hibernate 查詢語言(HQL)是類似于 SQL 的面向對象的查詢語言。 SQL 在表和列上運行,而 HQL 在持久對象及其屬性上運行。 HQL 了解繼承,多態和關聯。 最終,HQL 查詢由 Hibernate 轉換為 SQL 查詢,從而對數據庫執行某些操作。 除了其本地 API,Hibernate 還包含 Java Persistence API(JPA)的實現。 ## 配置信息 `hibernate.cfg.xml`文件定義了 Hibernate 配置信息。 它包含有關數據庫連接,資源映射和其他連接屬性的信息。 `SessionFactory`是工廠類,通過它我們可以獲取會話并執行數據庫操作。 `Session`是 Java 應用和 Hibernate 之間的主要運行時接口。 會話的主要功能是為映射實體類的實例提供創建,讀取和刪除操作。 ## 在 Derby 中創建數據庫 我們在 Derby 中創建一個新的`testdb`數據庫。 它會有一個簡單的`Cars`表。 ![Database creation](https://img.kancloud.cn/f6/a8/f6a8047083d0aeebfed1a31f5982223d_349x182.jpg) 圖:數據庫創建 在 NetBeans 的“服務”選項卡中,右鍵單擊 Java DB 節點,然后選擇“創建數據庫”選項。 我們給它命名為`testdb`。 請注意,數據庫位于用戶主目錄的`.netbeans_derby`目錄中。 `cars_derby.sql` ```java CREATE TABLE CARS(ID INTEGER NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), NAME VARCHAR(30), PRICE INT); INSERT INTO CARS(Name, Price) VALUES('Audi', 52642); INSERT INTO CARS(Name, Price) VALUES('Mercedes', 57127); INSERT INTO CARS(Name, Price) VALUES('Skoda', 9000); INSERT INTO CARS(Name, Price) VALUES('Volvo', 29000); INSERT INTO CARS(Name, Price) VALUES('Bentley', 350000); INSERT INTO CARS(Name, Price) VALUES('Citroen', 21000); INSERT INTO CARS(Name, Price) VALUES('Hummer', 41400); INSERT INTO CARS(Name, Price) VALUES('Volkswagen', 21600); ``` 這是創建`Cars`表的 SQL。 汽車對象的 ID 會自動增加。 我們可以使用 NetBeans 工具創建`Cars`表。 我們右鍵單擊“數據庫”節點,然后選擇“新建連接”選項。 ![Connections](https://img.kancloud.cn/11/94/1194c71b1a3f51193b20849bf5c549f9_349x108.jpg) 圖:連接 創建一個新的連接對象; 它由橙色圖標表示。 其上下文菜單提供了用于連接到指定數據庫并執行命令的選項。 “執行命令”選項顯示了執行 SQL 命令的工具。 在此窗口中,我們可以使用上面的 SQL 創建`Cars`表。 ## 本機 Hibernate API 和 XML 映射 在本部分中,我們將創建一個 Java 控制臺應用,該應用在 Derby 數據庫上執行一些數據庫任務。 我們使用 Hibernate 本機 API 和 XML 映射。 ![Project structure in NetBeans](https://img.kancloud.cn/f5/6e/f56eb2b19f8159302e5adc653997a2d6_270x361.jpg) NetBeans 中的項目結構 在上圖中,我們可以看到 NetBeans IDE 中的項目結構。 `pom.xml` ```java <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zetcode</groupId> <artifactId>HibernateDerbyEx</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.apache.derby</groupId> <artifactId>derbyclient</artifactId> <version>10.12.1.1</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.2.2.Final</version> </dependency> </dependencies> <build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> <resource> <directory>src/main/resources</directory> </resource> </resources> </build> </project> ``` 在`pom.xml`文件中,我們定義兩個依賴項:`hibernate-core`庫和`derbyclient`驅動程序。 在`<build>`元素中,我們讓構建系統包含 XML 文件-我們將 XML 映射文件放入`src/main/java`目錄中。 hibernate.cfg.xml ```java <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">org.apache.derby.jdbc.ClientDriver</property> <property name="hibernate.connection.username">app</property> <property name="hibernate.connection.password">ap</property> <property name="hibernate.connection.url">jdbc:derby://localhost:1527/testdb</property> <!-- Enable Hibernate's automatic session context management --> <property name="current_session_context_class">thread</property> <property name="hibernate.dialect"<org.hibernate.dialect.DerbyTenSevenDialect</property> <mapping resource="com/zetcode/hibernate/Car.hbm.xml"></mapping> </session-factory> </hibernate-configuration> ``` 在 Hibernate 配置文件中,我們提供了 Derby 數據庫的連接屬性。 我們啟用了 Hibernate 的自動會話上下文管理,并指定了 Derby SQL 方言。 映射與`<mapping>`元素一起添加。 我們有一個`Car`對象到`CARS`表的映射。 `Car.java` ```java package com.zetcode.bean; public class Car { private Long Id; private String Name; private Integer Price; public Long getId() { return Id; } public void setId(Long Id) { this.Id = Id; } public String getName() { return Name; } public void setName(String Name) { this.Name = Name; } public Integer getPrice() { return Price; } public void setPrice(Integer Price) { this.Price = Price; } @Override public String toString() { return String.format("Car Id: %d Name: %s; Price: %d", Id, Name, Price); } } ``` 這是一個`Car` bean。 它具有三個屬性以及相應的獲取器和設置器。 Car.hbm.xml ```java <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-mapping> <class name="com.zetcode.bean.Car" table="CARS" catalog="app"> <id name="Id" type="java.lang.Long"> <column name="Id" /> <generator class="identity" /> </id> <property name="Name" type="string"> <column name="Name" length="30"/> </property> <property name="Price" type="integer"> <column name="Price" /> </property> </class> </hibernate-mapping> ``` 在`Car.hbm.xml`文件中,我們提供`Car`類和`CARS`表之間的映射。 我們將類的屬性映射到數據庫表的列。 在`<hibernate-mapping>`和`</hibernate-mapping>`元素之間指定了映射。 ```java <generator class="identity" /> ``` `generator`元素通知 Hibernate 使用什么策略來生成主鍵。 `identity`生成器類允許根據需要自動增加`integer`/`bigint`列。 此生成器受 Derby 支持。 `HibernateUtils.java` ```java package com.zetcode.util; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtils { private HibernateUtils() {} private static final SessionFactory sessionFactory; static { try { sessionFactory = new Configuration().configure().buildSessionFactory(); } catch (Throwable ex) { System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } } public static SessionFactory getSessionFactory() { return sessionFactory; } public static void shutdown() { getSessionFactory().close(); } } ``` `HibernateUtils`是一個幫助程序類,用于處理啟動并訪問`SessionFactory`以獲取會話對象。 然后,使用會話對象訪問數據庫。 ```java sessionFactory = new Configuration().configure().buildSessionFactory(); ``` 該行從`hibernate.cfg.xml`文件創建一個`SessionFactory`。 ```java getSessionFactory().close(); ``` 該行關閉緩存和連接池。 `CarService.java` ```java package com.zetcode.service; import com.zetcode.bean.Car; import com.zetcode.util.HibernateUtils; import java.util.List; import org.hibernate.Session; public class CarService { private CarService() {}; public static Car getCarById(Long id) { Car car; try (Session session = HibernateUtils.getSessionFactory().openSession()) { car = session.get(Car.class, id); } return car; } public static List<Car> getCars() { List<Car> cars; try (Session session = HibernateUtils.getSessionFactory().openSession()) { cars = session.createQuery("from Car").list(); } return cars; } public static void save(Car car) { try (Session session = HibernateUtils.getSessionFactory().openSession()) { session.beginTransaction(); session.save(car); session.getTransaction().commit(); } } } ``` 在`CarService`類中,我們有一些服務方法,可通過其 ID 獲取汽車,獲取所有汽車并保存新汽車。 ```java try (Session session = HibernateUtils.getSessionFactory().openSession()) { car = session.get(Car.class, id); } ``` `HibernateUtils`用于獲取并打開會話對象。 `Session`的`get()`方法返回具有給定標識符的給定實體類的持久實例,如果沒有這樣的持久實例,則返回`null`。 ```java cars = session.createQuery("from Car").list(); ``` `createQuery()`方法為給定的 HQL 查詢字符串創建`Query`的新實例。 `from Car`查詢返回`Car`類的所有實例。 ```java session.save(car); ``` `save()`方法保留給定實例。 `HibernateDerbyEx.java` ```java package com.zetcode.main; import com.zetcode.bean.Car; import com.zetcode.service.CarService; import com.zetcode.util.HibernateUtils; import java.util.List; public class HibernateDerbyEx { public static void main(String[] args) { Long id = 1L; Car car = CarService.getCarById(id); System.out.println(car); Car newCar = new Car(); newCar.setName("Toyota"); newCar.setPrice(34500); CarService.save(newCar); List<Car> cars = CarService.getCars(); for (Car mycar : cars) { System.out.println(mycar); } HibernateUtils.shutdown(); } } ``` 這是主要的應用類。 我們通過其 ID 獲得一輛汽車,保存一輛新汽車,并從數據庫表中列出所有汽車。 ```java Long id = 1L; Car car = CarService.getCarById(id); ``` 我們使用`CarService`的`getCarById()`方法通過汽車 ID 檢索汽車。 ```java Car newCar = new Car(); newCar.setName("Toyota"); newCar.setPrice(34500); CarService.save(newCar); ``` 將創建新車并將其保存到數據庫中。 ```java List<Car> cars = CarService.getCars(); for (Car mycar : cars) { System.out.println(mycar); } ``` 我們從`CARS`表中列出了所有汽車。 ```java HibernateUtils.shutdown(); ``` 最后,我們關閉打開的資源。 ## 本機 Hibernate API 和注解映射 在本部分中,我們將創建一個 Java 控制臺應用,該應用在 Derby 數據庫上執行一些數據庫任務。 我們使用 Hibernate 本機 API 和注解映射。 `pom.xml`,`CarService.java`,`HibernateDerbyNativeEx.java`和`HibernateUtils.java`文件不變。 `hibernate.cfg.xml`和`Car.java`確實發生了變化。 hibernate.cfg.xml ```java <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">org.apache.derby.jdbc.ClientDriver</property> <property name="hibernate.connection.username">app</property> <property name="hibernate.connection.password">ap</property> <property name="hibernate.connection.url">jdbc:derby://localhost:1527/testdb</property> <!-- Enable Hibernate's automatic session context management --> <property name="current_session_context_class">thread</property> <property name="hibernate.dialect">org.hibernate.dialect.DerbyTenSevenDialect</property> <mapping class="com.zetcode.bean.Car"></mapping> </session-factory> </hibernate-configuration> ``` 在`hibernate.cfg.xml`文件中,`<mapping>`元素已更改。 ```java <mapping class="com.zetcode.bean.Car"></mapping> ``` 我們使用`class`屬性指向 Java 實體,其中包含映射注解。 `Car.java` ```java package com.zetcode.bean; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="CARS") public class Car implements Serializable { private Long Id; private String Name; private Integer Price; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public Long getId() { return Id; } public void setId(Long Id) { this.Id = Id; } public String getName() { return Name; } public void setName(String Name) { this.Name = Name; } public Integer getPrice() { return Price; } public void setPrice(Integer Price) { this.Price = Price; } @Override public String toString() { return String.format("Car Id: %d Name: %s; Price: %d", Id, Name, Price); } } ``` 在`Car.java`類中,我們使用注解定義映射。 類屬性的名稱和表列的名稱將自動配對。 如果名稱不同,則必須使用`@Column`注解指定列名稱。 ```java @Entity @Table(name="CARS") public class Car implements Serializable { ``` 該類用`@Entity`注解裝飾; `@Table`注解指定被注解實體的主表。 ```java @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public Long getId() { ``` `@Id`注解指定實體的主鍵,`@GeneratedValue`提供規范主鍵值的生成策略。 在本教程中,我們介紹了 Hibernate ORM。 我們已經使用了 Derby 數據庫。 ZetCode 具有以下相關教程: [EclipseLink 教程](/java/eclipselink/), [MySQL Java 教程](/db/mysqljava/), [JDBC 模板教程](db/jdbctemplate/)和 [Apache Derby 教程](/db/apachederbytutorial/)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看