-
@GetCurrentSession——(下) session4 = sessionFactory.getCurrentSession(); session5 = sessionFactory.getCurrentSession(); if(session4==session5){ System.out.println(true); }else{ System.out.println(false); } transaction = session4.beginTransaction();// 開啟事務 Student s4 = new Student("Jack", "女", new Date().toString(), "虹橋"); session4.doWork(new Work() { @Override public void execute(Connection conn) throws SQLException { System.out.println("session4_hashCode:" + conn.hashCode()); } }); session5.doWork(new Work() { @Override public void execute(Connection conn) throws SQLException { System.out.println("session5_hashCode:" + conn.hashCode()); } }); session4.save(s4); transaction.commit();// 提交事務 } @輸出: session3_hashCode:1099677525 session4_hashCode:1399877303 session5_hashCode:1399877303 Ps:getCurrentSession可以理解像單例模式。 【溫馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等編程愛好者關注我,加我慕課好友,互相學習,共同進步!】查看全部
-
@GetCurrentSession——(上) @Test public void testSaveStudentWithGetCurrentSession() { SessionFactory sessionFactory; Transaction transaction; Session session3, session4,session5; Configuration config = new Configuration().configure(); ServiceRegistry serviceRegistry = new ServiceRegistryBuilder() .applySettings(config.getProperties()).buildServiceRegistry(); sessionFactory = config.buildSessionFactory(serviceRegistry); session3 = sessionFactory.getCurrentSession(); transaction = session3.beginTransaction();// 開啟事務 Student s3 = new Student("Jack", "男", new Date().toString(), "虹橋"); session3.doWork(new Work() { @Override public void execute(Connection conn) throws SQLException { System.out.println("session3_hashCode:" + conn.hashCode()); } }); session3.save(s3); transaction.commit();// 提交事務 ... Ps:GetCurrentSession:session自動關閉是在commit();后,所以session3對象和session4對象hashCode不一樣,因為已經關閉,內存已經釋放掉,但是session4和session5因為還沒關閉,所以獲取的是同一個對象。查看全部
-
@OpenSession——(下) session2 = sessionFactory.openSession(); transaction = session2.beginTransaction();// 開啟事務 Student s2 = new Student("Jack", "女", new Date().toString(), "虹橋"); session2.doWork(new Work() { @Override public void execute(Connection conn) throws SQLException { System.out.println("session2_hashCode:" + conn.hashCode()); } }); session2.save(s2); transaction.commit();// 提交事務 } @輸出: session1_hashCode:2018078818 session2_hashCode:22221156 【溫馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等編程愛好者關注我,加我慕課好友,互相學習,共同進步!】查看全部
-
@OpenSession——(上) @Test public void testSaveStudentWithOpenSession() { SessionFactory sessionFactory; Transaction transaction; Session session1, session2; Configuration config = new Configuration().configure(); ServiceRegistry serviceRegistry = new ServiceRegistryBuilder() .applySettings(config.getProperties()).buildServiceRegistry(); sessionFactory = config.buildSessionFactory(serviceRegistry); session1 = sessionFactory.openSession(); transaction = session1.beginTransaction();// 開啟事務 Student s1 = new Student("Jack", "男", new Date().toString(), "虹橋"); session1.doWork(new Work() { @Override public void execute(Connection conn) throws SQLException { System.out.println("session1_hashCode:" + conn.hashCode()); } }); session1.save(s1); transaction.commit();// 提交事務 ... 【溫馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等編程愛好者關注我,加我慕課好友,互相學習,共同進步!】查看全部
-
@本地事務和全局事務: 全局事務:資源管理器管理和協調的事務,可以跨越多個數據庫和進程。資源管理器一般使用 XA 二階段提交協議與“企業信息系統”(EIS) 或數據庫進行交互。 本地事務:在單個 EIS 或數據庫的本地并且限制在單個進程內的事務。本地事務不涉及多個數據來源。 Ps:如果有多個@Test,按照代碼流思想來執行。 【溫馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等編程愛好者關注我,加我慕課好友,互相學習,共同進步!】查看全部
-
@SessionTest.java @Test public void testOpenSession() { SessionFactory sessionFactory; Session session; // 創建配置對象 Configuration config = new Configuration().configure(); // 創建服務注冊對象 ServiceRegistry serviceRegistry = new ServiceRegistryBuilder() .applySettings(config.getProperties()).buildServiceRegistry(); // 創建會話工廠對象 sessionFactory = config.buildSessionFactory(serviceRegistry); // 會話對象 session = sessionFactory.openSession(); if(session!=null){ System.out.println("openSession_session創建成功!"); }else{ System.out.println("openSession_session創建失??!"); } } @Test public void testGetCurrentSession() { ... session = sessionFactory.getCurrentSession(); if(session!=null){ System.out.println("getCurrentSession_session創建成功!"); }else{ System.out.println("getCurrentSession_session創建失??!"); } } @hibernate.cfg.xml <property name="hibernate.current_session_context_class">thread</property> @輸出: openSession_session創建成功! getCurrentSession_session創建成功!查看全部
-
hibernate.cfg.xml常用配置查看全部
-
1、Hibernate對數據的操作都是封裝在事務當中,并且默認是非自動提交的方式。所以用session保存對象時,如果不開啟事務,并且手工提交事務,對象并不會真正保存在數據庫中。 2、如果不開啟事務,并想讓Hibernate像jdbc那樣自動提交事務,必須調用session對象的doWork()方法,獲得jdbc的connection后,設置其為自動提交事務模式。(注意:通常并不推薦這樣做) Ps:記得在session.save();前操作doWork(new Work(){conn.setAutoCommit(true);});時,記得在session.save();后調用session.flush();。 【溫馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等編程愛好者關注我,加我慕課好友,互相學習,共同進步!】查看全部
-
1.不建議直接使用jdbc的connection操作數據庫,而是通過session操作數據庫。 2.session可以了解為操作數據庫的對象,操作數據庫之前必須先獲取session的實例 3.session與connection,是多對一關系,每個session都有一個與之對應的connection,一個connection不同時刻可以供多個session使用。 4.把對象保存到關系數據庫中需要調用session的各種方法:save(),delete(),update(),createQuery()————增、刪、改、查。 【溫馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等編程愛好者關注我,加我慕課好友,互相學習,共同進步!】查看全部
-
<property name="show_sql">true</property> <property name="format_sql">true</property> <property name="hibernate.default_schema">hibernate</property>//設置前提在hbm.xml里沒有設置schema="dbo" catalog="hibernatedb";否則無效,hbm.xml設置會優先。 <property name="hbm2ddl.auto">create</property> 1、create:先刪除原有的表,然后重新生成。 2、update:不會刪除原有的表,在原有的基礎上繼續操作。 Ps:對于Oracle此為用戶名,不是表空間;對于MySql此為數據庫名:hibernate.default_schema=excavator 【溫馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等編程愛好者關注我,加我慕課好友,互相學習,共同進步!】查看全部
-
Ps1:創建里面可以存放包/類的文件夾:項目——New——Source Folder(作用同src文件夾)。 Ps2:注意導入的包都是hibernate和junit。 【溫馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等編程愛好者關注我,加我慕課好友,互相學習,共同進步!】查看全部
-
hibernate配置文檔查看全部
-
dialect就是“方言”,因為hibernate是要把Java對象轉換成關系數據庫來描述的,而關系數據庫雖然有一些統一的標準,如SQL-92等,但是實際上各數據庫如Oracle, MySQL, MS SQL Server等等為了提高性能或增加功能都提供了一些額外的標準或語法,因此,hibernate為了更好適配各種關系數據庫,針對每種數據庫都指定了一個方言dialect。你可以看到hibernate里面實際上方言只是一個類,它里面將不同數據類型、SQL語法轉換成hibernate能理解的統一的格式。但注意,如果沒有對應的dialect,Hibernate是無法使用這種數據庫進行對象關系轉換的。 Ps:執行順序:@Before——@Test——@After 【溫馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等編程愛好者關注我,加我慕課好友,互相學習,共同進步!】查看全部
-
get和load的區別查看全部
-
get和load查看全部
舉報
0/150
提交
取消