【學習筆記-SSH框架】Hibernate入門-筆記01-搭建Hibernate應用環境及實現增刪查改功能、以及Query、Criteria查詢
Hibernate入門-筆記01-搭建Hibernate應用環境及實現增刪查改功能、以及Query、Criteria查詢
目錄
- 使用Maven搭建Hibernate項目
- 自頂向下開發Hibernate應用步驟
- 封裝Hibernate工具類
- 實現增刪查改功能
- 使用Query進行HQL查詢
- 使用Criteria進行條件查詢
- POJO狀態
1. 使用Maven搭建Hibernate項目
在IDE中創建maven項目,加入依賴
(這里我使用的Hibernate版本為5.4.2.Final,不同版本之間在配置hibernate的時候,方法可能有略微差別)
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.2.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
2. 自頂向下開發Hibernate應用步驟
- 配置hibernate.cfg.xml:在src目錄下(IDEA創建的maven項目則在resources目錄下創建配置文件)創建配置文件hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!--配置數據庫信息-->
<!--配置連接url: db_name 為數據庫名-->
<property name="connection.url">jdbc:mysql://localhost:3306/數據庫名</property>
<!--配置驅動:-->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!--數據庫用戶名-->
<property name="connection.username">root</property>
<!--數據庫密碼-->
<property name="connection.password">123456</property>
<!--數據庫方言-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!-- 設置數據庫創建表的策略 -->
<property name="hbm2ddl.auto">update</property>
<!--在輸出sql語句-->
<property name="show_sql">true</property>
<!--映射文件-->
<!--兩種方式,選一種即可-->
<!-- <mapping class="com.chapter05.pojo.User"/>-->
<mapping resource="User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
- 創建pojo類
package com.chapter05.pojo;
public class User {
private int id;
private String username;
private String password;
public User() {
}
public User(String username, String password) {
this.username = username;
this.password = password;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
- 創建pojo類的映射文件Xxx.bhm.xml:在pojo類同目錄下xxx.hbm.xml映射文件(IDEA創建的maven項目則在resources目錄下創建映射文件)
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!--數據庫為course_s2sh, 數據表為t_user-->
<class name="com.chapter05.pojo.User" table="t_user" schema="course_s2sh">
<!--id字段-->
<id name="id">
<column name="id" sql-type="int(11)"/>
<!--主鍵生成策略:自增-->
<generator class="native"/>
</id>
<!--username字段-->
<property name="username">
<column name="username" sql-type="varchar(20)" length="20" not-null="true"/>
</property>
<!--password字段-->
<property name="password">
<column name="password" sql-type="varchar(32)" length="32" not-null="true"/>
</property>
</class>
</hibernate-mapping>
創建好映射文件后,需在hibernate.cfg.xml文件中加入映射
在<session-factory></session-factory>
里面添加,而且要放在最后
<!--映射文件-->
<!--兩種方式,選一種即可-->
<!-- <mapping class="com.chapter05.pojo.User"/>-->
<mapping resource="User.hbm.xml"/>
- 創建Hibernate5.4.3應用步驟
-
1.服務注冊,創建StandardServiceRegistryBuilder對象,MetadataSources對象
-
2.創建SessionFactory對象
-
3.打開session
-
4.開啟事務
-
5.持久化操作
-
6.提交事務
-
7.關閉
【示例】完成一個添加用戶的功能
/**
* 測試添加用戶方法
*/
@Test
public void testAddUser(){
User user = new User("alan", "123456");
//1.服務注冊
StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().configure().build();
Metadata metadata = new MetadataSources(ssr).getMetadataBuilder()
.applyImplicitNamingStrategy(ImplicitNamingStrategyComponentPathImpl.INSTANCE).build();
//2.創建SessionFactory對象
SessionFactory sessionFactory = metadata.getSessionFactoryBuilder().build();
//3.打開Session
Session session = sessionFactory.openSession();
//4.開啟事務
Transaction transaction = session.beginTransaction();
//5.持久化操作(添加了一個用戶)
session.save(user);
//6.提交事務
transaction.commit();
//7.關閉Session
session.close();
}
3. 封裝Hibernate工具類
通常一個應用程序只有一個SessionFactory對象的實例,并且SessionFactory對象的實例是唯一的、不可更改的。
所以要用單例模式實現SessionFactory。
【示例】創建HibernateUtil類
package com.chapter05.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.model.naming.ImplicitNamingStrategyComponentPathImpl;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
public class HibernateUtil {
private static SessionFactory sessionFactory = null;
private static Session session;
static {
//注冊服務
StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().configure().build();
Metadata metadata = new MetadataSources(ssr).getMetadataBuilder()
.applyImplicitNamingStrategy(ImplicitNamingStrategyComponentPathImpl.INSTANCE).build();
sessionFactory = metadata.getSessionFactoryBuilder().build();
//打開session
session = sessionFactory.openSession();
}
public static Session getSession() {
return session;
}
public static void closeSession(){
getSession().close();
}
public static Session getCurrentSession(){
return sessionFactory.getCurrentSession();
}
}
現在可以把上面增加用戶的示例簡化了:
/**
* 使用HibernateUtil工具類,簡化程序
*/
@Test
public void testAddUser2() throws Exception {
//獲取Session
Session session = HibernateUtil.getSession();
//創建User對象
User user = new User("李四", "123");
//開啟事務
Transaction transaction = session.beginTransaction();
try {
//將對象持久化(存到數據庫)
session.save(user);
//提交事務
transaction.commit();
} catch (Exception e) {
e.printStackTrace();
//提交事務失敗,回滾事務
transaction.rollback();
}
HibernateUtil.closeSession();
}
4. 實現增刪查改功能
/**
* 增加
*/
@Test
public void add(){
// User user = new User("alan", "123456");
User user = new User("alan2", "123456");
//3.打開Session
Session session = HibernateUtil.getSession();
//4.開啟事務
Transaction transaction = session.beginTransaction();
//5.持久化操作
session.save(user);
//6.提交事務
transaction.commit();
//7.關閉Session
session.close();
}
/**
* 刪除
*/
@Test
public void delete(){
Session session = HibernateUtil.getSession();
Transaction transaction = session.beginTransaction();
User user = session.get(User.class, 3);
session.delete(user);
System.out.println("刪除成功");
transaction.commit();
HibernateUtil.closeSession();
}
/**
* 查詢
*/
@Test
public void query(){
Session session = HibernateUtil.getSession();
Transaction transaction = session.beginTransaction();
User user = session.get(User.class, 2);
System.out.println("get -> user: " + user);
User user2 = session.load(User.class, 2);
System.out.println("load -> user: " + user2);
transaction.commit();
HibernateUtil.closeSession();
}
/**
* 修改
*/
@Test
public void update(){
Session session = HibernateUtil.getSession();
Transaction transaction = session.beginTransaction();
User user = session.get(User.class, 2);
user.setPassword("4321");
session.update(user);
transaction.commit();
HibernateUtil.closeSession();
}
5. 使用Query進行HQL查詢
使用Query進行HQL查詢的步驟:
- 獲取Hibernate Session對象
- 編寫HQL語句
- 以HQL語句作為參數,調用createQuery()方法創建Query對象
- 如果HQL語句包含參數,則調用Query的setXxx()方法為參數賦值
- 調用Query對象的list等方法返回查詢結果
【示例】
@Test
public void testHQL(){
Session session = HibernateUtil.getSession();
Transaction transaction = session.beginTransaction();
//HQL
Query query = session.createQuery("from User");
List<User> userList = query.list();
for (User u : userList) {
System.out.println("id = " + u.getId() + ", name = " + u.getUsername() + ", password = " + u.getPassword());
}
transaction.commit();
HibernateUtil.closeSession();
}
6. 使用Criteria進行條件查詢
更加面向對象的查詢方式Criteria查詢。
【示例】
/**
* 使用Criteria查詢所有用戶信息
*/
@Test
public void testCriteria(){
Session session = HibernateUtil.getSession();
Transaction transaction = session.beginTransaction();
//Criteria查詢
Criteria criteria = session.createCriteria(User.class); //方法已過時
//輸出結果
List<User> userList = criteria.list();
for (User u : userList) {
System.out.println(u);
}
transaction.commit();
HibernateUtil.closeSession();
}
7. POJO狀態
- 瞬時狀態(Transient)
- 持久化狀態 (Persistent)
- 脫管狀態 (Detached)
智能推薦
Spring4.2整合hibernate5.0.7,進行增刪改查,以及hql查詢,sql查詢,criteria查詢
最近學習spring data所有又復習了一下hibernate 開發環境eclipse jdk1.7 Spring4.2.0 +Hibernate5.0.7 1.創建項目,導入jar包 (其中jaxb的三個jar包和javax.activation-api.jar不是必須的,我的沒這三個包運行不了,不知道為什么,我的jdk才1.7啊) 然后右鍵add to build path 2.編寫appl...
Hibernate框架筆記01_環境搭建_API_CRUD
文章目錄 1. Hibernate框架的概述 1.1 什么是框架 1.2 經典三層架構 1.3 Hibernate框架 2 Hibernate入門 2.1 下載Hibernate的開發包 2.2 創建項目,引入jar包 2.3 創建表 2.4 創建實體類 2.5 創建映射(***) 2.6 創建一個Hibernate的核心配置文件(***) 1.2.7 編寫測試代碼 3 hibernate的常見配...
(詳細)Hibernate查詢技術(Query、Session、Criteria),Hibernate的三種狀態,Hibernate集合struts2實現登錄功能(二)
一、Hibernate的三種查詢方式(掌握) Hibernate中提供了三種查詢方式: 1)Session的查詢:按主鍵查詢查詢,方法為get或load 2)Query的查詢:使用HQL語句或SQL語句完成查詢 3)Criteria的查詢:通過方法和類中屬性的關系,來設置查詢條件,完成查詢。 Session中get和load方法的區別? 1) 如果沒有查詢到數據,get會返回null,...
框架學習筆記之Hibernate框架基礎(二)如何建立泛型接口實現增刪改查
本文章講述了如何用Hibernate框架創建session對象,通過實體類、object類和泛型建立通用接口,實現泛型對象的增刪改查。 映射文件中的各項元素: oracle中鍵位自增模式:increment、identity、native、assigned。 Hibernate內置的映射類型如下: integer,long,short,float,double,character,b...
hibernate的環境搭建及簡單的增刪改查
首先我們需要導入hibernate的jar包,在lib文件夾下有一個必須的文件夾導入里面的jar包即可 第二步創建ORM映射文件放在bean包下,和要映射的bean在一起,然后我們導入約束,我們不用死記硬背,我們可以在 該包下找到hibernate-mapping-3.0.dtd文件打開并復制其內容 然后打開window--Preferences--搜索cata 設置約束文件的查找路徑,設為本地文...
猜你喜歡
Hibernate學習筆記01
建立 Hibernate 工程步驟 首先得導入 Hibernate 相關 jar 包,也可以使用 Maven 創建工程,再配置 POM.xml 1. 創建 Hibernate 配置文檔 hibernate.cfg.xml 2. 創建持久化類 規范:遵循JavaBeans規范,必須滿足 1. 公有類 2. 有無參構造方法 3. 私有的屬性變量 4. 每個屬性對應的getter/setter方法 一個...
框架學習筆記之Hibernate框架基礎——Hibernate入門實例
一、簡介: 面向java環境的對象/關系數據庫映射工具 不僅管理java類到庫的映射們還提供數據查詢和獲取數據的方法 對于開發者通常的數據持久化關于的編程任務,解放95% Hibernate對于中間層應用最好的場合。 相對于以數據操作的應用來說可能不是最好的選擇。 可以幫助開發者消除或者包裝那些針對特定廠商的sql代碼。建立跨越數據庫的應用平臺。 二、能做什么: 減少乏味的編碼,獲取...
Hibernate框架之Query、Criteria、SQLQuery三個數據查詢對象
Hibernate框架的作用是將持久化層的操作進行封裝,也就是把數據庫的操作進行了封裝,我們可以不使用sql語句就能更新數據庫。下面將介紹Query、Criteria、SQLQuery三個查詢對象。 一、Query 通過Session對象獲取,使用HQL語句。所謂HQL,就是Hibernate Query Language的縮寫,就是Hibernate的查詢語言。與SQL語句相似,但是面向的是對象...
Hibernate框架之Criteria查詢 和注解
為什么80%的碼農都做不了架構師?>>> 今天呢,我就詳細的寫著 Hibernate框架的一種檢索方式:Criteria查詢。下面我寫的這些案例,可能對于大牛沒有什么好看的,但是對于初學者來說,卻是一筆財富。 首先我們要知道的檢索方式: Hibernate框架提供了5種檢索對象的方式 &nbs...
【學習筆記-SSH框架】Hibernate高級-筆記01-類級別檢索策略
Hibernate高級-筆記01-類級別檢索策略 目錄 檢索策略簡介 類級別立即加載 類級別延遲加載 0. 檢索策略簡介 在Hibernate中,Session主要有兩種檢索方法:get()和load(),這兩個方法都是用來從數據庫中檢索對象,并按照參數指定的對象標識符OID來加載一個持久化對象。 【示例】 檢索策略主要有以下兩種: 類級別檢索策略 使用Session的load()或get()方法...