欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Hibernate中實(shí)現(xiàn)增刪改查的步驟詳解

 更新時(shí)間:2017年02月28日 15:20:28   作者:雨點(diǎn)的名字  
本篇文章主要介紹了Hibernate中實(shí)現(xiàn)增刪改查的步驟與方法,具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧

1.首先我們要知道什么是Hibernate

Hibernate是一個(gè)輕量級(jí)的ORMapping對(duì)象。主要用來(lái)實(shí)現(xiàn)Java和數(shù)據(jù)庫(kù)表之間的映射,除此之外還提供數(shù)據(jù)查詢(xún)和數(shù)據(jù)獲取的方法,

可以大幅度減少開(kāi)發(fā)時(shí)人工使用SQL和JDBC處理數(shù)據(jù)的時(shí)間,解放編程人員95%的任務(wù)。

2.什么是ORM  Object-Relational-Mapping對(duì)象關(guān)系映射

ORM:是通過(guò)java對(duì)象映射到數(shù)據(jù)庫(kù)表,通過(guò)操作Java對(duì)象可以完成對(duì)數(shù)據(jù)表的操作。(假如你用的是Dbutils那么還需要在Java類(lèi)中寫(xiě)sql語(yǔ)句,而orm就不用)

Hibernate是一個(gè)完全的ORM框架只需要對(duì)對(duì)象的操作即可生成底層的SQL。

接下來(lái)直接進(jìn)入主題:

先看看使用hibernate的基本流程!下面是簡(jiǎn)單的流程圖

 

1.創(chuàng)建項(xiàng)目:

用myeclipse創(chuàng)建一個(gè)web project

2.導(dǎo)入hibernate相關(guān)的架包到項(xiàng)目

 

第三步: 配置hibernate

在src目錄下新建一個(gè)xml文件,名稱(chēng)為hibernate.cfg.xml(當(dāng)然,你也可以不叫這個(gè)名稱(chēng),不過(guò)在代碼中要作相應(yīng)的修改),拷貝如下內(nèi)容:

<?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>
 <!-- 配置會(huì)話工廠 hibernate 核心 管理數(shù)據(jù)庫(kù)連接池 -->
 <session-factory>
  <!-- 1.配置數(shù)據(jù)庫(kù)連接參數(shù) -->
  <!-- 1.1配置jdbc四個(gè)基本連接參數(shù) -->
  <property name="hibernate.connection.username">root</property>
  <property name="hibernate.connection.password">root</property>
  <property name="hibernate.connection.url">jdbc:mysql:///hibernateexec</property>
  <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
  <!-- 1.2配置 hibernate使用的方言 -->
  <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
  <!-- 2.配置其他相關(guān)屬性 -->
  <!-- 2.1自動(dòng)建表 -->
  <property name="hibernate.hbm2ddl.auto">update</property>
  <!-- 2.2在日志中輸出sql -->
  <property name="hibernate.show_sql">true</property> 
  <!-- 2.3格式化sql -->
  <property name="hibernate.format_sql">true</property> 
  <!-- 開(kāi)啟事務(wù) -->
  <property name="hibernate.connection.autocommit">true</property>
  <!-- 配置c3p0數(shù)據(jù)庫(kù)連接池 -->
  <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
  <property name="hibernate.c3p0.min_size">5</property>
  <property name="hibernate.c3p0.max_size">50</property>
  <property name="hibernate.c3p0.timeout">120</property>
  <property name="hibernate.c3p0.idle_test_period">3000</property>  
  <!-- 3.加載映射文件 -->
  <mapping resource="com/study/model/Customer.hbm.xml"/> 
 </session-factory> 
 </hibernate-configuration>

這里提醒一點(diǎn):customer表你可以不用去手動(dòng)創(chuàng)建,但是數(shù)據(jù)庫(kù)hibernateexec是要你手動(dòng)創(chuàng)建的

第四步.創(chuàng)建實(shí)體和映射文件

public class Customer {
 private int id;
 private String name;
 private int age;
 private String city;
 private String addr;
}
/*
 * 提供set和get方法
 */
Customer 實(shí)體

映射文件和實(shí)體對(duì)象在同一個(gè)包下:

<?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>
 <!-- 完成實(shí)體類(lèi) 和數(shù)據(jù)表的映射 -->
 <!-- 1.類(lèi)與表的映射 -->
 <!-- 
  name 要映射的完整類(lèi)名
  table 映射到數(shù)據(jù)庫(kù)的表名
  catalog 映射到數(shù)據(jù)庫(kù)的名字
 -->
 <class name="com.study.model.Customer" table="customer" catalog="hibernateexec">
  <!-- 2.類(lèi)中屬性 和表中 數(shù)據(jù)列的映射 -->
  <!-- 2.1主鍵 -->
  <!-- 
  name 屬性名(類(lèi)中)
  column 列名(表中)
  type 數(shù)據(jù)類(lèi)型
  -->
  <id name="id" column="id" type="int">
  <!-- 配置主鍵生成策略 主鍵自動(dòng)增長(zhǎng)-->
  <generator class="identity"></generator>
  </id>
  <!-- 2.2 普通屬性 -->
  <!-- 
  name 屬性名(類(lèi)中)
  column 列名(表中)
  type 數(shù)據(jù)類(lèi)型(也可以直接寫(xiě)String)
  -->
  <property name="name" column="name" type="java.lang.String"></property> 
  <property name="age" column="age" type="int"></property>
  <!-- 也可以分開(kāi)寫(xiě) -->
  <property name="city">
  <column name="city" sql-type="varchar(20)"></column>
  </property>
  <!-- 如果什么都不寫(xiě),那就默認(rèn)類(lèi)的屬性名和數(shù)據(jù)庫(kù)中的列名一致都為addr,類(lèi)型為varchar -->
 <property name="addr"></property> 
 </class>
 </hibernate-mapping>

Customer.hbm.xml

第五步:創(chuàng)建SessionFactory對(duì)象

第六步:獲取Session對(duì)象進(jìn)行相關(guān)操作

第五步和第六步我和在一起,第六步我們發(fā)現(xiàn)不論增刪改查前面四步都是一樣的,我們其實(shí)可以提取到一個(gè)工具類(lèi),再來(lái)調(diào)用這樣加快效率。

import java.util.List;
 import org.hibernate.Query;
 import org.hibernate.SQLQuery;
 import org.hibernate.Session;
 import org.hibernate.SessionFactory;
 import org.hibernate.Transaction;
 import org.hibernate.cfg.Configuration;
 import org.junit.Test;
 import com.study.model.Customer;
 public class HibernateTest { 
 /*
  * 保存數(shù)據(jù)
  */
  @Test
  public void testInsert() {
  // 實(shí)例化配置對(duì)象 加載映射文件 加載 hibernate.cfg.xml
  Configuration configuration = new Configuration().configure();
  // 創(chuàng)建會(huì)話工廠
  SessionFactory sessionFactory = configuration.buildSessionFactory();
  // 創(chuàng)建會(huì)話
  Session session = sessionFactory.openSession();
  // 開(kāi)啟事務(wù)
  Transaction transaction = session.beginTransaction();
  // 編寫(xiě)自己的邏輯代碼
  Customer customer = new Customer();
  customer.setName("小黃");
  customer.setAge(40);
  customer.setCity("北京");
  // 直接保存
  session.save(customer);
  // 提交事務(wù)
  transaction.commit();
  session.close();
  sessionFactory.close();
  } 
 //查詢(xún)所有的
 @Test
 public void testFindAllByHQL(){
  // 實(shí)例化配置對(duì)象 加載映射文件 加載 hibernate.cfg.xml
  Configuration configuration = new Configuration().configure();
  // 創(chuàng)建會(huì)話工廠
  SessionFactory sessionFactory = configuration.buildSessionFactory();
  // 創(chuàng)建會(huì)話
  Session session = sessionFactory.openSession();
  // 開(kāi)啟事務(wù)
  Transaction transaction = session.beginTransaction();
  //編寫(xiě)HQL語(yǔ)句(面向類(lèi)和屬性的查詢(xún) 
  String hql =" from Customer";//這里是Customer不是表名 是類(lèi)名 查詢(xún)Customer
  Query query =session.createQuery(hql);
  List<Customer> customers=query.list();
  System.out.println(customers);
  // 提交事務(wù)
  transaction.commit();
 session.close();
  sessionFactory.close();
 }
 // 刪除
 @Test
 public void testDelete() {
  // 實(shí)例化配置對(duì)象 加載映射文件 加載 hibernate.cfg.xml
  Configuration configuration = new Configuration().configure();
  // 創(chuàng)建會(huì)話工廠
  SessionFactory sessionFactory = configuration.buildSessionFactory();
  // 創(chuàng)建會(huì)話
  Session session = sessionFactory.openSession();
  // 開(kāi)啟事務(wù)
  Transaction transaction = session.beginTransaction();
 Customer customer =new Customer();
 customer.setId(2);
  session.delete(customer);
  // 提交事務(wù)
  transaction.commit();
  session.close();
  sessionFactory.close();
 }
 // 修改
 @Test
 public void testUpdate() {
  // 實(shí)例化配置對(duì)象 加載映射文件 加載 hibernate.cfg.xml
  Configuration configuration = new Configuration().configure();
  // 創(chuàng)建會(huì)話工廠
  SessionFactory sessionFactory = configuration.buildSessionFactory();
  // 創(chuàng)建會(huì)話
  Session session = sessionFactory.openSession();
  // 開(kāi)啟事務(wù)
  Transaction transaction = session.beginTransaction();
  Customer customer = (Customer) session.get(Customer.class, 2);
  customer.setCity("杭州");
  session.update(customer);
  // 提交事務(wù)
  transaction.commit();
  session.close();
  sessionFactory.close();
 }
 // 查詢(xún) 根據(jù)id查詢(xún)
 @Test
 public void testFindById() {
  // 實(shí)例化配置對(duì)象 加載映射文件 加載 hibernate.cfg.xml
  Configuration configuration = new Configuration().configure();
  // 創(chuàng)建會(huì)話工廠
  SessionFactory sessionFactory = configuration.buildSessionFactory();
  // 創(chuàng)建會(huì)話
  Session session = sessionFactory.openSession();
  // 開(kāi)啟事務(wù)
  Transaction transaction = session.beginTransaction();
  Customer customer = (Customer) session.get(Customer.class, 1);
  System.out.println(customer);
  // 提交事務(wù)
  transaction.commit();
  session.close();
  sessionFactory.close();
 }
 }

運(yùn)行效果:當(dāng)你運(yùn)行第一個(gè)增加用戶(hù)的時(shí)候,運(yùn)行結(jié)束數(shù)據(jù)庫(kù)會(huì)自動(dòng)創(chuàng)建customer表格,和往表格里添加數(shù)據(jù)。

這樣就通過(guò)hibernate進(jìn)行基礎(chǔ)的增刪改查了。

以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持腳本之家!

相關(guān)文章

  • SpringBoot后端進(jìn)行數(shù)據(jù)校驗(yàn)JSR303的使用詳解

    SpringBoot后端進(jìn)行數(shù)據(jù)校驗(yàn)JSR303的使用詳解

    這篇文章主要介紹了SpringBoot后端進(jìn)行數(shù)據(jù)校驗(yàn)JSR303的使用詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Java 如何判斷Integer類(lèi)型的值是否相等

    Java 如何判斷Integer類(lèi)型的值是否相等

    這篇文章主要介紹了Java 如何判斷Integer類(lèi)型的值是否相等操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SpringBoot中的@CacheEvict 注解的實(shí)現(xiàn)

    SpringBoot中的@CacheEvict 注解的實(shí)現(xiàn)

    本文主要介紹了SpringBoot中的@CacheEvict注解的實(shí)現(xiàn),@CacheEvict 注解用于清空緩存,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • Java?中的?switch?語(yǔ)句:類(lèi)型支持與限制詳解

    Java?中的?switch?語(yǔ)句:類(lèi)型支持與限制詳解

    Java?中的?switch?語(yǔ)句是一種強(qiáng)大的多分支選擇結(jié)構(gòu),它支持多種數(shù)據(jù)類(lèi)型,包括基本數(shù)據(jù)類(lèi)型、字符串和枚舉類(lèi)型,本文給大家介紹Java?中的?switch?語(yǔ)句:類(lèi)型支持與限制,感興趣的朋友一起看看吧
    2024-08-08
  • SpringBoot web開(kāi)發(fā)源碼深入分析

    SpringBoot web開(kāi)發(fā)源碼深入分析

    Web開(kāi)發(fā)的核心內(nèi)容主要包括內(nèi)嵌的Servlet容器和SpringMVCSpringBoot使用起來(lái)非常簡(jiǎn)潔,大部分配置都有SpringBoot自動(dòng)裝配,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-10-10
  • OpenFeign調(diào)用服務(wù)請(qǐng)求頭丟失Token的解決

    OpenFeign調(diào)用服務(wù)請(qǐng)求頭丟失Token的解決

    這篇文章主要介紹了OpenFeign調(diào)用服務(wù)請(qǐng)求頭丟失Token的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 詳解Java的線程狀態(tài)

    詳解Java的線程狀態(tài)

    本文主要為大家詳細(xì)介紹一下Java的線程狀態(tài),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)有一定的幫助,感興趣的小伙伴可以跟隨小編學(xué)習(xí)一下
    2022-11-11
  • 一文深入理解Java中的java.lang.reflect.InvocationTargetException錯(cuò)誤

    一文深入理解Java中的java.lang.reflect.InvocationTargetException錯(cuò)誤

    這篇文章主要給大家介紹了關(guān)于Java中java.lang.reflect.InvocationTargetException錯(cuò)誤的相關(guān)資料,java.lang.reflect.InvocationTargetException是Java中的一個(gè)異常類(lèi),它通常是由反射調(diào)用方法時(shí)拋出的異常,需要的朋友可以參考下
    2024-03-03
  • Spring Boot高級(jí)教程之Spring Boot連接MySql數(shù)據(jù)庫(kù)

    Spring Boot高級(jí)教程之Spring Boot連接MySql數(shù)據(jù)庫(kù)

    這篇文章主要為大家詳細(xì)介紹了Spring Boot高級(jí)教程之Spring Boot連接MySql數(shù)據(jù)庫(kù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Spring MVC接口防數(shù)據(jù)篡改和重復(fù)提交

    Spring MVC接口防數(shù)據(jù)篡改和重復(fù)提交

    這篇文章主要為大家詳細(xì)介紹了Spring MVC接口防數(shù)據(jù)篡改和重復(fù)提交,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08

最新評(píng)論