Hibernate系列1:入門程式
阿新 • • 發佈:2018-12-16
1.傳統的java資料庫連線
在傳統的開發中,如果要建立java程式和資料庫的連線,通常採用JDBC或者Apache Commons DbUtils開發包來完成。他們分別有以下特點:
JDBC:
優點:1.底層連線,效率高
缺點:需要手寫sql語句,程式碼重複多,封裝結果集繁瑣
DbUtils:
優點:結果集封裝可直接呼叫,封裝JDBC,效率較高
缺點:需要手寫sql語句
2.Hibernate的概念:
Hibernate是一個 輕量級、企業級、開源的 持久層 ORM框架:
- 輕量級:依賴資源少
- 企業級:適合在企業級應用中使用
- 開源:原始碼開放
- 持久層:完成資料持久化的邏輯層
- ORM: Object Relationship Mapping,物件關係對映
3.Hibernate的入門程式:
-
- 建立專案,java專案或web專案,此處我們建立java專案
- 匯入jar包,匯入需要的mysql-connector,hibernate核心jar包
-
- 建立實體類
//學生實體類 package domain; import java.io.Serializable; public class Student implements Serializable {private int stuId; private String stuName; private String stuMemo; public int getStuId() { return stuId; } public void setStuId(int stuId) { this.stuId = stuId; } public String getStuName() { return stuName; } public void setStuName(String stuName) {this.stuName = stuName; } public String getStuMemo() { return stuMemo; } public void setStuMemo(String stuMemo) { this.stuMemo = stuMemo; } @Override public String toString() { return "Student [stuId=" + stuId + ", stuName=" + stuName + ", stuMemo=" + stuMemo + "]"; } }
-
- 編寫配置檔案,包括Hibernate實體類對映檔案和Hibernate主配置檔案
//Student實體類對映配置檔案 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="domain.Student"> <id name="stuId" column="stu_id"> <generator class="native"/> </id> <property name="stuName" column="stu_name"></property> <property name="stuMemo" column="stu_memo"></property> </class> </hibernate-mapping>
//Hibernate主配置檔案 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- 第一步:配置資料庫連線資訊 --> <property name="hibernateDialect">org.hibernate.dialect.MYSQLDialect</property> <property name="hibernate.connection.driver.class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">root</property> <!-- 第二步:配置hibernate其他配置 --> <property name="hibernate.show_sql">true</property> <property name="hibernate.hbm2ddl.auto">update</property> <property name="hibernate.current_session_context_class">thread</property> <!-- 第三步:匯入對映檔案 --> <mapping resource="domain/Student.hbm.xml"/> </session-factory> </hibernate-configuration>
- 編寫測試類並執行:
package test; import org.hibernate.Session;import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.Transaction; import org.junit.jupiter.api.Test; import util.HibernateUtils; public class HibernateTest01 { @Test public void test1() { Configuration config = new Configuration().configure(); SessionFactory SF = config.buildSessionFactory(); Session s = SF.openSession(); Transaction tx = s.beginTransaction(); tx.commit(); s.close(); SF.close(); } }
執行上述單元測試,可以從輸出中看到Hibernate幫我們完成了建立表的操作:
下面我們完成一個簡單的插入操作:
package test; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.junit.jupiter.api.Test; import domain.Student; public class HibernateTest01 { @Test public void test1() { Configuration config = new Configuration().configure(); SessionFactory SF = config.buildSessionFactory(); Session s = SF.openSession(); Transaction tx = s.beginTransaction(); Student s1 = new Student(); // s1.setStuId(1); 資料庫主鍵自動生成,可省略此行 s1.setStuName("uzi"); s1.setStuMemo("a famous adc"); s.save(s1); tx.commit(); s.close(); SF.close(); } }