hibernate快速入門

第一步:下載Hibernate的開發包:
  http://sourceforge.net/projects/hibernate/files/hibernate3

第二步:Hibernate框架目錄結構:
  documentation :Hibernate文檔
  lib :Hibernate開發jar包
    bytecode :操作字節碼jar包.
    jpa :Hibernate的實現jpa規范.
    optional :Hibernate的可選jar包.
    required :Hibernate的必須的jar包.
  project :Hibernate提供的工程

第三步:創建一個工程:(Java工程)
  導入相應jar包:
    hibernate3.jar
    HIBERNATE_HOME/lib/required/*.jar
    HIBERNATE_HOME/lib/jpa/hibernate-jpa-2.0-api-1.0.1.Final.jar
  導入日志記錄的包:
    log4j-1.2.16.jar
    slf4j-log4j12-1.7.2.jar
  導入數據庫驅動:
    mysql-connector-java-5.0.4-bin.jar

第四步:創建表:(關系型數據庫)

create database hibernate3_day01;
use hibernate3_day01;
create table customer(id int primary key auto_increment,name varchar(20),age int
);

第五步:創建一個實體類:(面向對象)

public class Customer {private int id;private String name;private int age;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

第六步:創建ORM的映射
  映射文件只要是一個XML格式文件就可以.名字任意.通常情況下名稱規范:實體類名稱.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><!-- 建立類與表的映射 --><!-- class標簽:用于映射類與表的關系 name :類的全路徑  table:表名稱 --><class name="cn.yzu.hibernate3.demo1.Customer" table="customer"><!-- 建立類中屬性與表中的字段映射 --><!-- 唯一標識 --><!-- 使用id的標簽 配置唯一屬性 --><!-- 在<id>標簽中配置一個主鍵的生成策略. --><id name="id" column="id"><generator class="native"/></id><!-- 普通屬性 --><!-- property標簽:映射類中的普通屬性 name:類中的屬性名稱, column:表中字段名稱 --><!-- type:三種寫法* Java類型        :java.lang.String* Hibernate類型    :string* SQL類型        :不能直接使用type屬性,需要子標簽<column>* <column name="name" sql-type="varchar(20)"/>--><property name="name" column="name" type="string"/><property name="age" column="age"/></class>
</hibernate-mapping>

第七步:創建一個Hibernate的核心配置文件
  通知Hibernate連接是哪個數據庫.在src下創建一個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>
<session-factory><!-- 必須去配置的屬性 --><!-- 配置數據庫連接的基本信息: --><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><property name="hibernate.connection.url">jdbc:mysql:///hibernate3_day01</property><property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">123</property><!-- Hibernate的方言 --><!-- 生成底層SQL不同的 --><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><!-- 可選的屬性 --><!-- 顯示SQL --><property name="hibernate.show_sql">true</property><!-- 格式化SQL --><property name="hibernate.format_sql">true</property><!-- hbm:映射 to DDL: create drop alter --><property name="hibernate.hbm2ddl.auto">update</property><!-- 通知Hibernate加載那些映射文件 --><mapping resource="cn/yzu/hibernate3/demo1/Customer.hbm.xml" />
</session-factory>
</hibernate-configuration>

第八步:編寫測試

@Test
// 向數據庫中插入一條記錄
public void demo1(){// 1.Hiberante框架加載核心配置文件(有數據庫連接信息)Configuration configuration = new Configuration().configure();// 2.創建一個SessionFactory.(獲得Session--相當連接對象)SessionFactory sessionFactory = configuration.buildSessionFactory();// 3.獲得Session對象.Session session = sessionFactory.openSession();// 4.默認的情況下,事務是不自動提交.Transaction tx = session.beginTransaction();// 5.業務邏輯操作// 向數據庫中插入一條記錄:Customer customer = new Customer();customer.setName("任童");customer.setAge(28);session.save(customer);// 6.事務提交
  tx.commit();// 7.釋放資源
  session.close();sessionFactory.close();
}

?

補充:Hibernate中的持久化類

  持久化類:實體類 + 映射文件.
  持久化類是有編寫規范:
    提供一個無參數 public訪問控制符的構造器(hibernate底層要用到反射
    提供一個標識屬性,映射數據表主鍵字段 :
      java區分兩個對象是否是同一個是使用地址.
      數據庫區分兩條記錄是否一致是使用主鍵.
      Hibernate中區分持久化對象是否是同一個,根據唯一標識:
    所有屬性提供public訪問控制符的 set get 方法 :框架中存值和取值的時候使用.
    標識屬性應盡量使用基本數據類型的包裝類型
      若使用基本數據類型,如下例,當成績是0時,并不能區分該同學是沒有參加考試還是考試得了0分,如果使用包裝類型,那么默認值是null,這是null就可以表示沒有參加考試,而0就表示該同學考試得了0分
                  成績表:
            學號      姓名      成績
            1      ?張三      0
    持久化類盡量不要使用final進行修飾 :
      用final修飾的類是不能被繼承.無法生成代理對象.(延遲加載的時候返回代理對象.延遲加載就失效.)

轉載于:https://www.cnblogs.com/fengmingyue/p/6165590.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/253777.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253777.shtml
英文地址,請注明出處:http://en.pswp.cn/news/253777.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

U-boot給kernel傳參數和kernel讀取參數—struct tag

U-boot 會給 Linux Kernel 傳遞很多參數&#xff0c;如&#xff1a;串口&#xff0c; RAM &#xff0c; videofb 等。 而 Linux kernel 也會讀取和處理這些參數。兩者之間 通過 struct tag 來傳遞參數。 U-boot 把要傳遞給 kernel 的東西保存在 struct tag 數據結構中&#xf…

異步FIFO設計(Verilog)

FIFO&#xff08;First In First Out&#xff09;是異步數據傳輸時經常使用的存儲器。該存儲器的特點是數據先進先出&#xff08;后進后出&#xff09;。其實&#xff0c;多位寬數據的異步傳輸問題&#xff0c;無論是從快時鐘到慢時鐘域&#xff0c;還是從慢時鐘到快時鐘域&…

python中RabbitMQ的使用(路由鍵模糊匹配)

路由鍵模糊匹配 使用正則表達式進行匹配。其中“#”表示所有、全部的意思&#xff1b;“*”只匹配到一個詞。 匹配規則&#xff1a; 路由鍵&#xff1a;routings [ happy.work, happy.life , happy.work.teacher, sad.work, sad.life, sad.work.teacher ] "#"&am…

數據倉庫事實表分類[轉]

1&#xff09;在數據倉庫領域有一個概念叫Transaction fact table&#xff0c;中文一般翻譯為“事務事實表”。 事務事實表是維度建模的數據倉庫中三種基本類型事實表中的一種&#xff0c;另外兩種分別是周期快照事實表和累積快照事實表。 事務事實表與周期快照事實表、累積快…

嵌入式系統文件系統比較 jffs2, yaffs, cramfs, romfs, ramdisk, ramfs/tmpfs

Linux支持多種文件系統&#xff0c;包括ext2、ext3、vfat、ntfs、iso9660、jffs、romfs和nfs等&#xff0c;為了對各類文件系統 進行統一管理&#xff0c;Linux引入了虛擬文件系統VFS(Virtual File System)&#xff0c;為各類文件系統提供一個統一的操作界面和應用編程接口。 …

Codeforces Beta Round #17 C. Balance DP

C. Balance題目鏈接 http://codeforces.com/contest/17/problem/C 題面 Nick likes strings very much, he likes to rotate them, sort them, rearrange characters within a string... Once he wrote a random string of characters a, b, c on a piece of paper and began t…

時鐘切換處理(Verilog)

隨著各種應用場景的限制&#xff0c;芯片在運行時往往需要在不同的應用下切換不同的時鐘源&#xff0c;例如低功耗和高性能模式就分別需要低頻率和高頻率的時鐘。兩個時鐘源有可能是同源且同步的&#xff0c;也有可能是不相關的。直接使用選擇邏輯進行時鐘切換大概率會導致分頻…

SSH整合中,使用父action重構子類action類.(在父類中獲取子類中的泛型對象)

import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type;import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven;/*** 文件名 : BaseAction.java* 提取SSH中的action類* 由于SSH的action中采用模型驅動的方法,使用泛…

用BusyBox制作Linux根文件系統

STEP 1&#xff1a;構建目錄結構 創建根文件系統目錄&#xff0c;主要包括以下目錄 /dev /etc /lib /usr /var /proc /tmp /home /root /mnt /bin /sbin /sys #mkdir /home/rootfs #cd /home/rootfs #mkdir dev etc lib usr var proc tmp home roo…

Angular Elements 組件在非angular 頁面中使用的DEMO

2019獨角獸企業重金招聘Python工程師標準>>> 一、Angular Elements 介紹 Angular Elements 是伴隨Angular6.0一起推出的新技術。它借助Chrome瀏覽器的ShadowDom API&#xff0c;實現一種自定義組件。 這種組件可以用Angular普通組件的開發技術進行編寫&#xff0c;…

(轉) android里,addContentView()動態增加view控件,并實現控件的頂部,中間,底部布局...

http://blog.csdn.net/bfboys/article/details/52563089轉載于:https://www.cnblogs.com/zhangminghan/p/6182909.html

verilog仿真——$test$plusargs 和 $value$plusargs

VERILOG的參數可以用define和parameter的方式定義&#xff0c;這種方法要求我們在編譯前將變量必須定義好&#xff0c;編譯完成之后再也不能修改&#xff1b; 然而&#xff0c;有時候我們在進行仿真時&#xff0c;需要從外部傳遞參數&#xff0c;這個要求怎么滿足呢&#xff1…

盧卡斯定理

盧卡斯定理:解決一類組合數取模問題 A、B是非負整數&#xff0c;p是質數。AB寫成p進制&#xff1a;Aa[n]a[n-1]...a[0]&#xff0c;Bb[n]b[n-1]...b[0]。 則組合數C(A,B)與C(a[n],b[n])*C(a[n-1],b[n-1])*...*C(a[0],b[0]) modp同余 即&#xff1a;Lucas(n,m,p)c(n%p,m%p)*Luc…

內核理解

在純技術方面&#xff0c;內核是硬件與軟件之間的一個中間層。其作用是將應用程序的請求傳遞給硬件&#xff0c;并充當底層的驅動程序&#xff0c;對系統中的各種設備和組件。內核啟動init程序作為第一個進程&#xff0c;該進程負責進一步的系統初始化操作&#xff0c;并顯示登…

loadrunner中對https證書的配置

1、準備好網站的證書&#xff0c;一般證書是cer格式&#xff1b; 2、因為loadrunner只支持pem格式的證書&#xff0c;所以要將證書轉換格式&#xff0c;利用openssl工具&#xff1b;&#xff08;或者直接讓開發提供pem格式的證書&#xff09;3、得到pem格式的證書之后&#xff…

Android 9 Pie震撼來襲 同步登陸WeTest

作者&#xff1a;We Test小編商業轉載請聯系騰訊WeTest獲得授權&#xff0c;非商業轉載請注明出處。原文鏈接&#xff1a;wetest.qq.com/lab/view/40…WeTest 導讀2018年8月7日&#xff0c;Google對外發布最新 Android 9.0 正式版系統&#xff0c;并宣布系統版本Android P 被正…

Datapath綜合代碼規范(Verilog)

一、一般準則 1、有符號數運算 利用類型“signed”完成有符號數運算&#xff0c;而不是用無符號數模擬有符號數運算。這樣可以得到更好的QoR。在資源報告中檢查操作數的類型和大小。 2、符號/零擴展 盡量不要手動擴展。verilog利用signed/unsigned會自動完成擴展。這樣代碼可…

Linux下V4L2編程小結

http://www.360doc.com/content/12/0318/16/532901_195392228.shtml :davind dm365linux移植 http://www.embedhq.org/html/jsbw/2010/0425/390.html :Linux下V4L2編程小結

百(垃)度(圾)之星初賽B hdu6114

Chess 題意&#xff1a;中文題 思路&#xff1a;其實就是在n個格子上放m個棋子&#xff08;n>m&#xff09;&#xff08;xjb套Lucas的板子... AC代碼&#xff1a; #include "iostream" #include "string.h" #include "stack" #include "…

variable 'xxx' unsafe in 'case'的處理

問題描述&#xff1a; case get(?Player_LoopTaskInfo) of{TargetCnt, TaskStar, TaskExp} ->ok;_ ->throw("not_found_loop_task_info") end 在case語句中&#xff0c;這樣寫&#xff0c;編譯時&#xff0c;會提示變量unsafe&#xff0c;解決編譯器報錯的…