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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hibernate_day01

發(fā)布時間:2024/3/12 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hibernate_day01 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

今天任務(wù)

1. 使用Hibernate框架完成對客戶的增刪改查的操作

教學(xué)導(dǎo)航

1. 能夠說出Hibernate的執(zhí)行流程 2. 能夠獨(dú)立使用Hibernate框架完成增刪改查的操作

框架和CRM項目的整體介紹

1. 什么是CRM* CRM(Customer Relationship Management)客戶關(guān)系管理,是利用相應(yīng)的信息技術(shù)以及互聯(lián)網(wǎng)技術(shù)來協(xié)調(diào)企業(yè)與顧客間在銷售、營銷和服務(wù)上的交互,向客戶提供創(chuàng)新式的個性化的客戶交互和服務(wù)的過程* 其最終目標(biāo)是將面向客戶的各項信息和活動集成起來,組建一個以客戶為中心的企業(yè),實(shí)現(xiàn)對面向客戶的活動的全面管理2. CRM的模塊* CRM系統(tǒng)實(shí)現(xiàn)了對企業(yè)銷售、營銷、服務(wù)等各階段的客戶信息、客戶活動進(jìn)行統(tǒng)一管理。* CRM系統(tǒng)功能涵蓋企業(yè)銷售、營銷、用戶服務(wù)等各各業(yè)務(wù)流程,業(yè)務(wù)流程中與客戶相關(guān)活動都會在CRM系統(tǒng)統(tǒng)一管理。* 下邊列出一些基本的功能模塊,包括:* 客戶信息管理* 聯(lián)系人管理* 商機(jī)管理* 統(tǒng)計分析等

3. 模塊的具體功能* 客戶信息管理* 對客戶信息統(tǒng)一維護(hù),客戶是指存量客戶或擬營銷的客戶,通過員工錄入形成公司的“客戶庫”是公司最重要的數(shù)據(jù)資源。* 聯(lián)系人管理* 對客戶的聯(lián)系人信息統(tǒng)一管理,聯(lián)系人是指客戶企業(yè)的聯(lián)系人,即企業(yè)的業(yè)務(wù)人員和客戶的哪些人在打交道。* 客戶拜訪管理* 業(yè)務(wù)員要開發(fā)客戶需要去拜訪客戶,客戶拜訪信息記錄了業(yè)務(wù)員與客戶溝通交流方面的不足、采取的策略不當(dāng)、有待改進(jìn)的地方或值得分享的溝通技巧等方面的信息。* 綜合查詢* 客戶相關(guān)信息查詢,包括:客戶信息查詢、聯(lián)系人信息查詢、商機(jī)信息查詢等* 統(tǒng)計分析* 按分類統(tǒng)計客戶信息,包括:客戶信息來源統(tǒng)計、按行業(yè)統(tǒng)計客戶、客戶發(fā)展數(shù)量統(tǒng)計等* 系統(tǒng)管理系統(tǒng)管理屬于crm系統(tǒng)基礎(chǔ)功能模塊,包括:數(shù)據(jù)字典、賬戶管理、角色管理、權(quán)限管理、操作日志管理等


Hibernate框架的學(xué)習(xí)路線

1. 注意:Hibernate框架知識點(diǎn)非常多,比較雜亂,大家要做好筆記記錄的工作 2. 學(xué)習(xí)的路線* 第一天:主要是學(xué)習(xí)框架的入門,自己搭建框架,完成增刪改查的操作* 第二天:主要學(xué)習(xí)一級緩存、事務(wù)管理和基本的查詢* 第三天:主要學(xué)習(xí)一對多和多對多的操作等* 第四天:基本查詢和查詢的優(yōu)化*( redis替代Hibernate二級緩存,所以現(xiàn)在不學(xué)二級緩存了,緩存技術(shù)都被redis替代了)


案例一:完成客戶的CRUD的操作


需求分析

1. CRM系統(tǒng)中客戶信息管理模塊功能包括* 新增客戶信息* 客戶信息查詢* 修改客戶信息* 刪除客戶信息2. 要實(shí)現(xiàn)客戶的新增功能

技術(shù)分析之Hibernate框架的概述


Hibernate框架的概述

1. Hibernate框架的概述* Hibernate稱為* Hibernate是一個開放源代碼的對象關(guān)系映射(ORM)框架,它對JDBC進(jìn)行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數(shù)據(jù)庫。 * Hibernate可以應(yīng)用在任何使用JDBC的場合,既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應(yīng)用中使用。* Hibernate是輕量級JavaEE應(yīng)用的持久層解決方案,是一個關(guān)系數(shù)據(jù)庫ORM框架2. 記住:Hibernate是一個持久層的ORM框架!!!

什么是ORM(對象關(guān)系映射)

1. ORM映射:Object Relational Mapping* O:面向?qū)ο箢I(lǐng)域的Object(JavaBean對象)* R:關(guān)系數(shù)據(jù)庫領(lǐng)域的Relational(表的結(jié)構(gòu))* M:映射Mapping(XML的配置文件)2. 簡單一句話:Hibernate使程序員通過操作對象的方式來操作數(shù)據(jù)庫表記錄


Hibernate優(yōu)點(diǎn)

1. 優(yōu)點(diǎn)* Hibernate對JDBC訪問數(shù)據(jù)庫的代碼做了封裝,大大簡化了數(shù)據(jù)訪問層繁瑣的重復(fù)性代碼* Hibernate是一個基于jdbc的主流持久化框架,是一個優(yōu)秀的orm實(shí)現(xiàn),它很大程度的簡化了dao層編碼工作* Hibernate的性能非常好,因?yàn)樗且粋€輕量級框架。映射的靈活性很出色。它支持很多關(guān)系型數(shù)據(jù)庫,從一對一到多對多的各種復(fù)雜關(guān)系

技術(shù)分析之Hibernate框架的快速入門


第一步:下載Hibernate5的運(yùn)行環(huán)境

1. 下載相應(yīng)的jar包等* http://sourceforge.net/projects/hibernate/files/hibernate-orm/5.0.7.Final/hibernate-release-5.0.7.Final.zip/download 2. 解壓后對目錄結(jié)構(gòu)有一定的了解

目錄結(jié)構(gòu)


第二步:創(chuàng)建表結(jié)構(gòu)

1. 建表語句如下Create database hibernate_day01;Use hibernate_day01;CREATE TABLE `cst_customer` (`cust_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客戶編號(主鍵)',`cust_name` varchar(32) NOT NULL COMMENT '客戶名稱(公司名稱)',`cust_user_id` bigint(32) DEFAULT NULL COMMENT '負(fù)責(zé)人id',`cust_create_id` bigint(32) DEFAULT NULL COMMENT '創(chuàng)建人id',`cust_source` varchar(32) DEFAULT NULL COMMENT '客戶信息來源',`cust_industry` varchar(32) DEFAULT NULL COMMENT '客戶所屬行業(yè)',`cust_level` varchar(32) DEFAULT NULL COMMENT '客戶級別',`cust_linkman` varchar(64) DEFAULT NULL COMMENT '聯(lián)系人',`cust_phone` varchar(64) DEFAULT NULL COMMENT '固定電話',`cust_mobile` varchar(16) DEFAULT NULL COMMENT '移動電話',PRIMARY KEY (`cust_id`)) ENGINE=InnoDB AUTO_INCREMENT=94 DEFAULT CHARSET=utf8;

操作步驟

mysql -uroot -p1111 show databases; drop database hibernate_day01;-- 如果已經(jīng)有了就刪除 復(fù)制上面代碼 已經(jīng)切換數(shù)據(jù)庫了 show tables;desc cst_customer;命令行下可能中文亂碼解決方式1:每次登陸都執(zhí)行一次:set character_set_client=gb2312; set character_set_connection=gb2312; set character_set_results=gb2312; 解決方式2: 直接修改配置文件,永久生效:default-character-set=gbk (utf-8改為gbk)

第三步:搭建Hibernate的開發(fā)環(huán)境

1. 創(chuàng)建WEB工程,引入Hibernate開發(fā)所需要的jar包* MySQL的驅(qū)動jar包 * Hibernate開發(fā)需要的jar包(/hibernate...Final/lib/required/所有jar包.其中dom4j.jar 解析xml文檔) ) * 日志jar包(資料/jar包/log4j/所有jar包) (任何框架都有日志)

導(dǎo)完后所有jar包


第四步:編寫JavaBean實(shí)體類

1. Customer類的代碼如下:public class Customer {private Long cust_id;private String cust_name;private Long cust_user_id;private Long cust_create_id;private String cust_source;private String cust_industry;private String cust_level;private String cust_linkman;private String cust_phone;private String cust_mobile;// 省略get和set方法}

第五步:創(chuàng)建類與表結(jié)構(gòu)的映射

1. 在JavaBean所在的包下創(chuàng)建映射的配置文件* 默認(rèn)的命名規(guī)則為:實(shí)體類名.hbm.xml* 在xml配置文件中引入約束(引入的是hibernate3.0的dtd約束,不要引入4的約束)* (約束的好處,限制你只能寫約束規(guī)定的那些標(biāo)簽,其他的不能寫,且有代碼提示了 以后就復(fù)制粘貼下面這個了 )<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">2. 如果不能上網(wǎng),編寫配置文件是沒有提示的,需要自己來配置 (資料dtd文件夾下的文件作用)* 先復(fù)制http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd --> window --> preferences -->* 搜索xml --> 選擇xml catalog --> 選中User Specified Entries-->點(diǎn)擊add --> Key Type選URI --> * 粘貼復(fù)制的地址(上面的地址,即:http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd) -->* 選擇location,選擇本地的DTD的路徑3. 編寫映射的配置文件<?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><class name="com.itheima.domain.Customer" table="cst_customer"><id name="cust_id" column="cust_id"><generator class="native"/></id><property name="cust_name" column="cust_name"/><property name="cust_user_id" column="cust_user_id"/><property name="cust_create_id" column="cust_create_id"/><property name="cust_source" column="cust_source"/><property name="cust_industry" column="cust_industry"/><property name="cust_level" column="cust_level"/><property name="cust_linkman" column="cust_linkman"/><property name="cust_phone" column="cust_phone"/><property name="cust_mobile" column="cust_mobile"/></class></hibernate-mapping>

自己寫的注釋版本

<?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><!-- 配置類和表結(jié)構(gòu)的映射 --><!-- name:類的全限定名 table:數(shù)據(jù)庫中定義的表名 --><class name="com.itheima.domain.Customer" table="cst_customer"><!-- 配置id見到name屬性,JavaBean屬性見到column屬性,是表的結(jié)構(gòu)字段--><!-- 下面一行便將Customer類的cust_id屬性和表cst_customer的字段建立關(guān)聯(lián)了,于是對框架來說,類屬性名和表字段名不必完全一樣,這里配置對應(yīng)了就行了 但基礎(chǔ)部分的DButils就失效了--><id name="cust_id" column="cust_id"><!-- 主鍵生成策略 native表示自動遞增 --><generator class="native"/></id><!-- 上面配置的是主鍵 主鍵很重要 單獨(dú)配置 其他屬性也要一個個單獨(dú)配置 以后有表結(jié)構(gòu)就能自動生成配置文件,不用這么麻煩了 (以后甚至增刪改查代碼都能自動生成了) --><!-- 配置其他屬性 --><property name="cust_name" column="cust_name"/><property name="cust_user_id" column="cust_user_id"/><property name="cust_create_id" column="cust_create_id"/><property name="cust_source" column="cust_source"/><property name="cust_industry" column="cust_industry"/><property name="cust_level" column="cust_level"/><property name="cust_linkman" column="cust_linkman"/><property name="cust_phone" column="cust_phone"/><property name="cust_mobile" column="cust_mobile"/></class></hibernate-mapping>

第六步:編寫Hibernate核心的配置文件

1. 在src目錄下,創(chuàng)建名稱為hibernate.cfg.xml的配置文件(寫一個就行了,且名稱路徑都定死了) 2. 在XML中引入DTD約束<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">3. 打開:資料/hibernate-release-5.0.7.Final/project/etc/hibernate.properties,可以查看具體的配置信息 * 必須配置的4大參數(shù) #hibernate.connection.driver_class com.mysql.jdbc.Driver#hibernate.connection.url jdbc:mysql:///test#hibernate.connection.username gavin#hibernate.connection.password* 數(shù)據(jù)庫的方言(必須配置的)#hibernate.dialect org.hibernate.dialect.MySQLDialect* 可選的配置#hibernate.show_sql true#hibernate.format_sql true#hibernate.hbm2ddl.auto update* 引入映射配置文件(一定要注意,要引入自己寫的映射文件,框架需要加載映射文件)* <mapping resource="com/itheima/domain/Customer.hbm.xml"/> 4. 具體的配置如下<?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><session-factory><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><property name="hibernate.connection.url">jdbc:mysql:///hibernate_day01</property><property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">root</property><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><mapping resource="com/itheima/domain/Customer.hbm.xml"/></session-factory></hibernate-configuration>

自己寫的注釋版本

<?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><!-- 記住:先配置SessionFactory標(biāo)簽,一個數(shù)據(jù)庫對應(yīng)一個SessionFactory標(biāo)簽 --><session-factory><!-- 必須配置的參數(shù)有5個:4大參數(shù)(驅(qū)動,數(shù)據(jù)庫,用戶名,密碼)+數(shù)據(jù)庫的方言 --><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><property name="hibernate.connection.url">jdbc:mysql:///hibernate_day01</property><property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">1111</property><!-- 數(shù)據(jù)庫的方言 mysql獨(dú)有的語法 告訴hibernate 它會幫你實(shí)現(xiàn)底層代碼--><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><!-- 可選配置 --><!-- 暫時不寫 --><!-- 映射配置文件,需要引入映射的配置文件 --><!-- 注意1:中間是/不是. 2.復(fù)制全限定名后要刪去前面的,從包名com開始 --><mapping resource="com/itheima/domain/Customer.hbm.xml"/></session-factory> </hibernate-configuration>

第七步:編寫Hibernate入門代碼

1. 具體的代碼如下/*** 測試保存客戶*/@Testpublic void testSave(){// 先加載配置文件Configuration config = new Configuration();// 默認(rèn)加載src目錄下的配置文件config.configure();// 創(chuàng)建SessionFactory對象SessionFactory factory = config.buildSessionFactory();// 創(chuàng)建session對象Session session = factory.openSession();// 開啟事務(wù)Transaction tr = session.beginTransaction();// 編寫保存代碼Customer c = new Customer();// c.setCust_id(cust_id); 已經(jīng)自動遞增c.setCust_name("測試名稱");c.setCust_mobile("110");// 保存客戶session.save(c);// 提交事務(wù)tr.commit();// 釋放資源session.close();factory.close();}

自己寫的注釋版本:

package com.itheima.test; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.junit.Test; import com.itheima.domain.Customer;/*** 測試hibernate框架* @author Administrator**/ public class Demo1 {/*** 測試保存客戶*/@Testpublic void testSave(){/*** 1.先加載配置文件* 2.創(chuàng)建SessionFactory對象(工廠就是來生成對象的),生成Session對象 (不是HttpServlet 是Hibernate的會話機(jī)制)* 3.創(chuàng)建Session對象* 4.開啟事務(wù)* 5.編寫保存的代碼* 6.提交事務(wù)* 7.釋放資源*///1.先加載配置文件Configuration config=new Configuration();//下面configure方法默認(rèn)加載 src目錄下的hibernate.cfg.xml配置文件config.configure();//屬性配置文件不需要本行 可惜屬性配置文件不能引入自己寫的那個映射 //2.創(chuàng)建SessionFactory對象SessionFactory factory = config.buildSessionFactory();//3.創(chuàng)建session 現(xiàn)在可以用強(qiáng)大的session來處理數(shù)據(jù)庫了 session對象又稱持久化對象Session session = factory.openSession();//4.開啟事務(wù)Transaction tr = session.beginTransaction();//5.編寫保存的代碼Customer c = new Customer();//c.setCust_id(cust_id);//不要設(shè)置,主鍵自動遞增c.setCust_name("測試");c.setCust_level("2");c.setCust_phone("110");//保存數(shù)據(jù) Hibernate核心說。。操作對象就是操作數(shù)據(jù)庫 映射寫好配置好了后,就直接操作對象就行了session.save(c);//一行代碼搞定保存 。。。可怕!!太強(qiáng)了!!!!//6.提交事務(wù)tr.commit();//7.釋放資源 以后就不釋放了session.close();factory.close(); } }

一運(yùn)行竟然成功:

回憶:快速入門

1. 下載Hibernate框架的開發(fā)包 2. 編寫數(shù)據(jù)庫和表結(jié)構(gòu) 3. 創(chuàng)建WEB的項目,導(dǎo)入了開發(fā)的jar包* MySQL驅(qū)動包、Hibernate開發(fā)的必須要有的jar包、日志的jar包 4. 編寫JavaBean,以后不使用基本數(shù)據(jù)類型,使用包裝類 5. 編寫映射的配置文件(核心),先導(dǎo)入開發(fā)的約束,里面正常配置標(biāo)簽 6. 編寫hibernate的核心的配置文件,里面的內(nèi)容是固定的 7. 編寫代碼,使用的類和方法

技術(shù)分析之:Hibernate常用的配置文件


Hibernate配置文件之映射配置文件

1. 映射文件,即Stu.hbm.xml的配置文件* <class>標(biāo)簽 -- 用來將類與數(shù)據(jù)庫表建立映射關(guān)系* name -- 類的全路徑* table -- 表名.(類名與表名一致,那么table屬性也可以省略)* catalog -- 數(shù)據(jù)庫的名稱,基本上都會省略不寫* <id>標(biāo)簽 -- 用來將類中的屬性與表中的主鍵建立映射,id標(biāo)簽就是用來配置主鍵的。* name -- 類中屬性名* column -- 表中的字段名.(如果類中的屬性名與表中的字段名一致,那么column可以省略.)* length -- 字段的程度,如果數(shù)據(jù)庫已經(jīng)創(chuàng)建好了,那么length可以不寫。如果沒有創(chuàng)建好,生成表結(jié)構(gòu)時,length最好指定(指定了,強(qiáng)大的hibernate會幫你生成表結(jié)構(gòu))。* <property> -- 用來將類中的普通屬性與表中的字段建立映射.* name -- 類中屬性名* column -- 表中的字段名.(如果類中的屬性名與表中的字段名一致,那么column可以省略.)* length -- 數(shù)據(jù)長度* type -- 數(shù)據(jù)類型(一般都不需要編寫,如果寫需要按著規(guī)則來編寫)* Hibernate的數(shù)據(jù)類型 type="string"* Java的數(shù)據(jù)類型 type="java.lang.String"* 數(shù)據(jù)庫字段的數(shù)據(jù)類型 <column name="name" sql-type="varchar"/>

Hibernate配置文件之核心配置文件

1. 核心配置文件的兩種方式* 第一種方式是屬性文件的形式,即properties的配置文件* hibernate.properties* hibernate.connection.driver_class=com.mysql.jdbc.Driver* 缺點(diǎn)* 不能加載映射的配置文件,需要手動編寫代碼去加載* 第二種方式是XML文件的形式,開發(fā)基本都會選擇這種方式* hibernate.cfg.xml* <property name="hibernate.connection.driver_class" >com.mysql.jdbc.Driver</property>* 優(yōu)點(diǎn)* 格式比較清晰* 編寫有提示* 可以在該配置文件中加載映射的配置文件(最主要的)2. 關(guān)于hibernate.cfg.xml的配置文件方式* 必須有的配置* 數(shù)據(jù)庫連接信息:hibernate.connection.driver_class -- 連接數(shù)據(jù)庫驅(qū)動程序hibernate.connection.url -- 連接數(shù)據(jù)庫URLhibernate.connection.username -- 數(shù)據(jù)庫用戶名hibernate.connection.password -- 數(shù)據(jù)庫密碼* 方言:hibernate.dialect -- 操作數(shù)據(jù)庫方言* 可選的配置* hibernate.show_sql -- 運(yùn)行時在控制臺打印SQL語句* hibernate.format_sql -- 格式化sql語句 控制臺打印時好看一點(diǎn)* hibernate.hbm2ddl.auto -- 通過映射轉(zhuǎn)成DDL(數(shù)據(jù)定義語言)語句 (數(shù)據(jù)庫中提前沒有表,通過生成create語句自動為你創(chuàng)建表)* create -- 每次都會創(chuàng)建一個新的表.---測試的時候用 實(shí)際開發(fā)不可能用 每次都清空啊* create-drop -- 每次都會創(chuàng)建一個新的表,當(dāng)執(zhí)行結(jié)束之后,將創(chuàng)建的這個表刪除.---測試的時候* update -- 如果有表,使用原來的表.沒有表,創(chuàng)建一個新的表.同時更新表結(jié)構(gòu)(eg:javaBean中臨時加一個屬性,(配置文件也多一條映射)表中也多一個字段,原來的數(shù)據(jù)不會丟失 然而刪掉屬性不會幫你刪數(shù)據(jù)庫的字段).* validate -- 如果有表,使用原來的表.同時校驗(yàn)**映射文件與表中字段**是否一致如果不一致就會報錯. 項目上線時可以改成validate* 加載映射* 如果XML方式:<mapping resource="cn/itcast/hibernate/domain/User.hbm.xml" />

新增代碼:

<!-- 可選配置 --><!-- 在控制臺打印sql語句 --><property name="hibernate.show_sql">true</property><!-- 格式化sql語句 控制臺打印時好看一點(diǎn) --><property name="hibernate.format_sql">true</property><!-- 生成數(shù)據(jù)庫的表結(jié)構(gòu) 之前數(shù)據(jù)庫沒有建表 幫你自動生成 (把表刪了再測試,確實(shí)有create語句打印在控制臺)--><!-- update最好 有添加,沒有創(chuàng)建 --><property name="hibernate.hbm2ddl.auto">update</property><!-- 自動生成得sql語句(先把數(shù)據(jù)庫中的表刪了)Hibernate: drop table if exists cst_customerHibernate: create table cst_customer (cust_id bigint not null auto_increment,cust_name varchar(255),cust_user_id bigint,cust_create_id bigint,cust_source varchar(255),cust_industry varchar(255),cust_level varchar(255),cust_linkman varchar(255),cust_phone varchar(255),cust_mobile varchar(255),primary key (cust_id))Hibernate: insert intocst_customer(cust_name, cust_user_id, cust_create_id, cust_source, cust_industry, cust_level, cust_linkman, cust_phone, cust_mobile) values(?, ?, ?, ?, ?, ?, ?, ?, ?)-->

技術(shù)分析之Hibernate常用的接口和類


Configuration類和作用

1. Configuration類* Configuration對象用于配置并且啟動Hibernate。* Hibernate應(yīng)用通過該對象來獲得對象-關(guān)系映射文件中的元數(shù)據(jù),以及動態(tài)配置Hibernate的屬性,然后創(chuàng)建SessionFactory對象。* 簡單一句話:加載Hibernate的配置文件,可以獲取SessionFactory對象。2. Configuration類的其他應(yīng)用(了解)* 加載配置文件的種類,Hibernate支持xml和properties類型的配置文件,在開發(fā)中基本都使用XML配置文件的方式。* 如果采用的是properties的配置文件,那么通過Configuration configuration = new Configuration();就可以假裝配置文件* 但是需要自己手動加載映射文件* 例如:config.addResource("cn/itcast/domain/Student.hbm.xml");* 如果采用的XML的配置文件,通過Configuration configuration = new Configuration().configure();加載配置文件

代碼修改過程

//1.先加載配置文件/*Configuration config=new Configuration();//下面configure方法默認(rèn)加載 src目錄下的hibernate.cfg.xml配置文件config.configure();//屬性配置文件不需要本行//了解,手動加載映射文件 xml里不再引入<mapping resource="com/itheima/domain/Customer.hbm.xml"/> 那么需要在下面加一行引入代碼//config.addResource("com/itheima/domain/Customer.hbm.xml");*/ //簡寫方式 方法鏈編程Configuration config = new Configuration().configure();

SessionFactory:重要

1. 是工廠類,是生成Session對象的工廠類 2. SessionFactory類的特點(diǎn)* 由Configuration通過加載配置文件創(chuàng)建該對象。* SessionFactory對象中保存了當(dāng)前的數(shù)據(jù)庫配置信息和所有映射關(guān)系以及預(yù)定義的SQL語句。同時,SessionFactory還負(fù)責(zé)維護(hù)Hibernate的二級緩存。* 預(yù)定義SQL語句* 使用Configuration類創(chuàng)建了SessionFactory對象時,已經(jīng)在SessionFacotry對象中緩存了一些SQL語句* 常見的SQL語句是增刪改查(通過主鍵來查詢)* 這樣做的目的是效率更高* 一個SessionFactory實(shí)例對應(yīng)一個數(shù)據(jù)庫,應(yīng)用從該對象中獲得Session實(shí)例。* SessionFactory是線程安全的,意味著它的一個實(shí)例可以被應(yīng)用的多個線程共享。* SessionFactory是重量級的,意味著不能隨意創(chuàng)建或銷毀它的實(shí)例。如果只訪問一個數(shù)據(jù)庫,只需要創(chuàng)建一個SessionFactory實(shí)例,且在應(yīng)用初始化的時候完成。* SessionFactory需要一個較大的緩存,用來存放預(yù)定義的SQL語句及實(shí)體的映射信息。另外可以配置一個緩存插件,這個插件被稱之為Hibernate的二級緩存,被多線程所共享3. 總結(jié)* 一般應(yīng)用使用一個SessionFactory,最好是應(yīng)用啟動時就完成初始化。


編寫HibernateUtil的工具類
由上面的分析可知:SessionFactory是重量級的,意味著不能隨意創(chuàng)建或銷毀它的實(shí)例
因此有必要封裝工具類

1. 具體代碼如下public class HibernateUtil {private static final Configuration cfg;private static final SessionFactory factory;static{// 給常量賦值 // 加載配置文件cfg = new Configuration().configure();// 生成factory對象factory = cfg.buildSessionFactory();}// 獲取Session對象public static Session openSession(){return factory.openSession();}}

編寫完之后,訪問數(shù)據(jù)庫又簡單了不少

/*** 測試工具類*/@Testpublic void testSave2(){//原來:加載配置文件,獲取Factory對象,獲取session//現(xiàn)在直接用工具類獲取就行了Session session = HibernateUtils.getSession();Transaction tr = session.beginTransaction();Customer c=new Customer();c.setCust_name("崔浩");session.save(c);//提交事務(wù)tr.commit();//釋放資源 session肯定要釋放 但是factory就不能釋放了 重量級session.close(); }

Session接口

1. 概述* Session是在Hibernate中使用最頻繁的接口。也被稱之為持久化管理器。它提供了和持久化有關(guān)的操作,比如添加、修改、刪除、加載和查詢實(shí)體對象* Session 是應(yīng)用程序與數(shù)據(jù)庫之間交互操作的一個單線程對象,是 Hibernate 運(yùn)作的中心* Session是線程不安全的(也就是不能寫成成員變量讓好幾個操作共用一個session,這是不行的,極其不安全,每次數(shù)據(jù)庫請求操作都要創(chuàng)建一個新的session,用完即銷毀)* 所有持久化對象必須在 session 的管理下才可以進(jìn)行持久化操作* Session 對象有一個一級緩存,顯式執(zhí)行 flush 之前,所有的持久化操作的數(shù)據(jù)都緩存在 session 對象處* 持久化類與 Session 關(guān)聯(lián)起來后就具有了持久化的能力2. 特點(diǎn)* 不是線程安全的。應(yīng)避免多個線程使用同一個Session實(shí)例* Session是輕量級的,它的創(chuàng)建和銷毀不會消耗太多的資源。應(yīng)為每次客戶請求分配獨(dú)立的Session實(shí)例* Session有一個緩存,被稱之為Hibernate的一級緩存。每個Session實(shí)例都有自己的緩存3. 常用的方法* save(obj)* delete(obj) * get(Class,id) --javabean快速生成toString()重寫方法輸出字段信息,alt+s->s(tostring那個)* update(obj)* saveOrUpdate(obj) -- 保存或者修改(如果沒有數(shù)據(jù),保存數(shù)據(jù)。如果有,修改數(shù)據(jù))* createQuery() -- HQL語句的查詢的方式

測試代碼:

/*** 測試get()方法* 以后通過主鍵來查就用get方法就ok了* 查詢事務(wù)可加可不加*/@Testpublic void testGet(){//原來:加載配置文件,獲取Factory對象,獲取session//現(xiàn)在直接用工具類獲取就行了Session session = HibernateUtils.getSession();Transaction tr = session.beginTransaction();//測試查詢方法 arg0:查詢的javaBean的class對象(底層就可通過反射完全操作本對象了 如:返回數(shù)據(jù)封存成對象) arg1:主鍵的值(根據(jù)主鍵查詢表記錄)Customer c= session.get(Customer.class, 7L);//查詢cust_id為7的成員記錄 寫好后鼠標(biāo)提示 返回當(dāng)然是arg0的對象了System.out.println("查詢到的客戶:"+c);//提交事務(wù)tr.commit();//釋放資源 session肯定要釋放 但是factory就不能釋放了 重量級session.close(); }/*** 測試delete()方法* 注意:從現(xiàn)在開始,所有的刪除或者修改都要先查詢 再刪改 (我想hibernate框架 輕量級 基本的sql語句早就在緩存中了,查詢肯定超快,不用擔(dān)心效率)* 刪改必須加事務(wù)(只有查詢可不加)*/@Testpublic void testDel(){//原來:加載配置文件,獲取Factory對象,獲取session//現(xiàn)在直接用工具類獲取就行了Session session = HibernateUtils.getSession();Transaction tr = session.beginTransaction();//測試查詢方法 arg0:查詢的javaBean的class對象(底層就可通過反射完全操作本對象了 如:返回數(shù)據(jù)封存成對象) arg1:主鍵的值(根據(jù)主鍵查詢表記錄)Customer c= session.get(Customer.class, 7L);//查詢cust_id為7的成員記錄 寫好后鼠標(biāo)提示 返回當(dāng)然是arg0的對象了System.out.println("查詢到的客戶:"+c);//加這一行刪除就行了(查詢基礎(chǔ)上 一定先查在刪 這是標(biāo)準(zhǔn)做法)session.delete(c);//提交事務(wù)tr.commit();//釋放資源 session肯定要釋放 但是factory就不能釋放了 重量級session.close(); }/*** 測試update()方法* 注意:同上 修改要先查詢了 (我想hibernate框架 輕量級 基本的sql語句早就在緩存中了,查詢肯定超快,不用擔(dān)心效率)* 刪改必須加事務(wù)(只有查詢可不加)*/@Testpublic void testUpdate(){//獲取sessionSession session = HibernateUtils.getSession();//打開事務(wù)Transaction tr = session.beginTransaction();Customer c= session.get(Customer.class, 6L);//查詢cust_id為7的成員記錄 寫好后鼠標(biāo)提示 返回當(dāng)然是arg0的對象了System.out.println("查詢到的客戶:"+c);//查到后直接設(shè)置c的信息c.setCust_name("紫英");c.setCust_level("3");//設(shè)置好后直接傳入update即可session.update(c);//提交事務(wù)tr.commit();//釋放資源 session.close(); }/*** 添加或修改* 沒有添加 有則修改*/@Testpublic void testSaveOrUpdate(){//獲取sessionSession session = HibernateUtils.getSession();//打開事務(wù)Transaction tr = session.beginTransaction();/*Customer c=new Customer();//c.setCust_id(10L); // error 千萬不要自己手動設(shè)置id值,id值都由hibernate框架來維護(hù)的 (如配置文件中的native遞增 或者隨機(jī)字符串)c.setCust_name("hello");//保存或修改session.saveOrUpdate(c);*///實(shí)在想修改指定id的用戶數(shù)據(jù) 先查再改Customer c=session.get(Customer.class, 6L);c.setCust_name("玄霄");session.saveOrUpdate(c);//提交事務(wù)tr.commit();//釋放資源 session.close(); }/*** 測試查詢方法* createQuery() -- HQL語句的查詢的方式*/@Testpublic void testSel(){//獲取sessionSession session = HibernateUtils.getSession();//打開事務(wù)Transaction tr = session.beginTransaction();//創(chuàng)建查詢接口 (有很多種查詢接口 下面是最簡單一種) Query query=session.createQuery("from Customer");//"from 類名" 就是查詢對應(yīng)的表 //查詢所有的數(shù)據(jù) 即:select * from 表名 對應(yīng)的封裝方法為listList<Customer> list = query.list();//所有記錄當(dāng)然返回list了//增強(qiáng)for循環(huán)輸出整張表所有記錄for (Customer customer : list) {System.out.println(customer);}//提交事務(wù)tr.commit();//釋放資源 session.close(); }/*** 測試保存 簡單演示事務(wù)*/@Testpublic void testSave3(){Session session=null;Transaction tr= null;try {//獲取sessionsession=HibernateUtils.getSession();tr= session.beginTransaction();//已經(jīng)打開事務(wù) 邊創(chuàng)建,邊打開//執(zhí)行代碼Customer c=new Customer();c.setCust_name("bob");//保存session.save(c);//提交事務(wù)tr.commit(); } catch (Exception e) {//回滾事務(wù)tr.rollback();e.printStackTrace();}finally{//釋放資源session.close();}}

Transaction接口

1. Transaction是事務(wù)的接口 2. 常用的方法* commit() -- 提交事務(wù)* rollback() -- 回滾事務(wù)3. 特點(diǎn)* Hibernate框架默認(rèn)情況下事務(wù)不自動提交.需要手動提交事務(wù)* 如果沒有開啟事務(wù),那么每個Session的操作,都相當(dāng)于一個獨(dú)立的事務(wù)

開發(fā)步驟

1. 準(zhǔn)備環(huán)境* 在資料/crm/ui/WebRoot下所有的文件,拷貝到工程中* 引入JSTL的標(biāo)簽庫,JSP頁面會報錯 (Myeclipse內(nèi)置了jstl 不需要導(dǎo)包了)

編寫代碼

客戶列表部分要自己實(shí)現(xiàn)別忘了

生疏了的代碼:

  • Map<String, String[]> map = request.getParameterMap();

  • BeanUtils.populate(c, map);

//接收請求參數(shù)request.setCharacterEncoding("utf-8");//所有的數(shù)據(jù)獲取到一個map里Map<String, String[]> map = request.getParameterMap();//封裝數(shù)據(jù) 用beanUtils工具 myeclipse也沒有內(nèi)置 需要手動導(dǎo)入jar包了Customer c=new Customer();try {//傳遞個對象 傳遞個map map數(shù)據(jù)就直接封裝到對象里了BeanUtils.populate(c, map);//調(diào)用業(yè)務(wù)層new CustomerService().saveCustomer(c);System.out.println("客戶添加成功!");}catch (Exception e) {e.printStackTrace();}

復(fù)習(xí)總結(jié):

總結(jié)

以上是生活随笔為你收集整理的Hibernate_day01的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩一二在线 | 久久久久久久久久久久久久av | 精品美女久久久 | 伦在线| 亚洲va欧美va国产综合久久 | 欧美日韩在线网站 | 日韩精品一区中文字幕 | 在线亚洲人成电影网站色www | 欧美xxxxxhd| 国产情侣一区二区 | 美女网站免费观看 | 日日碰| 国产三级三级在线观看 | 黄色xxxxx | 99视屏 | 91在线观看免费高清 | 日本理论视频 | 黄片毛片 | av一级在线观看 | 欧美疯狂做受xxxxx高潮 | 国产精品一区二区免费 | 在线免费观看 | 中文在线视频观看 | 越南av| 一区二区三区四区五区视频 | 99在线精品视频免费观看软件 | 午夜激情影院 | 亚洲在线第一页 | 久久久久人妻精品一区二区三区 | 午夜性激情 | 日本高清www免费视频 | 天堂视频免费在线观看 | 国产成人精品一区二三区四区五区 | 欧美一区二区在线视频观看 | a少妇| 国产一线天粉嫩馒头极品av | 国产精品白嫩极品美女视频 | 欧美黑人巨大xxx极品 | 成人午夜视频在线 | 自拍偷拍色图 | 欧美色图亚洲色 | 五月天看片 | 久久精品国产亚洲av麻豆 | 中文字幕精品无 | 小妹色播| 亚洲美女色视频 | 日韩精品在线免费 | 日本在线看片 | 可以免费观看的av网站 | 日本一区二区三区免费看 | 国产熟妇一区二区三区aⅴ网站 | 精品一区二区三区中文字幕 | 日韩在线视频中文字幕 | 操模特| 丰满少妇被猛烈进入 | 污污的网站在线观看 | a亚洲天堂 | 狠狠人妻久久久久久综合麻豆 | 亚洲不卡电影 | 日本va欧美va欧美va精品 | 亚欧av在线 | 丁香婷婷久久 | 色妞网站 | 日本视频网| 欧美三级视频在线播放 | 日韩久久久久久 | 国产黄色录相 | 色眯眯影院 | 国产又粗又黄又爽又硬的视频 | 一区二区三区国产视频 | 午夜影院免费观看 | 私人av| 91精品在线一区 | 国产日韩第一页 | 欧美丰满美乳xxⅹ高潮www | 国内露脸中年夫妇交换 | 亚洲人一区二区三区 | 欧美永久视频 | 性欧美精品 | 日韩av网站在线观看 | 精品免费av | 波多野结衣一区二区三区中文字幕 | 欧美日韩国产一区二区在线观看 | 久久久综合网 | 91免费国产视频 | 国产嘿咻| 欧美午夜激情影院 | 亚洲第一福利视频 | 9i精品福利一区二区三区 | 日色网站 | 黄页av| 国产精品黄色在线观看 | 波多野结衣一区二区三区免费视频 | 麻豆视频免费看 | 男女啪啪免费网站 | 欧美69精品久久久久久不卡 | 日韩久久中文字幕 | 色婷婷热久久 | 国产wwww |