Java Hibernate 之 CRUD 操作
CRUD是指在做計算處理時的增加(Create)、讀取(Retrieve)(重新得到資料)、更新(Update)和刪除(Delete)幾個單詞的首字母簡寫.
下面列舉例項來講解這幾個操作:
實體類:
package com.oumyye.model; public class Student { private long id; private String name; private Class c; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Class getC() { return c; } public void setC(Class c) { this.c = c; } @Override public String toString() { return "Student [id=" + id + ", name=" + name + "]"; } }
package com.oumyye.model; import java.util.HashSet; import java.util.Set; public class Class { private long id; private String name; private Set<Student> students=new HashSet<Student>(); public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Set<Student> getStudents() { return students; } public void setStudents(Set<Student> students) { this.students = students; } }
對映檔案:
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"> <hibernate-mapping package="com.oumyye.model"> <class name="Student" table="t_student"> <id column="stuId" name="id"> <generator class="native"/> </id> <property column="stuName" generated="never" lazy="false" name="name"/> <many-to-one cascade="save-update" class="com.oumyye.model.Class" column="classId" name="c"/> </class> </hibernate-mapping>
Class.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"> <hibernate-mapping package="com.oumyye.model"> <class name="Class" table="t_class"> <id column="classId" name="id"> <generator class="native"/> </id> <property column="className" generated="never" lazy="false" name="name"/> <set cascade="delete" inverse="true" name="students" sort="unsorted"> <key column="classId"/> <one-to-many class="com.oumyye.model.Student"/> </set> </class> </hibernate-mapping>
工具類:可以有myeclipse生成
package com.oumyye.util; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.cfg.Configuration; import org.hibernate.cfg.AnnotationConfiguration; /** * Configures and provides access to Hibernate sessions, tied to the * current thread of execution. Follows the Thread Local Session * pattern, see {@link http://hibernate.org/42.html }. */ public class HibernateSessionFactory { /** * Location of hibernate.cfg.xml file. * Location should be on the classpath as Hibernate uses * #resourceAsStream style lookup for its configuration file. * The default classpath location of the hibernate config file is * in the default package. Use #setConfigFile() to update * the location of the configuration file for the current session. */ private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>(); private static org.hibernate.SessionFactory sessionFactory; private static Configuration configuration = new AnnotationConfiguration(); private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml"; private static String configFile = CONFIG_FILE_LOCATION; static { try { configuration.configure(configFile); sessionFactory = configuration.buildSessionFactory(); } catch (Exception e) { System.err.println("%%%% Error Creating SessionFactory %%%%"); e.printStackTrace(); } } private HibernateSessionFactory() { } /** * Returns the ThreadLocal Session instance. Lazy initialize * the <code>SessionFactory</code> if needed. * * @return Session * @throws HibernateException */ public static Session getSession() throws HibernateException { Session session = (Session) threadLocal.get(); if (session == null || !session.isOpen()) { if (sessionFactory == null) { rebuildSessionFactory(); } session = (sessionFactory != null) ? sessionFactory.openSession() : null; threadLocal.set(session); } return session; } /** * Rebuild hibernate session factory * */ public static void rebuildSessionFactory() { try { configuration.configure(configFile); sessionFactory = configuration.buildSessionFactory(); } catch (Exception e) { System.err.println("%%%% Error Creating SessionFactory %%%%"); e.printStackTrace(); } } /** * Close the single hibernate session instance. * * @throws HibernateException */ public static void closeSession() throws HibernateException { Session session = (Session) threadLocal.get(); threadLocal.set(null); if (session != null) { session.close(); } } /** * return session factory * */ public static org.hibernate.SessionFactory getSessionFactory() { return sessionFactory; } /** * return session factory * * session factory will be rebuilded in the next call */ public static void setConfigFile(String configFile) { HibernateSessionFactory.configFile = configFile; sessionFactory = null; } /** * return hibernate configuration * */ public static Configuration getConfiguration() { return configuration; } }
配置檔案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="connection.driver_class"> com.mysql.jdbc.Driver </property> <property name="connection.url"> jdbc:mysql://localhost:3306/mytest </property> <property name="connection.username">root</property> <property name="connection.password">root</property> <!-- 方言 --> <property name="dialect"> org.hibernate.dialect.MySQL5Dialect </property> <!-- 控制檯顯示SQL --> <property name="show_sql">true</property> <!-- 自動更新表結構 --> <property name="hbm2ddl.auto">update</property> <mapping resource="com/oumyye/model/Class.hbm.xml" /> <mapping resource="com/oumyye/model/Student.hbm.xml" /> </session-factory> </hibernate-configuration>
測試類
package com.oumyye.service; import java.util.Iterator; import java.util.Set; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.oumyye.model.Class; import com.oumyye.model.Student; import com.oumyye.util.HibernateSessionFactory; public class StudentTest { private SessionFactory sessionFactory=HibernateSessionFactory.getSessionFactory(); private Session session; @Before public void setUp() throws Exception { session=sessionFactory.openSession(); // 生成一個session session.beginTransaction(); // 開啟事務 } @After public void tearDown() throws Exception { session.getTransaction().commit(); // 提交事務 session.close(); // 關閉session } @Test public void testSaveClassAndStudent() { Class c=new Class(); c.setName("08計本"); Student s1=new Student(); s1.setName("張三"); s1.setC(c); Student s2=new Student(); s2.setName("李四"); s2.setC(c); session.save(s1); session.save(s2); } @Test public void testLoadClass(){ // Class c=(Class)session.load(Class.class, Long.valueOf(2)); Class c=(Class)session.load(Class.class, Long.valueOf(1)); System.out.println(c.getStudents()); } @Test public void testGetClass(){ // Class c=(Class)session.get(Class.class, Long.valueOf(2)); Class c=(Class)session.get(Class.class, Long.valueOf(1)); System.out.println(c.getStudents()); } @Test public void testUpdateClass(){ Session session1=sessionFactory.openSession(); session1.beginTransaction(); Class c=(Class)session1.get(Class.class, Long.valueOf(1)); session1.getTransaction().commit(); // 提交事務 session1.close(); Session session2=sessionFactory.openSession(); session2.beginTransaction(); c.setName("08計算機本科2"); session2.update(c); session2.getTransaction().commit(); // 提交事務 session2.close(); } <!--更新--> @Test public void testSaveOrUpdateClass(){ Session session1=sessionFactory.openSession(); session1.beginTransaction(); Class c=(Class)session1.get(Class.class, Long.valueOf(1)); session1.getTransaction().commit(); // 提交事務 session1.close(); Session session2=sessionFactory.openSession(); session2.beginTransaction(); c.setName("08計算機本科3"); Class c2=new Class(); c2.setName("09計算機本科3"); session2.saveOrUpdate(c); session2.saveOrUpdate(c2); session2.getTransaction().commit(); // 提交事務 session2.close(); } @Test public void testMergeClass(){ Session session1=sessionFactory.openSession(); session1.beginTransaction(); Class c=(Class)session1.get(Class.class, Long.valueOf(1)); session1.getTransaction().commit(); // 提交事務 session1.close(); Session session2=sessionFactory.openSession(); session2.beginTransaction(); Class c2=(Class)session2.get(Class.class, Long.valueOf(1)); c.setName("08計算機本科4"); session2.merge(c); session2.getTransaction().commit(); // 提交事務 session2.close(); } <!--刪除--> @Test public void testDeleteStudent(){ Student student=(Student)session.load(Student.class, Long.valueOf(1)); session.delete(student); } }
Session的入門常用方法
- Query query = session.createQuery(hql):利用hql查詢語句查詢;
- Criteria critera = session.createCriteria(Class clazz);
- (3)Transaction tx = session.beginTransaction(); //開始事務;tx.commit()提交事務;
- session.close();//關閉Session,此後被session管理的持久化物件變為脫管狀態;
- session.save(Object obj); //新增
- session.update(Object obj); //更新
- session.delete(Object obj); //刪除
- Object obj = session.get(Class clazz,Serialiazble id); //根據主鍵查詢記錄並返回;
- Object obj = session.load(Class clazz,Serializable id); //和get方法效果一樣,但是是懶載入,即在不使用他之前他不會返回物件;
相關文章
- JPA之使用JPQL進行CRUD操作
- Hibernate中常用CRUD程式碼
- Spring Boot Crud操作示例 | Java Code GeeksSpring BootJava
- Java 8 Streams 中的資料庫 CRUD 操作Java資料庫
- Elasticsearch CRUD基本操作Elasticsearch
- go操作mongo CRUDGo
- Java Hibernate 之 Session 狀態JavaSession
- MyBatis 的簡單 CRUD 操作MyBatis
- Mybatis:CRUD操作及配置解析MyBatis
- 使用PreparedStatement實現CRUD操作
- MongoDB 4.X CRUD基本操作MongoDB
- JPA工程的建立和CRUD操作
- mybatis 的crud及批量cud操作MyBatis
- java之Hibernate面試要點總結Java面試
- Java Hibernate 之連線池詳解Java
- Java框架學習之Hibernate入門Java框架
- Spring Boot+MiniUI CRUD操作Spring BootUI
- java框架之Hibernate框架知識點整理。Java框架
- java操作excel之jxlJavaExcel
- 使用go在mongodb中進行CRUD操作MongoDB
- 二叉排序樹BST及CRUD操作排序
- spring 整合 mybatis 及mybatis 的 crud 操作SpringMyBatis
- Transact-SQL系列: 單表的CRUD操作SQL
- Hibernate Blob 操作問題!
- 好程式設計師Java教程分享Java面試題之Hibernate程式設計師Java面試題
- Java操作Cookie之新增CookieJavaCookie
- MyBatis-Plus:簡化 CRUD 操作的藝術MyBatis
- SSM整合之CRUD環境搭建整合SSM
- Java 檔案 IO 操作之 DirectIOJava
- Java操作PDF檔案之ITextJava
- java 反射之操作靜態MethodJava反射
- 在Java中地域分佈資料庫是如何連線和進行CRUD 操作的?Java資料庫
- ES 筆記四:文件的基本 CRUD 與批量操作筆記
- 使用“純”Servlet做一個單表的CRUD操作Servlet
- Laravel Database——資料庫的 CRUD 操作原始碼分析LaravelDatabase資料庫原始碼
- Amazon DynamoDB 入門4:專案的基本操作(CRUD)
- JAVA高階程式設計之hibernate框架學習二Java程式設計框架
- Hibernate之DetachedCriteria、Criteria