hibernate03增刪改查

來源:互聯網
上載者:User

標籤:dex   tag   hql   public   star   技術分享   主鍵自增   new   map   

<?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"><!-- 對應檔的配置    這就是ORM中的 M!!      Mapping 對應檔      Relational    Mapping       Object   資料庫中的表名以及欄位           對應                  實體類中的類名和屬性    package:類所在的包,保證必須是全類名 class:就是配置我們的 實體類相關的資訊   name:對應的是實體類的類名或者屬性名稱  table,column:如果與實體類的類名和屬性名稱一致,可以不設定 generator:主鍵建置原則          01.assigned:必須是我們手動的給ID賦值!ID的產生與資料庫無關!  會拋出異常!          02.increment:從資料庫表中查詢到主鍵的最大值  (select max(id) from student)!                                                                之後+1把這個值 給我們的主鍵!ID的產生與資料庫有關!          03.identity:針對於mysql資料庫中的主鍵自增          04.sequence:針對於oracle資料庫中的序列!               001.在資料庫中建立序列                   create sequence  sq_student_id                    minvalue  10                    maxvalue  99999999999                    start with 10                    increment by 10                    cache 20;                                                            002.對應檔中配置               <generator class="sequence">                   <param name="sequence">sq_student_id</param>               </generator>               003.底層產生的sql語句                 select sq_student_id.nextval from dual                                                                                          首先從資料庫中取得當前序列的下一個值!  之後把這個值 給我們的主鍵!                                          lazy="true" 是預設採用懶載入的方式  擷取資料!  不想使用懶載入!lazy="false" --><hibernate-mapping package="cn.bdqn.bean">    <class name="Student" table="student" lazy="false">           <id name="id">          <generator class="assigned"/>         </id>         <property name="age"/>         <property name="name"/>    </class></hibernate-mapping>

 






/** * jdbc有常用的API * hibernate也有自己常用的API(核心) * 01.Configuration 類 :讀取我們的核心設定檔----hibernate.cfg.xml * 介面 * 02.SessionFactory :初始化hibernate需要的各種參數! * jdbc.properties初始化一次! SessionFactory也是只需要初始化一次即可!寫成單例! * * 03.Session:之前使用的HttpSession(使用者session)! 現在的session叫會話session! * hibernate就是通過session來操作對象的(增刪改查)以及建立事務對象! * 04.Tranaction :進行事務的處理 * 05.Query :hibernate中的查詢介面(SQL,HQL) * 06.Criteria:hibernate中的查詢介面,是對query進行了簡單封裝! * 更能體現使用的是物件導向的思想來操作資料庫! */public class StudentTest { Session session=null; Transaction transaction=null; //在執行測試方法之前 先執行before @Before public void before(){ /** * 01.讀取核心的設定檔 在src的根目錄下面! 底層規定位置! * 在執行個體化Configuration對象的時候通過configure() * 去src根目錄下面,尋找hibernate.cfg.xml檔案 */ Configuration configuration=new Configuration().configure(); //02.建立sessionFactory SessionFactory sessionFactory = configuration.buildSessionFactory(); //03.開啟session session = sessionFactory.openSession(); //04.開啟事務 transaction= session.beginTransaction(); } //在執行測試方法之後 @After public void after(){ //07.提交事務 sql語句 整體的執行! transaction.commit(); //08.關閉session session.close(); //sessionFactory.close(); 驗證hbm2ddl中的create-drop } //新增 @Test public void addStudent(){ //05.建立一個對象 Student student=new Student(500,5, "小白555"); //06.持久化操作---》將對象儲存到資料庫中 session.save(student); //不會產生 insert語句 } /** * 根據id刪除指定的學生 * * 會產生 2條sql語句 * 01.根據id去資料庫中查詢 有沒有對應的資料 * 02.根據id刪除 指定delete語句 */ @Test public void delStudent(){ Student student=new Student(); student.setId(2); //給對象的ID賦值 //session對象的方法 delete刪除 System.out.println("************"); session.delete(student); System.out.println("************"); } /** * 根據id修改指定的學生 * 只會執行一條update語句! * 如果資料庫中沒有指定id的資料,沒效果!有 就更新! */ @Test public void updateStudent(){ Student student=new Student(); student.setId(1000); //給對象的ID賦值 System.out.println("************"); student.setAge(50); session.update(student); System.out.println("************"); } /** * 查詢資料庫中指定學生的資訊 * 查詢 不需要事務! * get和load的區別 * get: * 01.在get()立即產生一條sql語句 * 02.首先回去hibernate的1級緩衝(session)中查詢有沒有對應的資料 * 如果有,直接返回,就不會訪問資料庫! * 如果沒有,去2級緩衝中查詢(sessionFactory)中查詢! * 如果2級緩衝中也沒有資料,則會產生一條select語句 訪問資料庫! * 03.如果資料庫中存在該資料 則返回 * 04.沒有對應的資料 返回 null */ @Test public void getStudent(){ //通過get()擷取資料 System.out.println("****************"); Student student=(Student) session.get(Student.class, 200); System.out.println("****************"); System.out.println(student); } //驗證不會訪問資料庫 @Test public void getStudent2(){ //通過get()擷取資料 Student student=(Student) session.get(Student.class, 200); //被session管理 Student student2=(Student) session.get(Student.class, 200); //緩衝中已經存在了 } /** * evict()從session緩衝中 清除指定的對象 */ @Test public void evictStudent(){ //通過get()擷取資料 Student student=(Student) session.get(Student.class, 200); //被session管理 Student student2=(Student) session.get(Student.class, 300); //被session管理 session.evict(student); //從session緩衝中 清除student對象 /** * 有人認為:1級緩衝中確實是清除了!但是2級緩衝中應該沒有清除吧? * 不是這麼理解的! 2級緩衝需要我們手工配置!不配置 就不存在2級緩衝! */ student=(Student) session.get(Student.class, 200); //再次擷取id為200的資料 } /** * clear() 從session緩衝中 清除所有的對象 */ @Test public void clearStudent(){ //通過get()擷取資料 Student student=(Student) session.get(Student.class, 200); //被session管理 Student student2=(Student) session.get(Student.class, 300); //被session管理 //session.clear(); //從session緩衝中 清除所有對象 student=(Student) session.get(Student.class, 200); //再次擷取id為200的資料 student2=(Student) session.get(Student.class, 300); //再次擷取id為300的資料 } /** * load: 懶載入 * 01.不會立即產生sql語句 * 02.在使用者使用真正對象的時候才去訪問資料庫! * 03.首先回去hibernate的1級緩衝(session)中查詢有沒有對應的資料 * 如果有,直接返回,就不會訪問資料庫! * 如果沒有,去2級緩衝中查詢(sessionFactory)中查詢! * 如果2級緩衝中也沒有資料,則會產生一條select語句 訪問資料庫! * 04.如果資料庫中存在該資料 則返回 * 05.沒有對應的資料 返回 ObjectNotFoundException 異常 * 06.如果想實現和 get()一樣的效果!怎麼做? * 在對應的hbm.xml檔案中的 class節點上 新增 lazy="false" 立即載入! */ @Test public void loadStudent(){ //通過load()擷取資料 Student student=(Student) session.load(Student.class, 200); System.out.println("****************"); System.out.println(student); //產生sql語句 System.out.println("****************"); }}

hibernate03增刪改查

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.