Hibernate 基本配置文件+基本增删改查
生活随笔
收集整理的這篇文章主要介紹了
Hibernate 基本配置文件+基本增删改查
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文件結(jié)構(gòu)
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
2. 實體類文件 實例
包:com.xxx.entity
package com.bdqn.entity; /*** 部門類* */ public class Department {// int默認(rèn)為0 Integer默認(rèn)為空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 連接數(shù)據(jù)庫的基本信息 --><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&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai</property><!-- 使用MYSQL的 innodb引擎 --><property name="hibernate.dialect.storage_engine">innodb</property><!--<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>--><!-- 根據(jù)實體類生成數(shù)據(jù)庫表 --><!-- create:每次運行會重新創(chuàng)建表 --><!-- update: 修改表 --><property name="hibernate.hbm2ddl.auto">update</property><!-- 顯示SQL語句 --><property name="show_sql">true</property><!-- 格式化SQL語句 --><property name="format_sql">true</property><!-- 線程上下文 對應(yīng)獲取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標(biāo)簽:配置該實體類的數(shù)據(jù)庫表name屬性:該實體類的路徑(全局路徑、全限定名)table屬性:該實體類關(guān)聯(lián)的數(shù)據(jù)庫表的名稱--><class name="com.bdqn.entity.Department" table="department"><!--mmnnnid標(biāo)簽:配置主鍵屬性name屬性:實體類的屬性名(嚴(yán)格區(qū)分大小寫)type屬性:該屬性的數(shù)據(jù)類型column屬性:對應(yīng)數(shù)據(jù)表中的列名,不區(qū)分大小寫,當(dāng)屬性名與列名一致時,可省略不寫--><id name="deptNo" type="java.lang.Integer" column="deptNo"><!-- 配置主鍵生成策略 --><!-- assigned:主鍵有程序提供,默認(rèn)生成策略,一般不用 --><!-- increment: 主鍵自增:先插敘表中的最大主鍵值,在此基礎(chǔ)上+1操作,適用于mysql,sql server等數(shù)據(jù)庫自增的不適合oracle --><generator class="increment"/></id><!--property標(biāo)簽:配置普通屬性(非主鍵)name屬性:實體類的屬性名(嚴(yán)格區(qū)分大小寫)type屬性:該屬性的數(shù)據(jù)類型column屬性:對應(yīng)數(shù)據(jù)庫表中的列名,不區(qū)分大小寫,當(dāng)屬性名與列名一致時,可省略不寫--><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.創(chuàng)建SessionFactory工廠SessionFactory sessionFactory = configure.buildSessionFactory();// 3.創(chuàng)建Session對象// 方法一: 使用openSession()方法獲取對象,必須關(guān)閉session對象// Session session = sessionFactory.openSession();// 方法二:此方法獲取Session對象必須配置線程上下文Session session = sessionFactory.getCurrentSession();// 4.開啟事務(wù)Transaction transaction = session.beginTransaction();// 5. 持久化操作Department department = new Department();// department.setDeptNo(6); // 主鍵自增時這個失效department.setDeptName("市場部");department.setLocation("202");try {// 調(diào)用save()方法保存session.save(department);// 6.提交事務(wù)transaction.commit();} catch (Exception e) {e.printStackTrace();// 回滾事務(wù)transaction.rollback();} finally {// 關(guān)閉資源if (session != null) {session.close();}}}6. 刪
6.1 根據(jù)主鍵刪除
/** * 根據(jù)主鍵刪除 * */ @Test public void testDelete() {// 獲取 sessionSession session = HibernateUtil.getSession();// 開啟事務(wù)Transaction transaction = session.beginTransaction();try {// 根據(jù)主鍵查詢 查不到返回 nullDepartment department = session.get(Department.class, 1);session.delete(department);transaction.commit(); // System.out.println(department);} catch (Exception e) {// 關(guān)閉資源HibernateUtil.closeSession(session);}}7. 改
7.1 先查詢 后修改
/** * 先查詢 后修改:沒有賦值的屬性保持不變 * */ @Test public void testUpdate() {// 獲取 sessionSession session = HibernateUtil.getSession();// 開啟事務(wù)Transaction transaction = session.beginTransaction();try {// 根據(jù)主鍵查詢 查不到返回 nullDepartment department = session.get(Department.class, 2);// 修改department.setDeptName("666");// 提交事務(wù)transaction.commit();} catch (Exception e) {// 關(guān)閉資源HibernateUtil.closeSession(session);} }7.2 創(chuàng)建對象修改,沒有賦值的屬性會清空(不推薦)
/** * 創(chuàng)建對象修改,沒有賦值的屬性會清空 * 一般不用 * */ @Test public void testUpdate2() {// 獲取 sessionSession session = HibernateUtil.getSession();// 開啟事務(wù)Transaction transaction = session.beginTransaction();try {// 創(chuàng)建對象Department department = new Department();department.setDeptNo(2);department.setDeptName("123");// 修改session.update(department);// 提交事務(wù)transaction.commit();} catch (Exception e) {// 關(guān)閉資源HibernateUtil.closeSession(session);} }8. 查
8.1 根據(jù)主鍵查詢 get()
/** * 根據(jù)主鍵查詢 * load(): 延遲加載 * 主鍵不存在時 報錯:org.hibernate.ObjectNotFoundException: * */ @Test public void testLoad(){// 獲取 sessionSession session = HibernateUtil.getSession();// 開啟事務(wù)Transaction transaction = session.beginTransaction();// 根據(jù)主鍵查詢 查不到返回 nullDepartment department = session.load(Department.class, 1);System.out.println(department);// 關(guān)閉資源HibernateUtil.closeSession(session);}8.2 根據(jù)主鍵查詢 load()
/** * 根據(jù)主鍵查詢 * load(): 延遲加載 * 主鍵不存在時 報錯:org.hibernate.ObjectNotFoundException: * */ @Test public void testLoad(){// 獲取 sessionSession session = HibernateUtil.getSession();// 開啟事務(wù)Transaction transaction = session.beginTransaction();// 根據(jù)主鍵查詢 查不到返回 nullDepartment department = session.load(Department.class, 1);System.out.println(department);// 關(guān)閉資源HibernateUtil.closeSession(session); }9. 臟值檢查
/** * 臟值檢查 * */ @Test public void testState(){// 獲取SessionSession session = HibernateUtil.getSession();// 開啟事務(wù) // Transaction transaction = (Department) session.beginTransaction();Transaction transaction = session.beginTransaction();try{// 根據(jù)主鍵查詢Department department = session.get(Department.class, 2); // 研發(fā)部 ---> 內(nèi)存(副本、快照)// 賦值department.setDeptName("大佬");transaction.commit();} catch (Exception e){e.printStackTrace();transaction.rollback();} finally {// 關(guān)閉資源HibernateUtil.closeSession(session);} }10. 增刪改查 其他方法
10.1 保存或更新 saveOrUpdate()
- 主鍵生產(chǎn)策略不能是 assigned
- 新增:沒有指定主鍵的情況下回執(zhí)行新增操作
- 修改:當(dāng)指定主鍵是存在的,執(zhí)行修改操作,若主鍵不存在,會觸發(fā)空指針異常
10.1 新增 meerge()
新增:沒有指定主鍵的情況下會執(zhí)行新增操作;指定主鍵不存在,也會執(zhí)行新增(先根據(jù)主鍵查詢,對象為空則新增)
/** * meerge(): * 新增:沒有指定主鍵的情況下會執(zhí)行新增操作;指定主鍵不存在,也會執(zhí)行新增(先根據(jù)主鍵查詢,對象為空則新增) * */ @Test public void testMerge(){// 獲取SessionSession session = HibernateUtil.getSession();// 開啟事務(wù)Transaction transaction = session.beginTransaction();try{// 查詢數(shù)據(jù)Department department = session.get(Department.class, 1);// 修改數(shù)據(jù)department.setDeptName("高管");department.setDeptNo(1000);// 調(diào)用方法session.merge(department);// 提交事務(wù)transaction.commit();} catch (Exception e){e.printStackTrace();transaction.rollback();} finally {// 關(guān)閉資源HibernateUtil.closeSession(session);}}總結(jié)
以上是生活随笔為你收集整理的Hibernate 基本配置文件+基本增删改查的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 文件和目录操作
- 下一篇: Hibernate之HQL数据库操作