1. 程式人生 > >Hibernate基礎實例

Hibernate基礎實例

show spec def 列名 nal 名稱 image lose 通用

hibernate是orm(對象關系映射)框架 即通過配置文件使對象與數據庫表關聯

讓eclipse斷網擁有xml提示功能

①解壓hibernate-core-5.0.7.Final.jar

②進入org\hibernate下復制到單獨文件
//此處演示配置單個 其余配置同理
hibernate-configuration-3.0.dtd
hibernate-configuration-4.0.xsd
hibernate-mapping-3.0.dtd
hibernate-mapping-4.0.xsd

③打開hibernate-mapping-3.0.dtd 復制xml文檔類型標記裏的uri
<?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的所有配置文件模板都在 hibernate-release-5.0.7.Final\project\etc

ehcache.xml
hibernate-service.xml
hibernate.cfg.xml
hibernate.properties
hibernate.properties.template
log4j.properties


hibernate實例

①導入hibernate包

//導入hibernate必選包&數據庫連接包
antlr-2.7.7.jar
dom4j-1.6.1.jar
geronimo-jta_1.1_spec-1.1.1.jar
hibernate-commons-annotations-5.0.1.Final.jar
hibernate-core-5.0.7.Final.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar
jandex-2.0.0.Final.jar
javassist-3.18.1-GA.jar
jboss-logging-3.3.0.Final.jar

mysql-connector-java-5.1.7-bin.jar

②創建customer表

CREATE TABLE `customer` (
`id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT ‘客戶編號(主鍵)‘,
`name` varchar(32) NOT NULL 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=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;


③創建實體類Customer

//創建實體類與customer表對應 類名=表名字 屬性名=表字段名
public class Customer {
private Long id;
private String name;
private String source;
private String industry;
private String level;
private String linkman;
private String phone;
private String mobile;
//getter setter
//框架調用無參構造方法實例對象 構造方法沒有重載時可默認不寫jvm會補充
}

④創建對象與表映射文件Customer.hbm.xml 和實體類放置同包

<?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">
<!-- 配置表與實體對象的關系 -->
<!-- package屬性:填寫包名 在元素內部需書寫完整類名的屬性 可直接去掉包名 -->
<hibernate-mapping package="com.java.entity" >
<!--
class元素:配置實體與表的對應關系
name:完整類名
table:數據庫表名
-->
<class name="Customer" table="customer" >
<!-- id元素:配置主鍵映射的屬性
name:填寫主鍵對應屬性名
column(可選):填寫表中的主鍵列名 默認值:列名會默認使用屬性名
type(可選):填寫列(屬性)的類型 hibernate會自動檢測實體的屬性類型
每個類型有三種填法:java類型|hibernate類型|數據庫類型
not-null(可選):配置該屬性(列)是否不能為空 默認值:false
length(可選):配置數據庫中列的長度 默認值:使用數據庫類型的最大長度
-->
<id name="id" >
<!-- generator:主鍵生成策略 -->
<generator class="native"></generator>
</id>
<!-- property元素:除id之外的普通屬性映射
name:填寫屬性名
column(可選):填寫列名
type(可選):填寫列(屬性)的類型 hibernate會自動檢測實體的屬性類型
有三種填法:
type元素
java類型[java.lang.String...]
hibernate類型[string...]
sql-type元素
數據庫類型[varchar...]
not-null(可選):配置該屬性(列)是否不能為空 默認值:false
length(可選):配置數據庫中列的長度 默認值:使用數據庫類型的最大長度
-->
<property name="name" column="name" >
<!-- <column name="name" sql-type="varchar" ></column> -->
</property>
<property name="source" column="source" ></property>
<property name="industry" column="industry" ></property>
<property name="level" column="level" ></property>
<property name="linkman" column="linkman" ></property>
<property name="phone" column="phone" ></property>
<property name="mobile" column="mobile" ></property>
</class>
</hibernate-mapping>

⑤創建hibernate主配置文件 路徑在src下 名字為hibernate.cfg.xml(默認配置)

<?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>
<!-- 數據庫url -->
<property name="hibernate.connection.url">jdbc:mysql:///test</property>
<!-- 數據庫連接用戶名 -->
<property name="hibernate.connection.username">root</property>
<!-- 數據庫連接密碼 -->
<property name="hibernate.connection.password">root</property>
<!--
數據庫方言
不同數據庫sql語法略有區別 指定方言可讓hibernate框架針對區別生成sql語句
sql99標準(通用語法):
DDL 定義語言 庫&表的增刪改查
DCL 控制語言 事務&權限
DQL 查詢語言 數據查詢
DML 操縱語言 數據增刪改
註意:MYSQL在選擇方言時 選擇MySQLDialect 通用狀態
-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

<!-- 將hibernate生成的sql語句打印到控制臺 -->
<property name="hibernate.show_sql">true</property>
<!-- 將hibernate生成的sql語句格式化(語法縮進) -->
<property name="hibernate.format_sql">true</property>
<!--
## auto schema export 自動導出表結構 自動建表
#hibernate.hbm2ddl.auto create 自動建表 每次框架運行都會創建新的表 以前表將會被覆蓋 表數據會丟失(開發時測試使用)
#hibernate.hbm2ddl.auto create-drop 自動建表 每次框架運行結束都會將所有表刪除(開發時測試使用)
#hibernate.hbm2ddl.auto update 自動生成表 如果已經存在不會再生成 如果表有變動 自動更新表數據|字段(對數據庫無數據影響)
#hibernate.hbm2ddl.auto validate 校驗 不生成表 每次啟動會校驗數據庫中表是否正確 校驗失敗報錯
-->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 引入映射文件路徑填寫src下的路徑 -->
<mapping resource="com/java/entity/Customer.hbm.xml" />

</session-factory>
</hibernate-configuration>

測試框架實例

public class Test {
public static void main(String[] args) {
Configuration configuration= new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Customer customer = new Customer();
customer.setName("TestName");
session.save(c);//執行保存
transaction.commit();
session.close();
sessionFactory.close();
}
}

select * from customer;

+----+----------+--------+----------+-------+---------+-------+--------+
| id | name | source | industry | level | linkman | phone | mobile |
+----+----------+--------+----------+-------+---------+-------+--------+
| 1 | TestName | NULL | NULL | NULL | NULL | NULL | NULL |
+----+----------+--------+----------+-------+---------+-------+--------+

hibernate常用api

public class Test {
public static void main(String[] args) {
// 創建框架配置對象
Configuration configuration = new Configuration();

// 讀取指定主配置文件 空參加載方法默認加載src下的hibernate.cfg.xml文件
configuration.configure();

// 讀取指定類映射xml文件 如主配置中已引入映射配置 不需要手動加載
// configuration.addResource(resourceName);
// configuration.addClass(persistentClass);

// 根據配置信息 創建SessionFactory對象 此類線程安全串行運行建議只有一個實例
SessionFactory sessionFactory = configuration.buildSessionFactory();

// 獲得session對象
Session session = sessionFactory.openSession();

// 只獲得操作事務的Transaction對象
// Transaction transaction = session.getTransaction();
// 獲得Transaction對象並開啟事務(建議使用)
Transaction transaction = session.beginTransaction();

/*
* 根據Customer的id去查詢用戶 1l代表Customer的id類型為long值為1
* Customer customer = session.get(Customer.class, 1l);
* System.out.println(customer);
*/

/*
* 增加單個用戶
* Customer customer = new Customer();
* customer.setName("User");
* 執行save
* session.save(customer);
*/

/*
* 獲得要修改的對象
* Customer customer = session.get(Customer.class, 1l);
* 修改成功後的數據
* customer.setName("Test");
* 執行update
* session.update(customer);
*/

/*
* 獲得要刪除的對象
* Customer customer = session.get(Customer.class, 1l);
* 執行delete
* session.delete(customer);
*/

//transaction.rollback();// 回滾事務
transaction.commit();// 提交事務
session.close();// 釋放資源
sessionFactory.close();// 釋放資源
}
}

hibernate工具類

public class HibernateUtils {
private static SessionFactory sessionFactory;

static{
// 默認加載src下的hibernate.cfg.xml創建hibernate配置對象
Configuration configuration= new Configuration().configure();
// 根據配置信息 創建SessionFactory對象
sessionFactory = configuration.buildSessionFactory();
}

//獲得session對象
public static Session openSession(){
// 獲得session
Session session = sessionFactory.openSession();
return session;
}
}

Hibernate基礎實例