hibernate02环境的搭建
生活随笔
收集整理的這篇文章主要介紹了
hibernate02环境的搭建
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
hibernate: 持久層的框架!
是一個開放源代碼的對象關系映射框架(ORM)!之前我們訪問數據庫使用JDBC!
對JDBC進行了輕量級的對象封裝!是一個全自動ORM框架!(底層可以自動生成sql語句)!
使用面向對象的思想來操作數據庫!
?
創建一個java項目
引入需要的hibernate需要的jar包以及連接數據庫需要的驅動包
把jar包放入項目中并引用
?
?創建對應的學生類
/*** 學生的實體類*/ public class Student {private Integer id;private Integer age;private String name;// 和數據庫中不一致 (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 + "]";}}創建對應的數據庫中的學生表
找到對應mapping映射文件,放在和實體類相同的包下!并修改其中的內容
?
修改Student.hbm.xml文件之后的內容
<?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 目的;實體類和 數據庫中的表 產生關系 package:是說明我們需要映射的實體類的包名 class name:對應的是實體類的名稱(如果省略了package屬性,必須書寫全類名) property,id name:對應的是實體類中的屬性名,如果和數據庫中的字段一致,則可以省略column--> <hibernate-mapping package="cn.bdqn.bean"><class name="Student" table="stu"><id name="id"><!--主鍵生成策略 assigned:主鍵的生成值完全由用戶決定,與底層數據庫無關。在調用session.save()之前必須指定主鍵值,否則會拋出異常!--><generator class="assigned"/></id><!--配置其他屬性的映射 --><property name="age"/><property name="name" column="sname"/></class> </hibernate-mapping>找到hibernate核心的配置文件并修改內容?
?
?
修改后的hibernate.cfg.xml文件內容
<!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>創建對應的測試類
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 小豆腐* 以后的你,會感謝現在努力的自己!努力!堅持!不放棄!* * hibernate核心的* 1個類* 01. 類 Configuration !對核心配置文件的讀取! * 5個接口 * 01. SessionFactory:負責初始化hibernate需要的參數!在程序中有一個就夠了!之后我們會寫成單例模式! * 02. Session:不是我們的HttpSession(用戶session)! 我們hibernate的session* 是用來操作對象(增刪改查)!創建事務的對象!我們現在使用的session不是線程安全的! * 03. Transaction :進行事務的操作!* 04. Query :hibernate中查詢的接口(sql , hql)* 05. Criteria :和Query相似!但是做了一些封裝! */ public class StudentTest {// 新增學生信息 @Testpublic void addStudent() {/*** 01.讀取核心配置文件 因為我們需要的信息都在這個核心配置文件中(連接數據庫的四要素,映射文件) * configure()底層默認去src下面查詢了hibernate.cfg.xml文件*/Configuration configuration = new Configuration().configure();// 02.創建sessionFactorySessionFactory sessionFactory = configuration.buildSessionFactory();// 03.打開sessionSession session = sessionFactory.openSession();// 04.開啟事務Transaction transaction = session.beginTransaction();// 05.創建一個Student對象Student student = new Student(400, 50, "小黃");// 06.持久化操作 session.save(student);// 07.提交事務 的 會產生sql語句 transaction.commit();// 08.關閉session session.close();}// 新增學生信息 @Testpublic void addStudent2() {/*** 01.讀取核心配置文件 因為我們需要的信息都在這個核心配置文件中(連接數據庫的四要素,映射文件) * configure()底層默認去src下面查詢了hibernate.cfg.xml文件*/Configuration configuration = new Configuration().configure();// 02.創建sessionFactorySessionFactory sessionFactory = configuration.buildSessionFactory();// 03.打開sessionSession session = sessionFactory.openSession();// 04.開啟事務Transaction transaction = session.beginTransaction();// 05.創建一個Student對象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"); // 沒有手動的給主鍵賦值,會拋出異常 session.save(student3);/*** 07.提交事務 * student1 和student2 沒有問題* 但是student3 報錯了* 那么事務還會提交嗎? 不會! ACID一致性: 原子性: 隔離性: 永久性: * * 如果說 每個save()都會產生sql語句,與數據庫產生交互! 這樣數據庫的壓力大!* 怎么減輕?* 在commit()的時候,把之前的sql語句一起發送給數據庫執行!*/transaction.commit();// 08.關閉session session.close();}}hbm2ddl:屬性值
<!--是否顯示底層生成的sql語句 --><property name="show_sql">true</property><!--格式化生成的sql語句 --><property name="format_sql">true</property><!-- hbm2ddl 01.create:每次運行都會刪除上次生成的表!02.update:沒有表會自動創建,如果有,新增數據!字段不一致,會按照hbm.xml文件中的column屬性值 ,在數據庫中新增一列03.validate:不會自動創建表,如果表存在,會新增數據!字段不一致,會拋出異常,說在數據庫中沒有該字段04.create-drop: 每次運行都會刪除上次生成的表!sessionFactory關閉的時候,數據庫中的表也會刪除!--><property name="hbm2ddl.auto">update</property>小結
hibernate: 持久層的框架! 是一個開放源代碼的對象關系映射框架(OMR)!之前我們訪問數據庫使用JDBC! 對JDBC進行了輕量級的對象封裝!是一個全自動ORM框架!(底層可以自動生成sql語句)! 使用面向對象的思想來操作數據庫!Student 實體類 Student.hbm.xml mapping(映射文件)hibernate.cfg.xml:是整個hibernate框架的核心配置文件! 01.管理mapping文件 02.整個hibernate環境的配置 03.連接數據庫的四要素sql的四種語言:DDL:數據定義語言 create alter drop truncate DML: 數據操作語言 select insert update delete DCL: 數據控制語言 grant revoke TCL: 事務控制語言 savepoint rollback<!-- hbm2ddl 01.create:每次運行都會刪除上次生成的表!02.update:沒有表會自動創建,如果有,新增數據!字段不一致,會按照hbm.xml文件中的column屬性值 ,在數據庫中新增一列03.validate:不會自動創建表,如果表存在,會新增數據!字段不一致,會拋出異常,說在數據庫中沒有該字段04.create-drop:每次運行都會刪除上次生成的表! 當sessionFactory關閉的時候,數據庫中的表自動刪除--><property name="hbm2ddl.auto">update</property>oracle數據庫創建序列 create sequence sq_student_id minvalue 1 maxvalue 9999999999 start with 10 incrment by 1 cache 20; <id name="id"><!--主鍵生成策略 01.assigned:主鍵生成的值由用戶決定,與底層數據庫沒有關系!在調用session.save()之前,必須給主鍵賦值,否則會拋出異常!02.sequence:oracle支持的主鍵生成策略!hibernate會從數據庫中取得當前的序列下一個值賦值給主鍵!不需要我們給主鍵賦值! <generator class="sequence"><param name="sequence">sq_student_id</param></generator>03.identity :針對mysql數據庫的主鍵自增04.increment:默認會在數據庫中查詢對應表中主鍵的最大值,(select max(id) from stu)之后把值給主鍵!--><generator class="increment"/></id>?
轉載于:https://www.cnblogs.com/xtdxs/p/7093477.html
總結
以上是生活随笔為你收集整理的hibernate02环境的搭建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Google的其他用法
- 下一篇: click和blur 冲突???