java代碼案例,hibernate Day1 案例代碼

 2023-11-19 阅读 24 评论 0

摘要:1、創建Person類 package com.icss.pojo;public class Person {private int uid;private String uname;private String pword;private String addr;public int getUid() {return uid;}public void setUid(int uid) {this.uid = uid;}public String getUname() {return una

1、創建Person類

package com.icss.pojo;public class Person {private int uid;private String uname;private String pword;private String addr;public int getUid() {return uid;}public void setUid(int uid) {this.uid = uid;}public String getUname() {return uname;}public void setUname(String uname) {this.uname = uname;}public String getPword() {return pword;}public void setPword(String pword) {this.pword = pword;}public String getAddr() {return addr;}public void setAddr(String addr) {this.addr = addr;}}

 2、創建person.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><!--映射配置文件>映射配置文件名稱和位置沒法有固定要求>映射配置文件中的name屬性值寫實體類相關內容-- class 標簽name屬性值實體類全路徑-- id標簽和property標簽name屬性值 實體類的屬性名稱(注意要完全一樣)-- id標簽和property標簽中的column屬性是可以省略的,如果不寫,則生成的字段名與屬性名一樣,建議寫出,這樣比較清析。-- property標簽中 還有一個屬性type屬性,用于設定字段的類型,我們可以不用使用,這時hibernate會自動生成相應的類型    --><class name="com.icss.pojo.Person" table="t_person"><id name="uid" column="uid"><generator class="increment"></generator></id><property name="uname" column="uname"></property><property name="pword" column="pword"></property><property name="addr" column="addr"></property></class>
</hibernate-mapping>	

  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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><!-- <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/hibernate_day01?useUnicode=true&characterEncoding=utf8</property> --><!-- <property name="hibernate.connection.url"> <![CDATA[jdbc:mysql://localhost:3306/hibernate_day01?useUnicode=true&characterEncoding=utf8]]></property> --><property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_day01?characterEncoding=utf8</property><property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">root</property><!-- 配置數據庫方言,就是針對不同的數據庫有不同的sql標準 --><property name="dialect">org.hibernate.dialect.MySQLDialect</property><!--下列是Database Explore綁定數據庫連接時候定義的數據源名稱吧 無關緊要的一個東西,其實就是 Diver name --><property name="myeclipse.connection.profile">mysql</property><!-- 配置hibernate信息 可選 --><!-- 輸出底層sql語句 --><property name="show_sql">true</property><!-- 輸出底層sql語句并格式化 --><property name="format_sql">true</property><!-- 使得hibernate幫助我們創建表,因為表不會自己創建,需要我們進行配置使其自動創建 --><property name="hibernate.hbm2ddl.auto">update</property><!-- 把映射文件加載過來 --><!-- <mapping resource="com/icss/pojo/person.hbm.xml" /> --></session-factory></hibernate-configuration>

  4、創建測試類

package com.icss.test;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Ignore;
import org.junit.Test;import com.icss.pojo.Person;
import com.icss.util.HibernateUtils;public class HibernateDemo {
/*** 第一步 加載hibernate核心配置文件* 第二步 創建SessionFactory對象* 第三步 使用SessionFactory創建session對象* 第四步 開啟事務* 第五步 寫具體邏輯crud操作* 第六步 提交事務* 第七步 關閉資源* 效果:*   是否在數據庫中生成表*   看表中是否有記錄*/@Ignore@Testpublic void test1() {// 獲取hibernate配置對象    通過配置對象加載hibernate默認配置      還可以cfg.configure(path);Configuration cfg = new Configuration().configure("hibernate.cfg.xml");// 讀取核心配置文件hibernate.cfg.xml,創建sessionFactory// 在這個過程中,會根據映射關系,在數據庫中把相應的表生成,前提是設置了//<property name="hibernate.hbm2ddl.auto">update</property>// 因為我們在創建SessionFactory過程中,這個過程特別耗資源(因為要創建表)//    在hibernate操作中,建議一個項目一般創建一個SessionFactory對象(單例模式)    即HibernateUtilsSessionFactory sf=cfg.buildSessionFactory();// 類似于jdbc連接,只是這個地方hibernate做了封裝Session ss = sf.openSession();//開啟事務Transaction tx = ss.beginTransaction();Person p=new Person();p.setUname("zs");p.setPword("123");p.setAddr("shanghai");ss.save(p);tx.commit();ss.close();sf.close();}@Testpublic void test2() {//若不對映射文件的類進行操作,則注釋掉SessionFactory sf=HibernateUtils.getSessionFactory();Session ss=sf.openSession();/**  > session可以理解為jdbc中的連接connection*  > 調用session里面不同的方法實現crud操作*  -- 添加 save 方法*  -- 修改 update 方法*  -- 刪除 delete 方法*  -- 根據id查詢 get 方法*  > 一個項目中我們一般只有一個SessionFactory,是單例的,Session對象是單線程對象*  -- Session對象不能共用,只能自己使用*//** 事務概念*    事務是應用程序中一系列嚴密的操作,所有操作必須成功完成,否則在每個操作中所作的所有更改都會被撤消。*    也就是事務具有原子性,一個事務中的一系列的操作要么全部成功,要么一個都不做。* 		-- 事務四個特性* 		原子性、一致性、隔離性、持久性* 		原子性:事務中包含的各操作要么都做,要么都不做* 		一致性:事務執行的結果必須是使數據庫從一個一致性狀態變到另一個一致性狀態。一致性與原子性是密切相關的。* 		隔離性:一個事務的執行不能被其他事務干擾。* 		持久性:一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的。*//** 事務一致性理解1* 當數據庫只包含成功事務提交的結果時,就說數據庫處于一致性狀態。* 如果數據庫系統 運行中發生故障,有些事務尚未完成就被迫中斷,* 這些未完成事務對數據庫所做的修改有一部分已寫入物理數據庫,* 這時數據庫就處于一種不正確的狀態,或者說是 不一致的狀態。* * 事務一致性理解2* 為了保證一致性(即10個人 的賬號金額總數不變),那在我寫代碼的時候,如果寫了代碼:A=A-5000;* 那就必須要寫上B=B+5000,或者是C=C+5000,這樣的代碼才能保證了數據庫的一致性狀態。* 那什么是原子性?就是將上面的兩行代碼合成為一個事務,要么全做,要么全不做。* 比如我寫了兩行代碼:A=A+2000;B=B+3000;如果這兩行代碼看成是一個事務,并且在某一時刻全執行完了,* 那么這個事務的原子性滿足了,但卻沒有滿足數據庫的一致性。*/}
}

java代碼案例。  5、創建工具類

package com.icss.util;import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;public class HibernateUtils {private static SessionFactory sf = null;private HibernateUtils() {// TODO Auto-generated constructor stub}public static SessionFactory getSessionFactory(){if(sf==null){Configuration cfg=new Configuration().configure();sf=cfg.buildSessionFactory();}return sf;}
}

  

 

轉載于:https://www.cnblogs.com/1020182600HENG/p/7419290.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/181529.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息