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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

hibernate教程--快速入门(增删改查)

發布時間:2025/3/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hibernate教程--快速入门(增删改查) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、 Hibernate框架的概述:

1.1 什么是Hibernate:

框架:軟件的半成品,完成部分功能代碼.

Hibernate:Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數據庫。 Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應用中使用,最具革命意義的是,Hibernate可以在應用EJB的J2EE架構中取代CMP,完成數據持久化的重任。

Hibernate是輕量級JavaEE應用的持久層解決方案,是一個關系數據庫ORM框架.

* ORM:Object Relational Mapping.

* 傳統方式開發:

* 持久層:

* 編寫SQL.執行SQL. String sql = “insert into 表 values (?,?,?...)”;

* 開發語言Java:面向對象.

* 數據庫:MySQL(關系型的數據庫.)

* 將Java中的實體類與數據庫的關系表建立一個映射.就可以操作Java中對象,從而操作數據庫.

Hibernate就是一個持久層的ORM的框架.

常見的持久層框架:

* Hibernate:

* JPA:JPA Java Persistence API.JPA通過JDK 5.0注解或XML描述對象-關系表的映射關系(只有接口規范)

* MyBatis:前身Ibatis.

* 企業開發兩套架構:

* SSH:Struts2 + Spring + Hibernate

* SSI:SpringMVC + Spring + Ibatis

* DbUtils:

1.2?為什么要學習Hibernate:

Hibernate對JDBC訪問數據庫的代碼做了封裝,大大簡化了數據訪問層繁瑣的重復性代碼

Hibernate是一個基于jdbc的主流持久化框架,是一個優秀的orm實現,它很大程度的簡化了dao層編碼工作

Hibernate使用java的反射機制,而不是字節碼增強程序類實現透明性

Hibernate的性能非常好,因為它是一個輕量級框架。映射的靈活性很出色。它支持很多關系型數據庫,從一對一到多對多的各種復雜關系.

二、 Hibernate的日志記錄:

日志:程序開發中的一些信息.

常用信息輸出:System.out.println(“”);

* 這種方式不好:

* 如果輸出內容比較多,項目已經開發完畢,不想使用輸出.需要打開每個類,將輸出的代碼注釋.

2.1、日志:Hibernate中使用slf4j技術.

slf4j:SLF4J,即簡單日志門面(Simple Logging Facade for Java),不是具體的日志解決方案,它只服務于各種各樣的日志系統。

用于整合其他日志系統.

在企業中常用的日志記錄:log4j

是具體的日志記錄方案.

2.2、Log4J的日志級別:

* fatal(致命的)、error(普通錯誤)、warn(警告)、info(信息)、debug(調試)、trace(堆棧信息).

Logger.error(“錯誤信息”); ?

* 通過配置文件的形式,顯示錯誤信息.

* 配置的級別是info.

2.3、Log4J的三個組件:

記錄器(Loggers)

* 格式:記錄器 = 級別, 輸出源1 , 輸出源2

* log4j.rootLogger=info, stdout

輸出源(Appenders)

* log4j.appender.stdout=org.apache.log4j.ConsoleAppender:控制臺進行輸出.

* log4j.appender.file=org.apache.log4j.FileAppender:向文件進行輸出.

布局(Layouts)

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

三、 Hibernate的入門:

3.1?Hibernate的入門:

第一步:下載Hibernate的開發包:

http://sourceforge.net/projects/hibernate/files/hibernate3

第二步:Hibernate框架目錄結構:

documentation:Hibernate文檔

?lib:Hibernate開發jar包

* bytecode:操作字節碼jar包.

* jpa:Hibernate的實現jpa規范.

* optional:Hibernate的可選jar包.

* required:Hibernate的必須的jar包.

? project:Hibernate提供的工程

第三步:創建一個工程:(Java工程)

導入相應jar包:

* hibernate3.jar

* HIBERNATE_HOME/lib/required/*.jar

* HIBERNATE_HOME/lib/jpa/hibernate-jpa-2.0-api-1.0.1.Final.jar

* 導入日志記錄的包:

* log4j-1.2.16.jar

* slf4j-log4j12-1.7.2.jar

* 導入數據庫驅動:

第四步:創建表:(關系型數據庫)

create database hibernatetest;use hibernate3_day01;create table customer(id int primary key auto_increment,name varchar(20),age int);

第五步:創建一個實體類:(面向對象)

public class Customer {private int id;private String name;private int age;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}

第六步:創建ORM的映射.

映射文件只要是一個XML格式文件就可以.名字任意.

?通常情況下名稱規范:

?實體類名稱.hbm.xml

引入約束:

?hibernate3.jar/org.hibernate.hibernate-mapping-3.0.dtd

<!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.sihai.hibernate3.demo1.Customer" table="customer"><!-- 建立類中屬性與表中的字段映射 --><!-- 唯一標識 --><!-- 使用id的標簽 配置唯一屬性 --><!-- 在<id>標簽中配置一個主鍵的生成策略. --><id name="id" column="id"><generator class="native"/></id><!-- 普通屬性 --><!-- property標簽:映射類中的普通屬性 name:類中的屬性名稱, column:表中字段名稱 --><!--type:三種寫法* Java類型:java.lang.String* Hibernate類型:string* SQL類型:不能直接使用type屬性,需要子標簽<column>* <column name="name" sql-type="varchar(20)"/>--><property name="name" column="name" type="string"/><property name="age" column="age"/></class></hibernate-mapping>

第七步:創建一個Hibernate的核心配置文件.

通知Hibernate連接是哪個數據庫.

在src下創建一個hibernate.cfg.xml

<hibernate-configuration><session-factory><!-- 必須去配置的屬性 --><!-- 配置數據庫連接的基本信息: --><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><property name="hibernate.connection.url">jdbc:mysql:///hibernate3_day01</property><property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">sihai</property><!-- Hibernate的方言 --><!-- 生成底層SQL不同的 --><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><!-- 可選的屬性 --><!-- 顯示SQL --><property name="hibernate.show_sql">true</property><!-- 格式化SQL --><property name="hibernate.format_sql">true</property><!-- hbm:映射 to DDL: create drop alter --><property name="hibernate.hbm2ddl.auto">update</property><!-- 通知Hibernate加載那些映射文件 -><mapping resource="com/sihai/hibernate3/demo1/Customer.hbm.xml" /></session-factory></hibernate-configuration>

第八步:編寫測試

向數據庫中插入一條記錄

@Test// 向數據庫中插入一條記錄public void demo1(){// 1.Hiberante框架加載核心配置文件(有數據庫連接信息)Configuration configuration = new Configuration().configure();// 2.創建一個SessionFactory.(獲得Session--相當連接對象)SessionFactory sessionFactory = configuration.buildSessionFactory();// 3.獲得Session對象.Session session = sessionFactory.openSession();// 4.默認的情況下,事務是不自動提交.Transaction tx = session.beginTransaction();// 5.業務邏輯操作// 向數據庫中插入一條記錄:Customer customer = new Customer();customer.setName("sihai123");customer.setAge(28);session.save(customer);// 6.事務提交tx.commit();// 7.釋放資源session.close();sessionFactory.close();}

3.2?Hibernate的CRUD的操作

3.2.1、保存記錄:

session.save(customer);

3.2.2、根據主鍵進行查詢:

* Customer customer = (Customer)session.get(Customer.class ,1);

* Customer customer = (Customer)session.load(Customer.class,1);

get 和load的區別

1.發送SQL的時機:

?load這個方法采用了一個技術.lazy延遲加載(懶加載).真正使用這個對象的數據的時候.(對象的數據不包括主鍵).

?get這個方法是立即檢索.當執行session.get()方法的時候,馬上發送SQL語句查詢.

?2.返回的對象:

?load方法返回的是代理對象.

?get方法返回的是真實的對象.

3.查詢一個不存在的數據:

?load方法拋異常:ObjectNotFoundException.

?get方法拋異常:NullPointException.

3.2.3、修改記錄

?session.update(customer);

修改有兩種方式 :

// 5.1手動創建對象的方式Customer customer = new Customer();customer.setId(2);customer.setName("sihai");session.update(customer);

這種方式如果沒有設置的屬性,將這個屬性的默認值存入了.(不好.)

// 5.2先查詢在修改的方式(推薦方式)Customer customer = (Customer) session.get(Customer.class, 1);customer.setName("sihai");session.update(customer);

3.2.4、刪除記錄:

?session.delete(customer);

刪除記錄有兩種方式:

// 5.1手動創建對象的方式Customer customer = new Customer();customer.setId(2);session.delete(customer);

// 5.2先查詢在刪除的方式Customer customer = (Customer)session.get(Customer.class, 1);session.delete(customer);

3.2.5、查詢所有:

HQL:

HQL:Hibernate Query Language.

面向對象的寫法:

Query query = session.createQuery("from Customer where name = ?");query.setParameter(0, "sihai");Query.list();

QBC:

Query By Criteria.(條件查詢)

Criteria criteria = session.createCriteria(Customer.class);criteria.add(Restrictions.eq("name", "sihai"));List<Customer> list = criteria.list();

SQL:

SQLQuery query = session.createSQLQuery("select * from customer");List<Object[]> list = query.list();SQLQuery query = session.createSQLQuery("select * from customer");query.addEntity(Customer.class);List<Customer> list = query.list();

(。・?・)ノ゙嗨,總結好久了,以后自己好查看,也分享一下。

總結

以上是生活随笔為你收集整理的hibernate教程--快速入门(增删改查)的全部內容,希望文章能夠幫你解決所遇到的問題。

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