什麼是框架? 是軟體的半成品,它已經完成了部分功能。 什麼是hibernate? hibernate是一個開放源代碼的對象關係映射(ORM)框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程式員可以隨心所欲的使用對象編程思維來操縱資料庫。 (簡單的說,hibernate框架通過映射(xml ...
什麼是框架?
是軟體的半成品,它已經完成了部分功能。
什麼是hibernate?
hibernate是一個開放源代碼的對象關係映射(ORM)框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程式員可以隨心所欲的使用對象編程思維來操縱資料庫。
(簡單的說,hibernate框架通過映射(xml配置文件)來關聯javabean和資料庫,程式員可以操作對象來操作資料庫了。)
三大框架在javaweb中的位置:
Hibernate在開發中的位置:
註 意:hibernate的底層依然還是jdbc規範,只不過我們只負責框架的操作方式,而不用在寫jdbc代碼了。
順便提提:雖然dbutils工具類也封裝了jdbc的介面規範,但javabean的屬性和表的欄位不一致時,開發則封裝不了,而換做hibernate框架則可以智能的封裝起來。
好 處:Jdbc代碼非常固定繁瑣,而hibernate簡化我們開發,除此之外還提供一些新的功能,例如:緩存功能………
下麵一起來完成第一個hibernate例子:
第一步:下載hibernate運行環境,導包(Mysql驅動包 +hibernate必須包 + 日誌包)
Hibernate環境下載地址:
MySQL資料庫驅動包下載:
http://download.csdn.net/download/happy516/1753230
下載後找到所需包,如下:
第二步:創建表結構
Create database employee;
Use employee;
CREATE TABLE `employee`(
`id` bigint(32) NOTNULL AUTO_INCREMENT COMMENT '員工編號',
`name` varchar(32) NOTNULL COMMENT '員工名稱',
`source` varchar(32)DEFAULT NULL COMMENT '員工信息來源',
`industry` varchar(32)DEFAULT NULL COMMENT '員工所屬行業',
`level` varchar(32)DEFAULT NULL COMMENT '員工級別',
`linkman` varchar(64)DEFAULT NULL COMMENT '聯繫人',
`phone` varchar(64)DEFAULT NULL COMMENT '固定電話',
`mobile` varchar(16)DEFAULT NULL COMMENT '行動電話',
PRIMARY KEY (`id`)
) ENGINE=InnoDBAUTO_INCREMENT=94 DEFAULT CHARSET=utf8;
第三步:寫javabean
public class employee{
private Long id;
private String name;
private Long user_id;
private Long create_id;
private String source;
private String industry;
private String level;
private String linkman;
private String phone;
private String mobile;
// 生成get()…set()…
}
第四步:寫類與表的映射(一個javabean對應一個映射)
預設的命名規則:實體類名.hbm.xml
這裡就是employee.hbm.xml
引入約束:
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
註意:引入的是hibernate3.0的dtd約束,不要引入4的約束(不向下相容)
完整配置:
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEhibernate-mappingPUBLIC
"-//Hibernate/HibernateMapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<classname="com.demo.domain.employee"table="employee">
<!--name是javabean屬性,column是表屬性,在上面有說到,屬性名和表明不一致時,hibernate也會智能的封裝,不信可以測試一下-->
<idname="id"column="id">
<!--主鍵生成策略-->
<generatorclass="native"/>
</id>
<propertyname="name"column="name"/>
<propertyname="source"column="source"/>
<propertyname="industry"column="industry"/>
<propertyname="level"column="level"/>
<propertyname="linkman"column="linkman"/>
<propertyname="phone"column="phone"/>
<propertyname="mobile"column="mobile"/>
</class>
</hibernate-mapping>
關於<generator class="native"></generator>的不同屬性含義推薦參考:http://blog.sina.com.cn/s/blog_7b8a637f010142if.html
第五步:寫hibernate核心映射:
方式一(瞭解):
屬性文件方式配置,級hibernate.properties
缺點:不能載入映射的配置文件,需要手動編寫代碼去載入
方式二:(主要方式)
預設格式:hibernate.cfg.xml(不可以修改)
不妨參考一下hibernate-release-5.0.7.Final.zip----àproject--àetc--àhibernate.properties
打開hibernate.properties會有相應資料庫的映射格式(這裡以mysql為例):
完整配置:
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEhibernate-configurationPUBLIC
"-//Hibernate/HibernateConfiguration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<!--一個資料庫對應一個SessionFactory標簽 -->
<session-factory>
<!-- 4大參數和資料庫的方言 -->
<propertyname="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<propertyname="hibernate.connection.url">jdbc:mysql:///hibernate_day01</property>
<propertyname="hibernate.connection.username">root</property>
<propertyname="hibernate.connection.password">1234</property>
<!-- 資料庫的方言 -->
<propertyname="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!--引入映射的配置文件 -->
<mappingresource="com/demo/domain/employee.hbm.xml"/>
<!--下麵的是可選配置 -->
<!--在控制台顯示sql語句 -->
<propertyname="hibernate.show_sql">true</property>
<!-- 格式化sql語句 -->
<propertyname="hibernate.format_sql">true</property>
<!-- 生成資料庫的表結構
update:如果沒有表結構,創建表結構。如果存在,不會創建。
-->
<propertyname="hibernate.hbm2ddl.auto">update</property>
<!--校驗映射文件與表中欄位是否一致如果不一致就會報錯-->
<propertyname="hibernate.hbm2ddl.auto">validate</property>
</session-factory>
</hibernate-configuration>
聊聊session-factory:
1. session-factory是工廠類,是生成Session對象的工廠類
2.SessionFactory類的特點:
一丶SessionFactory對象中保存了當前的資料庫配置信息和所有映射關係以及預定義的SQL語句。同時,SessionFactory還負責維護Hibernate的二級緩存。
常見的SQL語句是增刪改查(通過主鍵來查詢)
一個SessionFactory實例對應一個資料庫,應用從該對象中獲得Session實例。
二丶SessionFactory是線程安全的,一個實例可以被應用的多個線程共用。
三丶SessionFactory是重量級的,不能隨意創建或銷毀它的實例。如果只訪問一個資料庫,只需要創建一個SessionFactory實例,且在應用初始化的時候完成。
四丶SessionFactory需要一個較大的緩存,用來存放預定義的SQL語句及實體的映射信息。另外可以配置一個緩存插件,這個插件被稱之為Hibernate的二級緩存,被多線程所共用。
第六步:寫hibernate入門代碼:
packagecom.demo.test;
importorg.hibernate.Session;
importorg.hibernate.SessionFactory;
importorg.hibernate.Transaction;
importorg.hibernate.cfg.Configuration;
importorg.junit.Test;
importcom.demo.domain.employee;
public class demo {
@Test
public void test(){
// 1. 先載入配置文件
Configuration config = new Configuration();
// 預設載入src目錄下hibernate.cfg.xml的配置文件
//再次強調,寫hibernate核心映射名字固定的,不許改變。
config.configure();
//核心映射為屬性配置方式時,要手動加相應映射
//config.addResource("com/demo/domain/employee.hbm.xml");
// 2. 創建SessionFactory對象
SessionFactory factory =config.buildSessionFactory();
// 3. 創建session對象
Session session =factory.openSession();
// 4. 開啟事務
Transaction tr =session.beginTransaction();
// 5. 編寫保存的代碼
employee e = new employee();
// c.setid(cust_id); 主鍵是自動遞增了,可以忽略
e.setName("小明");
e.setLevel("師傅");
e.setPhone("10086");
e.setLinkman("張三");
e.setMobile("13800138000");
e.setSource("人才網");
e.setIndustry("清潔行業");
// 保存數據,操作對象就相當於操作資料庫的表結構
session.save(e);
// 6. 提交事務
tr.commit();
// 7. 釋放資源
session.close();
factory.close();
}
}
說明一下:這裡測試類用到Junit,要導入Junit包,下載地址:http://download.csdn.NET/detail/zht0627/3125442
有疑問或者要更正的,請您留言私信支持,謝謝!
持續更新中。。。