Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 三大框架SSH成長路程(二)

三大框架SSH成長路程(二)

編輯:關於Android編程

hibernate是非常典型的持久層框架,持久化的思想是非常值得我們學習和研究的。這篇博文,我們主要以實例的形式學習Hibernate,不深究Hibernate的思想和原理,否則,一味追求,苦學思想和原理,到最後可能什麼也學不會,從實踐入手,熟能生巧,思想和原理自然而然領悟。

這篇博文,我們從實踐角度,動手搭建一個簡單的Hibernate實例。

一、開發環境

     Win8 + jdk1.7 + MyEclipse + Tomcat5.0 + MySQL
  說明:其實Hibernate是非常獨立的框架,根本不需要MyEclipse,Eclipse,Tomcat,Log4J等,他們只不過是能滿足我們其他的需求,才把他們引進來的。

二、下載文件

你需要Java SDK、 Hibernate包、和JDBC Driver。

1、Hibernate包下載地址:
http://prdownloads.sourceforge.net/hibernate/?sort_by=date&sort=desc

2、JDBC Driver根據你的數據庫來定,一般database官網都有。Hibernate支持常用的數據庫,比如 MySQL, Oracle等等。這兩個數據庫是現在比較常用的,都有JDBC Driver:

Oracle JDBC Driver下載地址(下載前必須同意Oracle協議書)
http://otn.oracle.com/software/htdocs/distlic.html?/software/tech/java/sqlj_jdbc/htdocs/jdbc9201.html

MySQL JDBC Driver下載地址
mysql.com/downloads/connector/j/3.0.html">http://dev.mysql.com/downloads/connector/j/3.0.html

三、所需jar包

這裡寫圖片描述 <喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPjxjb2RlPmhpYmVybmF0ZTMuamFyIEhpYmVybmF0ZbXEusvQxLD8PGJyIC8+DQpkb200ai0xLjYuMS5qYXIgZG9tNGq2wciheG1szsS8/rD8PGJyIC8+DQpteXNxbC1jb25uZWN0b3ItSmF2YS0zLjEuMTMtYmluLmphciBNeVNRTLXEamRiY8f9tq+w/DxiciAvPg0KSGliZXJuYXRltcTX99PDo7rIw87Sw8fS1MPmz/K21M/ztcS3vcq9u/LLvM6swLS/vMLH1PXDtM/yudjPtdDNyv2+3b/itObIocr9vt2ho8v80OjSqtPrz+DTprXEyv2+3b/itPK9u7XAo6zL+dLU0OjSqs/g06a1xGpkYmPH/bavoaPO0sPHtcRkYXRhYmFzZdPDtcTKx015U1FMo6zL+dLU0OjSqtL9yOtNeVNRTLXEamRiY8f9tq+hozxiciAvPg0KbG9nNGotMS4yLjExLmphciC8x8K8yNXWvr/yvNw8YnIgLz4NCtPJ09psb2c0arXEvMfCvMjV1r6xyGpka9fUtPi1xLzHwrzI1da+uabE3Lj8vNPDwLnbo6y88rWlo6zS18Xk1sPI1da+vLax8KOssePT2rX3ytSjrM7Sw8fRodTxyrnTw2xvZzRqoaM8L2NvZGU+PC9wPg0KPHA+PGNvZGU+sdjQ69Kq0v3I67XEamFyo7o8YnIgLz4NCmNvbW1vbnMtbG9nZ2luZy0xLjAuNC5qYXIgs+nP87XEyNXWvrzHwry/8rzcPGJyIC8+DQqxvsntsqLDu9PQyrXP1tXm1f21xNC0yNXWvsTcwaajqL+0sPy94bm5vLS/ydaqtcCjqbb4yse94brPxuTL/LXEyNXWvs+1zbPI50xvZzRqu/LV32phdmGxvsnttcRqYXZhLnV0aWwubG9nZ2luZ9f3zqrI1da+yuSz9tfpvP6jrMC0yrXP1sjV1r68x8K8tcS5psTcoaM8YnIgLz4NCmNvbW1vbnMtY29sbGVjdGlvbnMtMi4xLjFqYXIguPfW1ryvus/A4LrNvK+6z7mkvt/A4LXEt+LXsDxiciAvPg0KY2dsaWItMi4xLjMuamFyILavzKy0+sDto6xIaWJlcm5hdGXTw8v8wLTKtc/WUE/X1r3awuu1xLavzKzJ+rPJPGJyIC8+DQphc20uamFyIGNnbGli0OjSqtLAwLW1xGphcqOsQVNN19a92sLrv+I8L2NvZGU+PC9wPg0KPHA+PGNvZGU+16Kjutf3zqqz9dGn1d+yu8zhs6vV4tbW1/a3qKOs1rvQ6NKqvatoaWJlcm5hdGXL+dKq0sDAtbXEtdrI/be9amFysPy2vNL9yOu8tL/Jo6y38dTy1/bG5Mv7yrXA/cqxu+GxqE5vQ2xhc3NEZWZGb3VuZEVycm9ytcS07c7zo6y94r72t72wuKO61rvQ6L2rttTTpmphctL9yOu8tL/JoaPTydPa1eLKx9K7uPa88rWlyrXA/aOsvfa99tDo0qrS/cjr1eLQqWphcqGjPC9jb2RlPjwvcD4NCjxwPjxjb2RlPsvEoaK0+sLr1bnKvjwvY29kZT48L3A+DQo8cD48Y29kZT4xoaLU2klERdbQtLS9qGphdmHP7sS/o6ixyL3PvPK1pbK71NnR3cq+o6k8L2NvZGU+PC9wPg0KPHA+PGNvZGU+MqGitLS9qHNvdXJjZSBmb2xkZXKjrMP8w/vOqkhpYmVybmF0ZTOjrNTaSGliZXJuYXRlz8LU2M7EvP7W0NXStb3O0sPHy/nQ6NKqtcTI/bj2xeTWw87EvP66zcv509BqYXKw/KOsv72xtMv50OhqYXLOxLz+o6y5ub2o0sDAtbD8PC9jb2RlPjwvcD4NCjxwPjxjb2RlPjxpbWcgYWx0PQ=="這裡寫圖片描述" src="/uploadfile/Collfiles/20161015/201610150947082342.png" title="\" />

3、提供hibernate.cfg.xml文件,完成基本配置

4、寫代碼

(1)建立實體類User.java

package com.liang.hibernate;  

import java.util.Date;  

public class User {  
    private String id;  
    private String name;  
    private String password;  
    private Date createTime;  
    private Date expireTime;  

    public String getId() {  
        return id;  
    }  
    public void setId(String id) {  
        this.id = id;  
    }  
    public String getName() {  
        return name;  
    }  
    public void setName(String name) {  
        this.name = name;  
    }  
    public String getPassword() {  
        return password;  
    }  
    public void setPassword(String password) {  
        this.password = password;  
    }  
    public Date getCreateTime() {  
        return createTime;  
    }  
    public void setCreateTime(Date createTime) {  
        this.createTime = createTime;  
    }  
    public Date getExpireTime() {  
        return expireTime;  
    }  
    public void setExpireTime(Date expireTime) {  
        this.expireTime = expireTime;  

(2)提供User.hbm.xml文件,完成實體類映射

  
  
  
      
      
          
              
              
          
          
          
          
          
      

  

(3)將User.hbm.xml文件加入到hibernate.cfg.xml文件中

  
      
          
        com.mysql.jdbc.Driver  
          
        jdbc:mysql://localhost:3306/hibernate_first  
          
        root  
          
        123456  
          
        org.hibernate.dialect.MySQLDialect  

          
          
      
  

(4)編寫工具類ExportDB.java,將hbm生成ddl,也就是hbm2ddl

package com.liang.hibernate;  

import org.hibernate.cfg.Configuration;  
import org.hibernate.tool.hbm2ddl.SchemaExport;  

/** 
 * 將hbm生成ddl 
 * @author liang 
 * 
 */  
public class ExportDB{    
    public static void main(String[]args){  
        //默認讀取hibernate.cfg.xml文件  
        Configuration cfg = new Configuration().configure();  
        ////生成並輸出sql到文件(當前目錄)和數據庫  
        SchemaExport export = new SchemaExport(cfg);  
        export.create(true, true);  
    }  

測試之前,要提前建立數據庫hibernate_first,測試如下:

控制台打印的SQL語句:

drop table if exists User  
create table User (id varchar(255) not null, name varchar(255), password varchar(255), createTime date, expireTime date, primary key (i

數據庫表結構:

這裡寫圖片描述

(5)建立客戶端類Client,添加用戶數據到mySQL

package com.liang.hibernate;  

import java.util.Date;  

import org.hibernate.Session;  
import org.hibernate.SessionFactory;  
import org.hibernate.cfg.Configuration;  

public class Client {  
    public static void main(String[]args){  
        //讀取hibernate.cfg.xml文件  
        Configuration cfg = new Configuration().configure();  
        //建立SessionFactory  
        SessionFactory factory =cfg.buildSessionFactory();  

        //取得session  
        Session session = null;  

        try{  
            //開啟session  
            session = factory.openSession();  
            //開啟事務  
            session.beginTransaction();  

            User user = new User();  
            user.setName("jiuqiyuliang");  
            user.setPassword("123456");  
            user.setCreateTime(new Date());  
            user.setExpireTime(new Date());  
            //保存User對象  
            session.save(user);  

            //提交事務  
            session.getTransaction().commit();  

        }catch(Exception e){  
            e.printStackTrace();  
            //回滾事務  
            session.getTransaction().rollback();  
        }finally{  
            if(session != null){  
                if(session.isOpen()){  
                    //關閉session  
                    session.close();  
                }  
            }  
        }  
    }  
}  

右鍵debug運行,測試完成之後,我們查詢一下測試結果:

這裡寫圖片描述

5、為了在調試過程中能觀察到Hibernate的日志輸出,最好加入log4j.properties配置文件、在CLASSPATH中新建log4j.properties配置文件或將該配置文件拷貝到src下,便於程序調試。
內容如下:

### direct log messages to stdout ###  
log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
log4j.appender.stdout.Target=System.out  
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n  

### direct messages to file hibernate.log ###  
#log4j.appender.file=org.apache.log4j.FileAppender  
#log4j.appender.file.File=hibernate.log  
#log4j.appender.file.layout=org.apache.log4j.PatternLayout  
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n  

### set log levels - for more verbose logging change 'info' to 'debug' ###  

log4j.rootLogger=warn, stdout  

配置完成後,項目結構如下圖所示:

這裡寫圖片描述

五、最後

  從上面的簡單實例可以看到,我們只是使用Hibernate對User這一個實體進行了映射,比較簡單,但是完全不符合實際。如何像關系型數據庫一樣表示多種關聯關系,例如:一對一,一
  對多,多對多等等,我們還需要深入。下篇博文,我們介紹Hibernate的基本映射原理以及關聯關系映射。
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved