Hibernate 第一天筆記

Hibernate 第一天筆記java

 

* javaEE企業級開發分層 表現層 業務層 持久層mysql

表現層:struts2spring

業務層:springsql

持久層:hibernate----操做數據庫數據庫

 

* hibernate框架稱爲ORMObject Relational Mapping)框架apache

 

流行的數據庫框架api

JPA Java Persistence API.JPA經過JDK 5.0註解或XML描述對象-關係表的映射關係(只有接口規範)緩存

Hibernate 最流行ORM框架,經過對新-關係映射配置,能夠徹底脫離底層SQL,JPA的一個具體實現session

MyBatis  本是apache的一個開源項目 iBatis,支持普通 SQL查詢,存儲過程和高級映射的優秀持久層框架app

Apache DBUtils Spring JDBCTemplate

 

官網:http://sourceforge.net/projects/hibernate/files/hibernate3

解壓hibernate壓縮文件

documentation:文檔目錄

libjar包目錄(依賴包)

project:源碼包

hibernate3.jar:框架核心jar

* log4j記錄日誌的級別

fatal:致命錯誤> error:普通錯誤 > warn:警告 > info:普通訊息 > debug:調試信息 > trace:堆棧信息

* hibernate 入門案例

1)建立java項目

2)導入jar(11

antlr-2.7.6.jar

commons-collections-3.1.jar

dom4j-1.6.1.jar

hibernate-jpa-2.0-api-1.0.1.Final.jar

hibernate3.jar

javassist-3.12.0.GA.jar

jta-1.1.jar

log4j-1.2.16.jar

mysql-connector-java-5.0.8-bin.jar

slf4j-api-1.6.1.jar

slf4j-log4j12-1.7.2.jar

3)建立一個數據庫和表

create database hibernate_day1 default character set utf8;

create table user(id int primary key auto_increment ,name varchar(32),int age);

4)對應user表建立一個實體類

5)在config下提供一個hibernate 核心配置文件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>

<!-- 配置hibernate框架的會話工廠 -->

<session-factory>

<!-- 數據庫方言 -->

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

<!-- 描述jdbc基本鏈接參數 -->

<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_day1</property>

<property name="hibernate.connection.username">root</property>

<property name="hibernate.connection.password">root</property>

<!-- 在控制檯顯式sql -->

<property name="hibernate.show_sql">true</property>

<property name="hibernate.format_sql">true</property>

 

<!-- 註冊hbm映射文件 -->

<mapping resource="cn/itcast/domain/User.hbm.xml" />

</session-factory>

</hibernate-configuration>

6)提供hbm映射文件:User.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">

 

<hibernate-mapping>

<!-- 描述User類對應user表 -->

<class name="cn.itcast.domain.User" table="user">

<!-- id屬性對應id字段 -->

<id name="id" column="id">

<!-- 主鍵生成策略 -->

<generator class="native"></generator>

</id>

<property name="name" column="name"/>

<property name="age" column="age"/>

</class>

</hibernate-mapping>

7)將hbm映射文件註冊到核心配置文件中

8)經過hibernate提供的API完成對數據庫操做

//讀取hibernate核心配置文件,獲取配置對象

Configuration conf = new Configuration().configure();

//經過配置對象構建一個會話工廠對象

SessionFactory factory = conf.buildSessionFactory();

//從工廠中獲取一個會話對象

Session session = factory.openSession();

User user = new User();

user.setName("test");

user.setAge(30);

//開啓事務

Transaction tx = session.beginTransaction();

session.save(user);

//提交事務

tx.commit();

session.close();

 

* Hibernate經常使用操做

1)保存數據save

2)根據主鍵查詢數據

get---當即加載

load---延遲加載

3)根據主鍵修改數據update

session.update(user);//user對象能夠本身構造,也能夠先查詢,再修改

4)根據主鍵刪除數據delete

session.delete(user);//user對象能夠本身構造,也能夠先查詢,再刪除

5)查詢全部

String hql = "from User";

Query query = session.createQuery(hql);

List<User> userList = query.list();

 

*hibernate屬性

 

hibernate.dialect    操做數據庫方言

hibernate.connection.driver_class 鏈接數據庫驅動程序

hibernate.connection.url    鏈接數據庫URL

hibernate.connection.username  數據庫用戶名

hibernate.connection.password 數據庫密碼

hibernate.show_sql  true  在控制檯上輸出SQL語句

hibernate.format_sql  true   格式化控制檯輸出的SQL語句

hibernate.hbm2ddl.auto  create/create-drop/update/validate  DDL策略

hibernate.connection.autocommit  true 事務是否自動提交

 

* hibernate中的API

 

1Configuration

負責管理 Hibernate 的配置信息,包括以下內容:

加載 hibernate.properties 和 hibernate.cfg.xml

持久化類與數據表的映射關係(*.hbm.xml 文件)

2SessionFactory

Configuration對象根據當前的配置信息生成 SessionFactory對象

3Session---會話對象

包裝的是數據庫鏈接信息Connection

session與一級緩存相關

4Transaction

commit():提交相關聯的session實例

rollback():撤銷事務操做

wasCommitted():檢查事務是否提交

5Query(分頁)

Query query = session.createQuery(hql);

query.setFirstResult(5);//從哪開始查詢

query.setMaxResults(5);//查詢多少數據

6Criteria---條件查詢對象

Criteria cri = session.createCriteria(User.class);

cri.add(Restrictions.ilike("name", "test"));//添加查詢條件

cri.add(Restrictions.ge("age", 20));//查詢age大於20

cri.addOrder(Order.asc("name"));//添加排序

List<User> userList = cri.list();

 

理解Hibernate中持久化類:POJO + 有一個hbm文件描述這個類和表的對應關係

編寫規則

提供一個無參數 public訪問控制符的構造器

提供一個標識屬性,映射數據表主鍵字段

全部屬性提供public訪問控制符的 set  get 方法

標識屬性應儘可能使用基本數據類型的包裝類型

不要用final修飾 (將沒法生成代理對象進行優化)

 

區分天然主鍵和代理主鍵

天然主鍵:具備業務含有的主鍵

代理主鍵:不具備業務含有的主鍵(建議使用代理主鍵)

 

主鍵生成策略

1increment:自增,由hibernate框架發出SQL查詢最大的idSELECT max(id) FROM Table),有線程問題

2identity:使用數據庫的自增策略,mysqlDB2可使用,Oracle不能使用

3sequence:使用數據庫的序列完成自增,DB2Oracle可使用,mysql不能使用

4native:本地策略,根據客戶端使用的數據庫,選擇使用identitysequence(通常使用這個就能夠了)

5uuid:由hibernate框架負責生成32位字符串(使用uuid作爲主鍵有一個好處就是在數據遷移時不會影響到遷移到的數據庫中的已有數據)

6assigned:手動委派

相關文章
相關標籤/搜索