ssh第二講--hibernate的單獨使用

Hibernate的單獨使用

一、創建配置hibernate項目

  1. 新建一個web project 項目
  2. 點擊項目,然後點擊左上角的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&amp;characterEncoding=utf8&amp;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查詢內容實現緩存:

hibernate二級緩存

4.hibernate一對多、多對一、一對一(主鍵)、一對一(外鍵):hiberate關聯關係

三、hibernate的高階使用

1.Hibernate查詢語言

2.Hibernate標準查詢(Criteria)

3.hibernate原生SQL

4.hibernate註解(javax.persistence 包)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章