Hibernate的單獨使用
一、創建配置hibernate項目
- 新建一個web project 項目
- 點擊項目,然後點擊左上角的project,再點擊configure facets,然後點擊install hibernate facet
然後finish,就可以了
3.配置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">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>
<session-factory>
<property name="myeclipse.connection.profile">
MySQLConn
</property>
<!-- 方言 -->
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="connection.password">用戶名</property>
<property name="connection.username">密碼</property>
<property name="connection.url">
jdbc:mysql://127.0.0.1:3306/數據庫名?useSSL=false&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<!--自動建表 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 打印hibernate創建的sql語句 -->
<property name="show_sql">true</property>
<!-- 打印hibernate創建的sql語句並進行格式化 -->
<property name="format_sql">true</property>
<!-- 打印hibernate創建的sql語句並進行格式化 -->
<property name="connection.autocommit">true</property>
<!-- 在配置映射表後添加以下配置 -->
<!-- 配置IDcard的xml -->
<mapping resource="com/lxf/entity/IDcard.hbm.xml" />
<!-- 配置People的xml -->
<mapping resource="com/lxf/entity/People.hbm.xml" />
</session-factory>
</hibernate-configuration>
4.lib裏面加上mysql-connector-java-5.1.48.jar(我是jdbc建立mysql連接)
5.建立數據庫連接:
- (1)將DB視圖調出:Window–>show view–>other–>DB browser
- (2)右鍵空白處new
- (3)填寫信息
6.創建表的映射
首先在src下建一個存實體類的文件夾:如com.lxf.entity,將自己的實體類建好
然後右鍵表點擊Hibernate Reverse Engineering,構建數據庫對應的表的映射
沒有的話自己新建一個xx.hbm.xml文件,例如People.hbm.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">
<!-- Mapping file autogenerated by MyEclipse Persistence Tools -->
<!--映射的文件夾 -->
<hibernate-mapping package="com.lxf.entity">
<!-- name:映射的實體類名字,table:數據庫中的表格名字,catalog:數據庫名字,lazy:延遲加載-->
<class name="People" table="tab_people" catalog="xxxx"
lazy="true">
<!--實體類對應表->
<id name="id" type="java.lang.Integer" column="id" length="11">
<!-- 外鍵生成 -->
<generator class="identity">
<param name="identity">id</param>
</generator>
</id>
<!-- property標籤就是字段的對應 -->
<property name="name" type="java.lang.String" column="name"
length="255">
</property>
<property name="sex" type="java.lang.String" column="sex"
length="255">
</property>
<property name="age" type="java.lang.Integer" column="age"
length="11">
</property>
<one-to-one name="idcard" class="com.lxf.entity.IDcard"
cascade="all"></one-to-one>
</class>
</hibernate-mapping>
二、測試代碼
package com.lxf.test;
import org.hibernate.Session;
import com.lxf.entity.IDcard;
import com.lxf.entity.People;
import com.lxf.sessionFactoryUtil.HibernateSessionFactory;
public class test {
public static void main(String[] args) {
Session session = null;
try {
session = HibernateSessionFactory.getSession();
//開啓事務
session.beginTransaction();
//創建一個廠商實例
IDcard iDcard = new IDcard();
iDcard.setIdcard_code("123456");
People people = new People();
people.setName("lxf");
people.setSex("男");
people.setAge(1);
people.setIdcard(iDcard);
iDcard.setPeople(people);
//保存商品
session.save(people);
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
System.out.println("更新錯誤,事務回滾!");
//回滾事務
session.getTransaction().rollback();
} finally {
HibernateSessionFactory.closeSession();
}
}
}
注意:HibernateSessionFactory.closeSession()要自己在系統提供給我們的方法類加上:
/**
* Close the sessionFactory.
*
* @throws HibernateException
*/
public static void closeSessionFactory() throws HibernateException {
if (sessionFactory != null&&!sessionFactory.isClosed()) {
sessionFactory.close();
}
}
1.Hibernate實例狀態:Hibernate的實例狀態分爲三種,分別爲瞬時狀態(Transient)、持久化狀態(Persistent)、脫管狀態(Detached)。 關於hibernate的三種狀態
2.hibernate的一級緩存自帶,當兩次使用同一個session查詢同一個內容時,第二次查詢不會打印sql語句,也就是直接從緩存中讀取內容。
3.hibernate的二級緩存要配置才能使用,實現不同session查詢內容實現緩存:
4.hibernate一對多、多對一、一對一(主鍵)、一對一(外鍵):hiberate關聯關係