自己學軟件編程不久,在學習中總結和記錄啦一些學習的入門知識!有不足之處,請批評指正。
Hibernate入門指南
Mike zeseler
Hibernate的5個核心接口:
Session
SessionFactory
Transaction
Query
Configuration
對象“持久化”狹義理解:是把域對象永久保存到數據庫中。
持久化和數據庫相關的各項操作:
保存:把域對象永久保存到數據庫中
更新:更新數據庫中域對象發的狀態。
刪除: 從數據庫中刪除一個域對象。
加載:根據特定的oid(對象標示符)把一個域對象從數據庫加載到內存中。
查詢:根據特定的查詢條件,把符合查詢條件的一個或多個域對象從數據庫加載到內存中。
一:新建項目web java項目都可以
New——》project——》webproject——》T_user
截圖如:

為項目添加hibernateCapabilitise截圖如

點擊next-à如圖:

點擊--ànext如圖:這一步需要詳細的配置:

一:一般我們需要選擇mysql數據庫截圖:

這里的配置需要給大家詳細的說下:具體情況操作完后慢慢詳細講解:myeclipse Database Explorer的使用:

Java 前面有個窗口帶+號的標示,點擊下就可以出現一個下拉菜單;看看有沒有Database Explorer這項,沒有的話點擊other進行下一步:
出現一個選框:我們選擇Database Explore這項:
點擊ok 完成。
Database Explore的界面截圖:
我們來連接一個數據庫。Myeclipse Derby 是myeclipse自帶的一個數據庫,它比mysql支持更好的事物(trasaction)。
右擊鼠標 new一個 newDatabase Connection Driver
這里需要天相關的配置:
Driver template 選擇你裝好的數據庫名稱:我以mysql為例:
Driver name: mysql55 隨你的意思取就ok。
Connection url:jdbc:mysql://<hostname>[<:3306>]/<dbname>
我用的是mysql5則是:jdbc:mysql://localhost:3306/test.
(連接數據庫用戶名)username:root
Password: 我的密碼為空();
Driver jars 驅動類,不同的數據庫有不同的jar包,我用的是mysqljar包。
點擊Save password,Connection to database on我們不需要理會,配置好的的截圖:
點擊next—》點擊finish ok完成,以上就是Database Explore。Easy吧。^_^
點擊next—》下一步截圖:
去掉create SessionFactory class 點擊finish完成。
完成后的截圖
一般的hibernate.cfg.xml配置文件:
<?xml version="1.0" encoding="gbk"?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!—顯示實際操作數據庫時的sql(這里是mysql數據庫) -->
<property name="show_sql">true</property>
<!—將顯示的sql排版,方便觀看-->
<property name="format_sql">true</property>
<!—sql方言,這里設定的是mysql -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!—JDBC驅動類-->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- JDBC URL -->
<property name="connection.url">jdbc:mysql://localhost/demo</property>
<!—連接數據庫用戶名 -->
<property name="connection.username">root</property>
<!—數據庫密碼(我的數據庫密碼為空) -->
<property name="connection.password"></property>
<!—下面的是數據庫要映射的文件-->
</session-factory>
</hibernate-configuration>
|
建表:建表語句
Create table T_user(
id bigint not null auto_increment,
name varchar(255),
age bigint,
primary key(id)
)engine=myisam default charset=gbk//支持中文防止插入數據出現亂碼
|
Hibernate.cfg.xml實例
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>
<session-factory>
<!-- 連接數據可的用戶名 -->
<property name="connection.username">root</property>
<!-- jdbc url -->
<property name="connection.url">
jdbc:mysql://localhost:3306/test
</property>
<!-- 數據庫方言(sql方言)-->
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<!-- 連接數據庫的名字-->
<property name="myeclipse.connection.profile">mysql5</property>
<!-- 接數據驅動類-->
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<!-- 數據庫映射文件-->
<mapping resource="dao/TUser.hbm.xml" />
</session-factory>
</hibernate-configuration>
|
首先咋們建立一張表:如上的建表語句:打開database explorer連接數據庫,右擊Connected to mysql5,選擇New SQL Editor,寫上建表語句
截圖如下;
點擊綠色的三角符號,建表ok啦!
Ok進行下一步:在建好的表上右擊:選擇Hibernate Reverse Engineering,這里需注意我進行這步之前首先一定要關掉如上圖的sql Editor.
Java src folder: 點擊Browser
選擇T_user下的目錄src:點擊ok
進行下一項:java pakage 我們需填上個dao,名稱無所謂,但是我們要讓別人理解,更容易清楚我們的編程設計思想,編程不是讓別人看不懂,自己很牛,但是我們的編碼的最終思想是越來越簡單,不是所謂的越搞越復雜,讓別人更了解我們的程序。
具體的截圖如下:
點擊下一步
這步其實沒有什么可以填的,我們直接下一步:
需要注意的是
1:include referenced table(A->B)
2:include referenced table(A<-B)
我們需要勾選他們:
好一切ok啦^_^。咋們點擊finish完成。
生成的目錄

所限我們需要改的是:Tuser.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="dao.TUser" table="t_user" catalog="test">
<id name="id" type="java.lang.Long">
<column name="id" />
<generator class="identity" />
</id>
<property name="name" type="java.lang.String">
<column name="name" />
</property>
<property name="age" type="java.lang.Long">
<column name="age" />
</property>
</class>
</hibernate-mapping>
|
<generator class="identity" />在各項需要改成前面的或是identity。
BaseHibernateDAO
package dao;
import org.hibernate.Session;
/**
*Dataaccessobject(DAO)fordomainmodel
*@authorMyEclipsePersistenceTools
*/
publicclass BaseHibernateDAO implements IBaseHibernateDAO {
public Session getSession() {
return HibernateSessionFactory.getSession();
}
}
|
|
IBaseHibernateDAO
package dao;
import org.hibernate.Session;
/**
*Dataaccessinterfacefordomainmodel
*@authorMyEclipsePersistenceTools
*/
publicinterface IBaseHibernateDAO {
public Session getSession();
}
|
HibernateSessionFactory
TUser
package dao;
/**
*TUsergeneratedbyMyEclipsePersistenceTools
*/
publicclass TUser implements java.io.Serializable {
// Fields
private Long id;
private String name;
private Long age;
// Constructors
/**defaultconstructor*/
public TUser() {
}
/**minimalconstructor*/
public TUser(Long id) {
this.id = id;
}
/**fullconstructor*/
public TUser(Long id, String name, Long age) {
this.id = id;
this.name = name;
this.age = age;
}
// Property accessors
public Long getId() {
returnthis.id;
}
publicvoid setId(Long id) {
this.id = id;
}
public String getName() {
returnthis.name;
}
publicvoid setName(String name) {
this.name = name;
}
public Long getAge() {
returnthis.age;
}
publicvoid setAge(Long age) {
this.age = age;
}
}
|
TUserDAO
測試代碼:HibernateDemo
package onlyfun.caterpillar;
import org.hibernate.Session;
import org.hibernate.Transaction;
import dao.HibernateSessionFactory;
import dao.TUser;
publicclass HibernateDemo {
publicstaticvoid main(String[] args) {
TUser tuser = new TUser();
tuser.setName("hibernate測試");
tuser.setAge(new Long(23));
// 開啟Session,相當於開啟JDBC的Connection
Session session = HibernateSessionFactory.getSessionFactory().openSession();
// Transaction表示一組會話操作
Transaction tx= session.beginTransaction();
// 將物件映射至資料庫表格中儲存
session.save(tuser);
tx.commit();
session.close();
System.out.println("新增資料OK!請先用MySQL觀看結果!");
HibernateSessionFactory.shutdown();
}
}
|
測試結果:
測試ok,呵呵。
還有個實例大家練習下我這里只給出建表語句:或測試代碼,其他的與上面的方法一樣:
建表語句:
Create table Student(
Id int not null auto_increment,
Uername varchar(200) not null,
Password vachar(20) not null,
Age int,
Primary key (id)
)engine = myisam default charset=gbk
|
測試代碼:
package HibernateTransaction;
import java.util.List;
import dao.Student;
import dao.StudentDAO;
publicclass HibernateDAOTest {
privatestatic Object results;
publicstaticvoid main(String [] args){
//實例化dao
StudentDAO dao = new StudentDAO();
//打開事務
org.hibernate.Transaction tran = dao.getSession().beginTransaction();
//生成普通java類
Student bean = new Student();
//設置屬性
bean.setUername("struts測試");
bean.setPassword("1234");
bean.setAge(100);
//插入數據
dao.save(bean);
//提交事務
tran.commit();
List<Student> results= dao.findAll();
for(Student o : results) {
System.out.println("編號:"+o.getId());
System.out.println("姓名:"+o.getId());
}
dao.getSession().close();
}
}
|