日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hibernate 基本配置文件+基本增删改查

發布時間:2025/5/22 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hibernate 基本配置文件+基本增删改查 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文件結構

maven 依賴

<!-- hibernate 核心依賴 --> <dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>5.4.22.Final</version> </dependency> <!-- mysql依賴 --> <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.49</version> </dependency> <!-- 單元測試 --> <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13</version><scope>test</scope> </dependency>

1. 工具類 HibernateUtil.java

包com.xxx.utils
src/main/resources/mapper/Department.hbm.xml

package com.bdqn.utils;import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration;/*** Hibernate 工具類*/ public class HibernateUtil {// 會話工廠對象private static SessionFactory sessionFactory;// 使用靜態代碼讀取配置文件static {// 1. 讀取并解析配置文件Configuration configuration = new Configuration().configure();// 2. 創建會話工廠類sessionFactory = configuration.buildSessionFactory();}/*** 獲取Session** @return*/public static Session getSession() {// return sessionFactory.openSession(); // 需要關閉資源return sessionFactory.getCurrentSession(); // 需要在hibernate文件中配置線程上線文}/*** 根據主鍵刪除* */public static void closeSession(Session session){// 判斷Session是否為空或Session是否處于打開狀態if(session != null && session.isOpen()){session.close(); // 關閉 session}// 關閉工廠對象sessionFactory.close();}}

2. 實體類文件 實例

包:com.xxx.entity

package com.bdqn.entity; /*** 部門類* */ public class Department {// int默認為0 Integer默認為空private Integer deptNo; // 部門編號private String deptName; // 部門名稱private String location; // 部門位置public Integer getDeptNo() {return deptNo;}public String getDeptName() {return deptName;}public String getLocation() {return location;}public void setDeptNo(Integer deptNo) {this.deptNo = deptNo;}public void setDeptName(String deptName) {this.deptName = deptName;}public void setLocation(String location) {this.location = location;}@Overridepublic String toString() {return "Department{" +"deptNo=" + deptNo +", deptName='" + deptName + '\'' +", location='" + location + '\'' +'}';} }

3. hibernate配置文件 hibernate.cfg.xml

hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration><session-factory><!-- Hibernate 連接數據庫的基本信息 --><property name="connection.driver_class">com.mysql.jdbc.Driver</property><property name="connection.username">root</property><property name="connection.password">123456</property><property name="connection.url">jdbc:mysql://localhost:3306/myweb?useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=Asia/Shanghai</property><!-- 使用MYSQL的 innodb引擎 --><property name="hibernate.dialect.storage_engine">innodb</property><!--<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>--><!-- 根據實體類生成數據庫表 --><!-- create:每次運行會重新創建表 --><!-- update: 修改表 --><property name="hibernate.hbm2ddl.auto">update</property><!-- 顯示SQL語句 --><property name="show_sql">true</property><!-- 格式化SQL語句 --><property name="format_sql">true</property><!-- 線程上下文 對應獲取Session第二種方法 --><property name="current_session_context_class">thread</property><!-- 加載映射文件 --><mapping resource="mapper/Department.hbm.xml"/></session-factory></hibernate-configuration>

4. 映射文件 實體類名.hbm.xml

src/main/resources/mapper/Department.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><!--class標簽:配置該實體類的數據庫表name屬性:該實體類的路徑(全局路徑、全限定名)table屬性:該實體類關聯的數據庫表的名稱--><class name="com.bdqn.entity.Department" table="department"><!--mmnnnid標簽:配置主鍵屬性name屬性:實體類的屬性名(嚴格區分大小寫)type屬性:該屬性的數據類型column屬性:對應數據表中的列名,不區分大小寫,當屬性名與列名一致時,可省略不寫--><id name="deptNo" type="java.lang.Integer" column="deptNo"><!-- 配置主鍵生成策略 --><!-- assigned:主鍵有程序提供,默認生成策略,一般不用 --><!-- increment: 主鍵自增:先插敘表中的最大主鍵值,在此基礎上+1操作,適用于mysql,sql server等數據庫自增的不適合oracle --><generator class="increment"/></id><!--property標簽:配置普通屬性(非主鍵)name屬性:實體類的屬性名(嚴格區分大小寫)type屬性:該屬性的數據類型column屬性:對應數據庫表中的列名,不區分大小寫,當屬性名與列名一致時,可省略不寫--><property name="deptName" type="string" column="deptName"/><property name="location" type="java.lang.String"><column name="location"></column></property></class> </hibernate-mapping>

5. 增

5.1 普通方法

/*** 添加部門*/ @Test public void testAddDept() {// 1.讀取hibernate配置文件Configuration configure = new Configuration().configure();// 2.創建SessionFactory工廠SessionFactory sessionFactory = configure.buildSessionFactory();// 3.創建Session對象// 方法一: 使用openSession()方法獲取對象,必須關閉session對象// Session session = sessionFactory.openSession();// 方法二:此方法獲取Session對象必須配置線程上下文Session session = sessionFactory.getCurrentSession();// 4.開啟事務Transaction transaction = session.beginTransaction();// 5. 持久化操作Department department = new Department();// department.setDeptNo(6); // 主鍵自增時這個失效department.setDeptName("市場部");department.setLocation("202");try {// 調用save()方法保存session.save(department);// 6.提交事務transaction.commit();} catch (Exception e) {e.printStackTrace();// 回滾事務transaction.rollback();} finally {// 關閉資源if (session != null) {session.close();}}}

6. 刪

6.1 根據主鍵刪除

/** * 根據主鍵刪除 * */ @Test public void testDelete() {// 獲取 sessionSession session = HibernateUtil.getSession();// 開啟事務Transaction transaction = session.beginTransaction();try {// 根據主鍵查詢 查不到返回 nullDepartment department = session.get(Department.class, 1);session.delete(department);transaction.commit(); // System.out.println(department);} catch (Exception e) {// 關閉資源HibernateUtil.closeSession(session);}}

7. 改

7.1 先查詢 后修改

/** * 先查詢 后修改:沒有賦值的屬性保持不變 * */ @Test public void testUpdate() {// 獲取 sessionSession session = HibernateUtil.getSession();// 開啟事務Transaction transaction = session.beginTransaction();try {// 根據主鍵查詢 查不到返回 nullDepartment department = session.get(Department.class, 2);// 修改department.setDeptName("666");// 提交事務transaction.commit();} catch (Exception e) {// 關閉資源HibernateUtil.closeSession(session);} }

7.2 創建對象修改,沒有賦值的屬性會清空(不推薦)

/** * 創建對象修改,沒有賦值的屬性會清空 * 一般不用 * */ @Test public void testUpdate2() {// 獲取 sessionSession session = HibernateUtil.getSession();// 開啟事務Transaction transaction = session.beginTransaction();try {// 創建對象Department department = new Department();department.setDeptNo(2);department.setDeptName("123");// 修改session.update(department);// 提交事務transaction.commit();} catch (Exception e) {// 關閉資源HibernateUtil.closeSession(session);} }

8. 查

8.1 根據主鍵查詢 get()

/** * 根據主鍵查詢 * load(): 延遲加載 * 主鍵不存在時 報錯:org.hibernate.ObjectNotFoundException: * */ @Test public void testLoad(){// 獲取 sessionSession session = HibernateUtil.getSession();// 開啟事務Transaction transaction = session.beginTransaction();// 根據主鍵查詢 查不到返回 nullDepartment department = session.load(Department.class, 1);System.out.println(department);// 關閉資源HibernateUtil.closeSession(session);}

8.2 根據主鍵查詢 load()

/** * 根據主鍵查詢 * load(): 延遲加載 * 主鍵不存在時 報錯:org.hibernate.ObjectNotFoundException: * */ @Test public void testLoad(){// 獲取 sessionSession session = HibernateUtil.getSession();// 開啟事務Transaction transaction = session.beginTransaction();// 根據主鍵查詢 查不到返回 nullDepartment department = session.load(Department.class, 1);System.out.println(department);// 關閉資源HibernateUtil.closeSession(session); }

9. 臟值檢查

/** * 臟值檢查 * */ @Test public void testState(){// 獲取SessionSession session = HibernateUtil.getSession();// 開啟事務 // Transaction transaction = (Department) session.beginTransaction();Transaction transaction = session.beginTransaction();try{// 根據主鍵查詢Department department = session.get(Department.class, 2); // 研發部 ---> 內存(副本、快照)// 賦值department.setDeptName("大佬");transaction.commit();} catch (Exception e){e.printStackTrace();transaction.rollback();} finally {// 關閉資源HibernateUtil.closeSession(session);} }

10. 增刪改查 其他方法

10.1 保存或更新 saveOrUpdate()

  • 主鍵生產策略不能是 assigned
  • 新增:沒有指定主鍵的情況下回執行新增操作
  • 修改:當指定主鍵是存在的,執行修改操作,若主鍵不存在,會觸發空指針異常
/** * saveOrUpdate(): 主鍵生產策略不能是 assigned * 新增:沒有指定主鍵的情況下回執行新增操作 * 修改:當指定主鍵是存在的,執行修改操作,若主鍵不存在,會觸發空指針異常 * * */ @Test public void testSaveUpdate(){// 獲取SessionSession session = HibernateUtil.getSession();// 開啟事務Transaction transaction = session.beginTransaction();try{// 查詢數據Department department = session.get(Department.class, 1);// 修改數據department.setDeptName("高管");// 調用方法session.saveOrUpdate(department);// 提交事務transaction.commit();} catch (Exception e){e.printStackTrace();transaction.rollback();} finally {// 關閉資源HibernateUtil.closeSession(session);}}

10.1 新增 meerge()

新增:沒有指定主鍵的情況下會執行新增操作;指定主鍵不存在,也會執行新增(先根據主鍵查詢,對象為空則新增)

/** * meerge(): * 新增:沒有指定主鍵的情況下會執行新增操作;指定主鍵不存在,也會執行新增(先根據主鍵查詢,對象為空則新增) * */ @Test public void testMerge(){// 獲取SessionSession session = HibernateUtil.getSession();// 開啟事務Transaction transaction = session.beginTransaction();try{// 查詢數據Department department = session.get(Department.class, 1);// 修改數據department.setDeptName("高管");department.setDeptNo(1000);// 調用方法session.merge(department);// 提交事務transaction.commit();} catch (Exception e){e.printStackTrace();transaction.rollback();} finally {// 關閉資源HibernateUtil.closeSession(session);}}

總結

以上是生活随笔為你收集整理的Hibernate 基本配置文件+基本增删改查的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。