一.Hibernate(開放源代碼的對象關係映射框架)簡介:java
Hibernate是一個開放源代碼的對象關係映射框架,它對JDBC進行了很是輕量級的對象封裝,它將POJO與數據庫表創建映射關係,是一個全自動的orm框架,hibernate能夠自動生成SQL語句,自動執行,使得Java程序員能夠爲所欲爲的使用對象編程思惟來操縱數據庫。 Hibernate能夠應用在任何使用JDBC的場合,既能夠在Java的客戶端程序使用,也能夠在Servlet/JSP的Web應用中使用,最具革命意義的是,Hibernate能夠在應用EJB的J2EE架構中取代CMP,完成數據持久化的重任。mysql
四.hibernate入門Demo程序員
該項目使用到的jar包sql
1.我使用的是mysql關係型數據庫,先創建一個數據庫,而且建立一個customer(客戶信息)表數據庫
2.建立一個Customer實體類(持久化類)編程
持久化類是應用程序中的業務實體類,這裏的持久化是指類的對象可以被持久化保存到數據庫中.緩存
Hibernate 使用普通的JAVA對象(POJO),即POJO的編程模式來進行持久化.session
該類中包含的是與數據庫表相對應的各個屬性,這些屬性經過getter/setter方法來訪問,對外部隱藏了內部的實現細節.架構
一般持久化類的編寫應嘎遵循一些規則:app
1).持久化類中必須提供無參數public構造器(若是沒有提供任何構造方法,虛擬機會自動提供默認構造方法,可是若是提供了其餘有參數的構造方法的話
虛擬機再也不提供默認構造方法,必須手動編寫無參構造方法).
2).持久化類中全部屬性使用private修飾,提供public的setter/getter方法
3).必須提供標識屬性OID,與數據庫表中逐漸對應,例以下面Customer類id屬性
4).持久化類屬性應儘可能使用基本數據類型的包裝類型,例如int換成Integer,long換成Long,目的是爲了與數據庫表的字段默認值null一致。(例如int是區分不開null跟0的,不賦值的int類型默認值爲0)
5).持久化類不要用final修飾,使用final修飾將沒法生成代理對象進行優化.
public class Customer { private Integer id; //主鍵id private String name; //客戶姓名 private Integer age; //客戶年齡 private String sex; //客戶性別 private String city; //客戶地址 /** * @return the id */ public Integer getId() { return id; } /** * @param id the id to set */ public void setId(Integer id) { this.id = id; } /** * @return the name */ public String getName() { return name; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } /** * @return the age */ public Integer getAge() { return age; } /** * @param age the age to set */ public void setAge(Integer age) { this.age = age; } /** * @return the sex */ public String getSex() { return sex; } /** * @param sex the sex to set */ public void setSex(String sex) { this.sex = sex; } /** * @return the city */ public String getCity() { return city; } /** * @param city the city to set */ public void setCity(String city) { this.city = city; } //重寫toString()方法 @Override public String toString() { return "Customer [id=" + id + ", name=" + name + ", age=" + age + ", sex=" + sex + ", city=" + city + "]"; } }
3.編寫映射文件Customer.hbm.xml
實體類Customer目前還不具有持久化操做的能力,而Hibernate須要知道實體類Customer映射到數據庫 Hibernate中的哪一個表,以及類中的哪一個屬性
對應數據庫表中的哪個字段,這些都須要在映射文件中配置.
在實體類Customer所在的包中,建立一個名稱爲Customer.hbm.xml的映射文件,在該文件中定義了實體類Customer的屬性是如何映射到customer表的列上的
開始編寫xml文件,該文件頭部信息能夠經過下面的步驟找到:
<?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> <!-- name表明的是實體類名,table表明的是表名 --> <class name="com.hck.entity.Customer" table="customer"> <!-- name=id表明的是customer類中屬性 column=id表明的是table表中的字段 --> <id name="id" column="id"> <!-- 主鍵生成策略 --> <generator class="native"/> </id> <!-- 其餘屬性使用property標籤來映射 --> <property name="name" column="name" type="string"/> <property name="age" column="age" type="integer"/> <property name="sex" column="sex" type="string"/> <property name="city" column="city" type="string"/> </class> </hibernate-mapping>
4.編寫核心配置文件hibernate.cfg.xml
Hibernate的映射文件反映了持久化類和數據庫表的映射信息,
而Hibernate的配置文件則主要用來配置數據庫鏈接以及Hibernate運行時所須要的各個屬性的值.
在項目的src目錄下建立一個名稱爲hibernate.cfg.xml的文件
xml的頭部編寫能夠按下圖因此查找複製
編寫hibernate.cfg.xml文件
<?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="hibernate.dialect"> org.hibernate.dialect.MySQLDialect </property> <!-- 數據庫驅動 --> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <!-- 鏈接數據庫的url --> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/tb_test</property> <!-- 數據庫用戶名 --> <property name="hibernate.connection.username">root</property> <!-- 數據庫密碼 --> <property name="hibernate.connection.password">123456</property> <!-- 其餘配置 --> <!-- 格式化sql --> <property name="format_sql">true</property> <!-- 用來關聯hbm配置文件 --> <mapping resource="com/hck/entity/Customer.hbm.xml"/> </session-factory> </hibernate-configuration>
5.編寫單元測試類代碼以下:
1).解釋一下
config=new Configuration().configure();是如何讀取src目錄下的hibernate.cfg.xml
跟蹤代碼能夠看到:
默認讀取src目錄下的hibernate.cfg.xml文件,因此hibernate.cfg.xml文件放在src是基於約定優於配置原理的
public class HibernateTestDemo { //定義變量 Configuration config; SessionFactory sessionFactory; Session session; Transaction transaction; //before表示在方法執行前執行 @Before public void setUp() { //1.加載hibernate.cfg.xml配置 config=new Configuration().configure(); //2.獲取SessionFactory sessionFactory=config.buildSessionFactory(); //3.得到一個session session=sessionFactory.openSession(); //4.開始事務 transaction=session.beginTransaction(); } //添加操做 @Test public void insert() { //5.操做 Customer customer=new Customer(); customer.setId(1); customer.setName("zhangsan"); customer.setAge(20); customer.setSex("m"); customer.setCity("guangzhou"); session.save(customer); } //刪除操做 @Test public void delete() { //先查詢 Customer customer=(Customer)session.get(Customer.class, 1); //再刪除 session.delete(customer); } //查詢操做 @Test public void select() { Customer customer=(Customer)session.get(Customer.class, 1); System.out.println(customer); } //更新操做 @Test public void update() { Customer customer=new Customer(); customer.setId(1); customer.setName("zhangsan"); customer.setAge(20); customer.setSex("m"); //修改地址爲beijing customer.setCity("beijing"); //存在就更新,不存在就執行插入操做 session.saveOrUpdate(customer); } //After表示在方法執行結束後執行 @After public void closeTransaction() { //6.提交事務 transaction.commit(); //7.關閉資源 session.close(); sessionFactory.close(); } }
1)執行插入操做後,打開mysql使用select * from customer;獲得的結果:
2)執行查詢操做(查看控制檯輸出)
3.執行更新操做
4.刪除操做
五.總結
超級完整版hibernate入門demo完成了,若有不懂或者問題請留言~