hibernate02环境的搭建
hibernate: 持久層的框架!
是一個(gè)開放源代碼的對(duì)象關(guān)系映射框架(ORM)!之前我們?cè)L問數(shù)據(jù)庫使用JDBC!
對(duì)JDBC進(jìn)行了輕量級(jí)的對(duì)象封裝!是一個(gè)全自動(dòng)ORM框架!(底層可以自動(dòng)生成sql語句)!
使用面向?qū)ο蟮乃枷雭聿僮鲾?shù)據(jù)庫!
?
創(chuàng)建一個(gè)java項(xiàng)目
引入需要的hibernate需要的jar包以及連接數(shù)據(jù)庫需要的驅(qū)動(dòng)包
把jar包放入項(xiàng)目中并引用
?
?創(chuàng)建對(duì)應(yīng)的學(xué)生類
/*** 學(xué)生的實(shí)體類*/ public class Student {private Integer id;private Integer age;private String name;// 和數(shù)據(jù)庫中不一致 (sname)public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Student(Integer id, Integer age, String name) {super();this.id = id;this.age = age;this.name = name;}public Student() {super();}@Overridepublic String toString() {return "Student [id=" + id + ", age=" + age + ", name=" + name + "]";}}創(chuàng)建對(duì)應(yīng)的數(shù)據(jù)庫中的學(xué)生表
找到對(duì)應(yīng)mapping映射文件,放在和實(shí)體類相同的包下!并修改其中的內(nèi)容
?
修改Student.hbm.xml文件之后的內(nèi)容
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><!-- 映射文件 M 目的;實(shí)體類和 數(shù)據(jù)庫中的表 產(chǎn)生關(guān)系 package:是說明我們需要映射的實(shí)體類的包名 class name:對(duì)應(yīng)的是實(shí)體類的名稱(如果省略了package屬性,必須書寫全類名) property,id name:對(duì)應(yīng)的是實(shí)體類中的屬性名,如果和數(shù)據(jù)庫中的字段一致,則可以省略column--> <hibernate-mapping package="cn.bdqn.bean"><class name="Student" table="stu"><id name="id"><!--主鍵生成策略 assigned:主鍵的生成值完全由用戶決定,與底層數(shù)據(jù)庫無關(guān)。在調(diào)用session.save()之前必須指定主鍵值,否則會(huì)拋出異常!--><generator class="assigned"/></id><!--配置其他屬性的映射 --><property name="age"/><property name="name" column="sname"/></class> </hibernate-mapping>找到hibernate核心的配置文件并修改內(nèi)容?
?
?
修改后的hibernate.cfg.xml文件內(nèi)容
<!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="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property><property name="connection.username">t10</property><property name="connection.password">t10</property><property name="connection.driver_class">oracle.jdbc.OracleDriver</property><!--方言 --><property name="dialect">org.hibernate.dialect.Oracle9Dialect</property><!--是否顯示底層生成的sql語句 --><property name="show_sql">true</property><!--格式化生成的sql語句 --><property name="format_sql">true</property><!--加載我們配置的映射文件 全路徑 --><mapping resource="cn/bdqn/bean/Student.hbm.xml" /></session-factory> </hibernate-configuration>創(chuàng)建對(duì)應(yīng)的測(cè)試類
package cn.bdqn.test;import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.junit.Test;import cn.bdqn.bean.Student;/*** * @author 小豆腐* 以后的你,會(huì)感謝現(xiàn)在努力的自己!努力!堅(jiān)持!不放棄!* * hibernate核心的* 1個(gè)類* 01. 類 Configuration !對(duì)核心配置文件的讀取! * 5個(gè)接口 * 01. SessionFactory:負(fù)責(zé)初始化hibernate需要的參數(shù)!在程序中有一個(gè)就夠了!之后我們會(huì)寫成單例模式! * 02. Session:不是我們的HttpSession(用戶session)! 我們hibernate的session* 是用來操作對(duì)象(增刪改查)!創(chuàng)建事務(wù)的對(duì)象!我們現(xiàn)在使用的session不是線程安全的! * 03. Transaction :進(jìn)行事務(wù)的操作!* 04. Query :hibernate中查詢的接口(sql , hql)* 05. Criteria :和Query相似!但是做了一些封裝! */ public class StudentTest {// 新增學(xué)生信息 @Testpublic void addStudent() {/*** 01.讀取核心配置文件 因?yàn)槲覀冃枰男畔⒍荚谶@個(gè)核心配置文件中(連接數(shù)據(jù)庫的四要素,映射文件) * configure()底層默認(rèn)去src下面查詢了hibernate.cfg.xml文件*/Configuration configuration = new Configuration().configure();// 02.創(chuàng)建sessionFactorySessionFactory sessionFactory = configuration.buildSessionFactory();// 03.打開sessionSession session = sessionFactory.openSession();// 04.開啟事務(wù)Transaction transaction = session.beginTransaction();// 05.創(chuàng)建一個(gè)Student對(duì)象Student student = new Student(400, 50, "小黃");// 06.持久化操作 session.save(student);// 07.提交事務(wù) 的 會(huì)產(chǎn)生sql語句 transaction.commit();// 08.關(guān)閉session session.close();}// 新增學(xué)生信息 @Testpublic void addStudent2() {/*** 01.讀取核心配置文件 因?yàn)槲覀冃枰男畔⒍荚谶@個(gè)核心配置文件中(連接數(shù)據(jù)庫的四要素,映射文件) * configure()底層默認(rèn)去src下面查詢了hibernate.cfg.xml文件*/Configuration configuration = new Configuration().configure();// 02.創(chuàng)建sessionFactorySessionFactory sessionFactory = configuration.buildSessionFactory();// 03.打開sessionSession session = sessionFactory.openSession();// 04.開啟事務(wù)Transaction transaction = session.beginTransaction();// 05.創(chuàng)建一個(gè)Student對(duì)象Student student1 = new Student(50, 50, "小黃2");session.save(student1);Student student2 = new Student(60, 50, "小黃2");session.save(student2);Student student3 = new Student(7, "小黃2"); // 沒有手動(dòng)的給主鍵賦值,會(huì)拋出異常 session.save(student3);/*** 07.提交事務(wù) * student1 和student2 沒有問題* 但是student3 報(bào)錯(cuò)了* 那么事務(wù)還會(huì)提交嗎? 不會(huì)! ACID一致性: 原子性: 隔離性: 永久性: * * 如果說 每個(gè)save()都會(huì)產(chǎn)生sql語句,與數(shù)據(jù)庫產(chǎn)生交互! 這樣數(shù)據(jù)庫的壓力大!* 怎么減輕?* 在commit()的時(shí)候,把之前的sql語句一起發(fā)送給數(shù)據(jù)庫執(zhí)行!*/transaction.commit();// 08.關(guān)閉session session.close();}}hbm2ddl:屬性值
<!--是否顯示底層生成的sql語句 --><property name="show_sql">true</property><!--格式化生成的sql語句 --><property name="format_sql">true</property><!-- hbm2ddl 01.create:每次運(yùn)行都會(huì)刪除上次生成的表!02.update:沒有表會(huì)自動(dòng)創(chuàng)建,如果有,新增數(shù)據(jù)!字段不一致,會(huì)按照hbm.xml文件中的column屬性值 ,在數(shù)據(jù)庫中新增一列03.validate:不會(huì)自動(dòng)創(chuàng)建表,如果表存在,會(huì)新增數(shù)據(jù)!字段不一致,會(huì)拋出異常,說在數(shù)據(jù)庫中沒有該字段04.create-drop: 每次運(yùn)行都會(huì)刪除上次生成的表!sessionFactory關(guān)閉的時(shí)候,數(shù)據(jù)庫中的表也會(huì)刪除!--><property name="hbm2ddl.auto">update</property>小結(jié)
hibernate: 持久層的框架! 是一個(gè)開放源代碼的對(duì)象關(guān)系映射框架(OMR)!之前我們?cè)L問數(shù)據(jù)庫使用JDBC! 對(duì)JDBC進(jìn)行了輕量級(jí)的對(duì)象封裝!是一個(gè)全自動(dòng)ORM框架!(底層可以自動(dòng)生成sql語句)! 使用面向?qū)ο蟮乃枷雭聿僮鲾?shù)據(jù)庫!Student 實(shí)體類 Student.hbm.xml mapping(映射文件)hibernate.cfg.xml:是整個(gè)hibernate框架的核心配置文件! 01.管理mapping文件 02.整個(gè)hibernate環(huán)境的配置 03.連接數(shù)據(jù)庫的四要素sql的四種語言:DDL:數(shù)據(jù)定義語言 create alter drop truncate DML: 數(shù)據(jù)操作語言 select insert update delete DCL: 數(shù)據(jù)控制語言 grant revoke TCL: 事務(wù)控制語言 savepoint rollback<!-- hbm2ddl 01.create:每次運(yùn)行都會(huì)刪除上次生成的表!02.update:沒有表會(huì)自動(dòng)創(chuàng)建,如果有,新增數(shù)據(jù)!字段不一致,會(huì)按照hbm.xml文件中的column屬性值 ,在數(shù)據(jù)庫中新增一列03.validate:不會(huì)自動(dòng)創(chuàng)建表,如果表存在,會(huì)新增數(shù)據(jù)!字段不一致,會(huì)拋出異常,說在數(shù)據(jù)庫中沒有該字段04.create-drop:每次運(yùn)行都會(huì)刪除上次生成的表! 當(dāng)sessionFactory關(guān)閉的時(shí)候,數(shù)據(jù)庫中的表自動(dòng)刪除--><property name="hbm2ddl.auto">update</property>oracle數(shù)據(jù)庫創(chuàng)建序列 create sequence sq_student_id minvalue 1 maxvalue 9999999999 start with 10 incrment by 1 cache 20; <id name="id"><!--主鍵生成策略 01.assigned:主鍵生成的值由用戶決定,與底層數(shù)據(jù)庫沒有關(guān)系!在調(diào)用session.save()之前,必須給主鍵賦值,否則會(huì)拋出異常!02.sequence:oracle支持的主鍵生成策略!hibernate會(huì)從數(shù)據(jù)庫中取得當(dāng)前的序列下一個(gè)值賦值給主鍵!不需要我們給主鍵賦值! <generator class="sequence"><param name="sequence">sq_student_id</param></generator>03.identity :針對(duì)mysql數(shù)據(jù)庫的主鍵自增04.increment:默認(rèn)會(huì)在數(shù)據(jù)庫中查詢對(duì)應(yīng)表中主鍵的最大值,(select max(id) from stu)之后把值給主鍵!--><generator class="increment"/></id>?
轉(zhuǎn)載于:https://www.cnblogs.com/xtdxs/p/7093477.html
總結(jié)
以上是生活随笔為你收集整理的hibernate02环境的搭建的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Google的其他用法
- 下一篇: click和blur 冲突???