hibernate配置檔案解釋以及增刪改查
阿新 • • 發佈:2018-12-01
配置檔案
hibernate核心配置檔案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> <!-- 1. 資料庫相關資訊 --> <!--使用者名稱--> <property name="connection.username">root</property> <!--使用者密碼--> <property name="connection.password">root</property> <!--資料庫連結地址--> <property name="connection.url">jdbc:mysql://localhost:3306/poi?useUnicode=true&characterEncoding=UTF-8</property> <!--資料庫驅動類--> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <!--資料庫方言資訊--> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 配置本地事務(No CurrentSessionContext configured!) --> <property name="hibernate.current_session_context_class">thread</property> <!-- 2. 除錯相關 --> <!--是否顯示資料庫語句在專案部署後要設定為fals提高 專案執行效率--> <property name="show_sql">true</property> <!--格式化sql語句--> <property name="format_sql">true</property> <!-- 3. 新增實體對映檔案 --> <mapping resource="User.hbm.xml"/> </session-factory> </hibernate-configuration>
實體對映檔案(*.hbm.xml) 有多少實體類就有多少的*.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"> <hibernate-mapping> <!--name是實體類的全路徑限定名 table 是資料庫名字--> <class name="com.zking.entity.User" table="t_hibernate_user"> <!--name為實體類屬性 type為實體類的資料型別 column 資料庫列名--> <id name="id" type="java.lang.Integer" column="id"> <!--主鍵自增長用的類--> <generator class="increment" /> </id> <!--屬性--> <property name="userName" type="java.lang.String" column="user_name"> </property> <property name="userPwd" type="java.lang.String" column="user_pwd"> </property> <property name="realName" type="java.lang.String" column="real_name"> </property> <property name="sex" type="java.lang.String" column="sex"> </property> <property name="birthday" type="java.sql.Date" column="birthday"> </property> <!--insert="false" update="false"不維護 由hibernate自動處理--> <property insert="false" update="false" name="createDatetime" type="java.sql.Timestamp" column="create_datetime"> </property> <property name="remark" type="java.lang.String" column="remark"> </property> </class> </hibernate-mapping>
使用hibernate實現增刪改查
實體類
package com.zking.entity; import java.io.Serializable; public class User implements Serializable { private static final long serialVersionUID = -3363120264501521428L; private Integer id; private String userName; private String userPwd; private String realName; private String sex; private java.sql.Date birthday; private java.sql.Timestamp createDatetime; private String remark; public User() { super(); } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserPwd() { return userPwd; } public void setUserPwd(String userPwd) { this.userPwd = userPwd; } public String getRealName() { return realName; } public void setRealName(String realName) { this.realName = realName; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public java.sql.Date getBirthday() { return birthday; } public void setBirthday(java.sql.Date birthday) { this.birthday = birthday; } public java.sql.Timestamp getCreateDatetime() { return createDatetime; } public void setCreateDatetime(java.sql.Timestamp createDatetime) { this.createDatetime = createDatetime; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } @Override public String toString() { return "User [id=" + id + ", userName=" + userName + ", userPwd=" + userPwd + ", realName=" + realName + ", sex=" + sex + ", birthday=" + birthday + ", createDatetime=" + createDatetime + ", remark=" + remark + "]"; } }
這裡寫一個測試用來增加
1.對hibernate.config.xml建模
2.通過建模獲得的config檔案類,獲取所配置的sessionfactory
3.獲取session會話
4.開啟事務
5.操作資料庫
6.提交事務
7.關閉session會話
public static void main(String[] args) {
/**
* 1.對hibernate.config.xml建模
* 2.通過建模獲得的config檔案類,獲取所配置的sessionfactory
* 3.獲取session會話
* 4.開啟事務
* 5。操作資料庫
* 6.提交事務
* 7.關閉session會話
*/
// 1.對hibernate.config.xml建模
Configuration configure = new Configuration().configure("hibernate.cfg.xml");
// 2.通過建模獲得的config檔案類,獲取所配置的sessionfactory
SessionFactory sessionFactory = configure.buildSessionFactory();
// 3.獲取session會話
Session session = sessionFactory.openSession();
//4.開啟事務
Transaction transaction = session.beginTransaction();
//5.操作資料庫
User user=new User();
user.setBirthday(new Date(new java.util.Date().getTime()));
user.setRealName("123");
user.setRemark("123");
user.setSex("男");
user.setUserName("123");
user.setUserPwd("213");
//增加操作
session.save(user);
//6.提交事務
transaction.commit();
//7.關閉會話
session.close();
}
刪除
User user=new User();
user.setId(3);
//刪除使用者
session.delete(user);
查詢
//查詢資料庫
List<User> list = session.createQuery("from User").list();
for (User o: list) {
System.out.println(o);
}
效果
修改
User user = session.get(User.class, 2);
user.setRealName("花花");
System.out.println(user.getRealName());
自動生成的sql語句
結果
SessionFactory物件的建立代價很昂貴,它是執行緒安全的物件,它為所有的應用程式執行緒所共享。它只建立一次,通常是在應用程式啟動的時候,由一個Configuraion的例項來建立
Session物件的建立代價比較小,是非執行緒安全的,對於單個請求,單個會話、單個的 工作單元而言,它只被使用一次,然後就丟棄。只有在需要的時候,一個Session物件 才會獲取一個JDBC的Connection(或一個Datasource) 物件,因此假若不使用的時候它不消費任何資源。
Hibernate3.3.2版本中getSession().connection()已被棄用,hibernate4中官方推薦使用Session doWork()方法進行jdbc操作