在網上找了很多Hibernate的相關教程,大多數都是結合WEB服務器的,自己寫一個單獨的示例在Eclipse下直接運行,不需要自己寫ANT腳本,不需要結合web服務器。但是需要MYSQL數據庫-_-
首先要學會如何使用Eclipse,然後要下載Hibernate需要的所有JAR文件,最後安裝好MYSQL
准備開始!
第一步,我們要創建一個表 結構如下
+-----------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------+--------------+------+-----+---------+----------------+ | id| int(11) | NO| MUL | NULL| auto_increment | | title| varchar(400) | YES | | NULL|| | content | text | YES | | NULL|| | time | datetime | YES | | NULL|| +-----------+--------------+------+-----+---------+----------------+
第二步,在Eclipse中創建一個JAVA項目(我在項目中用到的包名是cn.com.nick.hbm)。編寫News.java類,這個類對應了數據庫中的表
package cn.com.nick.hbm; import java.util.Date; public class News { private int id; private String title; private String content; private Date date; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } }
第三步,配置對應關系 保存為News.hbm.xml文件 與News類在同一目錄下(並不是一定要在同一目錄下,為了方便暫時先放在這裡) "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
第四步,配置hibernate.cfg.xml 注意這個名字不能改,並且要放到SRC的跟路徑下(這裡要注意,如果放錯地方示例中的方法是找不到這個文件的) PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
true com.mysql.jdbc.Driver thread jdbc:mysql://localhost:3306/test root 123 org.hibernate.dialect.MySQLDialect my
最後創建一個測試類 Test.java 代碼如下,裡邊有注釋說明
package cn.com.nick.hbm; import java.util.Date; import java.util.List; import org.hibernate.HibernateException; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.classic.Session; public class Test { private static final SessionFactory sessionFactory; static { try { // 這裡創建了SessionFactory 將hibernate.cfg.xml文件放到SRC的跟路徑下 // Hibernate會自己找到 sessionFactory = new Configuration().configure() .buildSessionFactory(); } catch (Throwable ex) { // Make sure you log the exception, as it might be swallowed System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } } public static SessionFactory getSessionFactory() { return sessionFactory; } public static void main(String[] args) { // 實例化一個新的News對象,並填充內容 News news = new News(); news.setTitle("測試標題"); news.setContent("添加測試內容"); news.setDate(new Date()); Test t = new Test(); // 調用Test類下的存儲方法,相當於執行INSERT語句 // t.Save(news); // 調用查詢方法,顯示數據庫的內容 t.select(); // 調用更新方法 // t.update(); // 調用刪除 // t.delete(); } /** * 一個簡單的添加數據方法 * @param news news對象,這個對象將被添加到庫中 */ public void Save(News news) { try { //獲取hibernate的session Session session = Test.getSessionFactory().getCurrentSession(); session.beginTransaction(); //這裡只需要調用save方法把news對象傳進去就插入成功了! session.save(news); session.getTransaction().commit(); } catch (HibernateException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 查詢方法 */ public void select() { try { Session session = Test.getSessionFactory().getCurrentSession(); session.beginTransaction(); //注意!!!這裡的 News 不是表名稱! 是對象名所以要注意大小寫 String sql=" from News"; //帶條件的查詢 //String sql="from News where id=1"; //用session.createQuery()執行HQL查詢語句 Listl = session.createQuery(sql).list(); //在控制台循環輸出 for (News n : l) { System.out.println(n.getId()); System.out.println(n.getTitle()); System.out.println(n.getContent()); System.out.println(n.getDate()); System.out.println("=============="); } session.getTransaction().commit(); } catch (HibernateException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 更新方法 */ public void update() { try { Session session = Test.getSessionFactory().getCurrentSession(); session.beginTransaction(); //定義了要裝載對象的ID Integer id = 1; //用load方法裝載一個對象進來 News n = (News) session.load(News.class, new Integer(id)); //重新設置這個對象的標題 n.setTitle("更新後標題"); //用update方法更新這個對象 session.update(n); session.getTransaction().commit(); } catch (HibernateException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void delete() { try { Session session = Test.getSessionFactory().getCurrentSession(); session.beginTransaction(); //定義了要裝載對象的ID Integer id = 6; //用load方法裝載一個對象進來 News n = (News) session.load(News.class, new Integer(id)); //用delete方法刪除這個對象 session.delete(n); session.getTransaction().commit(); } catch (HibernateException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
好啦,直接運行Test類看一下效果吧!