?
一:核心配置分為三大部分? 必須的配置?、可選的配置和引入映射文件。
1.必須的配置 連接數據庫的參數:驅動類? url路徑? 用戶名? 密碼??方言
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><property name="hibernate.connection.url">jdbc:mysql:///hibernate_day01</property><property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">000000</property><!-- 他的方言 --><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
2.可選的配置 顯示sql? 整理sql語句的格式
<!-- 可選的配置 --><property name="hibernate.show_sql">true</property><property name="hibernate.format_sql">true</property>
3.引入映射文件
<mapping resource="com/itheima/domain/Customer.hbm.xml"/>
二 映射的配置
首先介紹里面的標簽的屬性
class標簽的配置? 作用:標簽用來建立類與表的映射關系
? ? ? ? ?屬性
? ? ? ? ? ? ? name:類的全路徑
? ? ? ? ? ? ? talbe數據庫的表名
? ?id標簽的配置? ??作用:標簽用來建立類中的屬性與表中的主鍵的對應關系
java hibernate,
name:類的屬性名,只要是name就去類中去找
column類中的字段名
property標簽的設置? ? 作用:建立類中的普通屬性與表的聯系
name:類中 的屬性名
column類中的字段名
? ? ? ? ? ? ? ?length長度 type? ? ?類型 not-null設置非空 unique設置唯一
<hibernate-mapping><!-- 建立類與表的映射關系 --><!--當時這里后面少了個引號,直接導致后面的id變成藍色 --><class name="com.itheima.domain.Customer" table="cst_customer"><id name="cust_id" column="cust_id"><!-- <generator class="native"/> --> <generator class="native"/></id><!-- 與普通字段建立對應關系 --><property name="cust_name" column="cust_name"/><property name="cust_source" column="cust_source"/><property name="cust_industry" column="cust_industry"/><property name="cust_level" column="cust_level"/><property name="cust_phone" column="cust_phone"/><property name="cust_mobile" column="cust_mobile"/></class> </hibernate-mapping>
三 核心的API
Hibernate的API一共有6個,分別為:Session、SessionFactory、Transaction、Query、Criteria和Configuration。通過這些接口,可以對持久化對象進行存取、事務控制。
? ? ? 1?SessionFactory
?SessionFactory接口負責初始化Hibernate。它充當數據存儲源的代理,并負責創建Session對象。這里用到了工廠模式。需要注意的是SessionFactory并不是輕量級的,因為一般情況下,一個項目通常只需要一個SessionFactory就夠,當需要操作多個數據庫時,可以為每個數據庫指定一個SessionFactory。
hibernate的二級緩存現在在企業中已經不用了,用redis來替換他了。 sessionFactory一個程序只須創建一次就行,那么我們就抽取一個工具類,這樣效率會提升。
抽取的工具類
hibernate框架原理,?
public class HibernateUtils {public static final Configuration configuration;public static final SessionFactory sessionFactory;//寫一個靜態代碼快static{configuration=new Configuration().configure();sessionFactory=configuration.buildSessionFactory();}public static Session openSession(){return sessionFactory.openSession();} }
?
2 Configuration
作用:加載核心配置文件
3?Session? :類似JDBC的connection對象是一個連接對象,是數據庫交互的橋梁
get方法和load方法的區別 (面試經常會問)
get 采用立即加載 查詢到的是對象本身 找不到對象的時候會返回空
load就不一樣了 采用的是延遲加載(Lazy懶加載) 查詢后返回的是代理對象 查詢不到一個對象的時候會拋異常
在開發中用的比較多的還是get
hibernate jpa??
//上面的是get方法
Customer customer = session.get(Customer.class, 11l);//這里是long類型 System.out.println(customer);
//下面的是load方法Customer customer = session.load(Customer.class, 4l);System.out.println(customer);
?
更新操作
?
//第二種方式是先查詢,再更新,推薦這種方式Customer customer = session.get(Customer.class,6l);customer.setCust_name("王宏");session.update(customer);
?
hibernate session? 刪除操作
@Testpublic void demo4(){Session session = HibernateUtils.openSession();Transaction beginTransaction = session.beginTransaction();//先查詢再刪除,級聯刪除Customer customer = session.get(Customer.class,4l);session.delete(customer);beginTransaction.commit();session.close();}
查詢所有
@Test//查詢所有public void demo5(){Session session = HibernateUtils.openSession();Transaction beginTransaction = session.beginTransaction();Query query = session.createQuery("from Customer"); //面向對象List list = query.list();for (Object object : list) {System.out.println(object);}beginTransaction.commit();session.close();}
?
?
?
hibernate注解配置。?