hibernate 入门学习

首页 新闻 论坛 问答 博客 招聘 更多 ▼
专栏 文摘 圈子 搜索 您还未登录 ! 我的应用 登录 注册 hhr-michael永久域名 http://hhr-michael.javaeye.com.struts2+hibernate3+spring2读书笔记10( ... | struts2+hibernate3+spring2读书笔记8(OG ... 2010-06-10
struts2+hibernate3+spring2读书笔记9(Hibernate入门)
文章分类:Java编程

                           第10章 Hibernate入门
     本章导读语
           Hibernate是目前很流行的一个ORM框架,它将SQL操作优雅地包装成对象化的操作

一. 搭建Hibernate3开发环境

(1) 建立工程
(2) 将Hibernate加入到工程(实现一个简单的Hibernate查询所需要的jar包包括:antlr-2.7.6.jar、asm.jar、cglib-2.1.3.jar、commons-collections-2.1.1.jar、commons-logging-1.0.4.jar、dom4j-1.6.1.jar、hibernate3.jar、jta.jar、log4j-12.11.jar和mysql-connector-java-5.0.4-ben.jar)

二. 用Hibernate实现用户信息查询

1. 创建数据库

首先创建一个数据库test,并在该数据库中创建用户信息表user,脚本如下:

   
Java代码
1.CREATE DATABASE test;  
2.USE test;  
3.CREATE TABLE user (  
4.id int(11) not null auto_increment,  
5.username varchar(100) DEFAULT Null,  
6.password varchar(100) DEFAULT Null,  
7.PRIMARY KEY(id)  
8.)ENGINE=InnoDB DEFAULT CHARSET=gb2312;  
9.INSERT INTO user (id, username, password)VALUES(1,'amigo','123');  
10.INSERT INTO user (id, username, password)VALUES(2,'hhr','123456789'); 
CREATE DATABASE test;
USE test;
CREATE TABLE user (
id int(11) not null auto_increment,
username varchar(100) DEFAULT Null,
password varchar(100) DEFAULT Null,
PRIMARY KEY(id)
)ENGINE=InnoDB DEFAULT CHARSET=gb2312;
INSERT INTO user (id, username, password)VALUES(1,'amigo','123');
INSERT INTO user (id, username, password)VALUES(2,'hhr','123456789');

2.创建Hibernate配置文件Hibernate.cfg.xml(该文件是中要放在src目录下的)


Java代码
1.   <?xml version='1.0' encoding='utf-8'?>  
2.<!DOCTYPE hibernate-configuration PUBLIC  
3.        "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
4.        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
5. 
6.<hibernate-configuration>  
7.    <session-factory>   
8.        <!-- properties -->  
9.        <property name="connection.url">jdbc:mysql://localhost:3306/test</property>   
10.        <property name="connection.username">root</property>   
11.        <property name="connection.password"></property>  
12.        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>   
13.        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>   
14.           
15.        <!-- mapping files -->    
16.        <mapping resource="amigo/hibernate/model/User.hbm.xml"/>  
17.    </session-factory>  
18.</hibernate-configuration> 
   <?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">

<hibernate-configuration>
    <session-factory>
  <!-- properties -->
  <property name="connection.url">jdbc:mysql://localhost:3306/test</property>
  <property name="connection.username">root</property>
  <property name="connection.password"></property>
  <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
  <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
  
  <!-- mapping files --> 
  <mapping resource="amigo/hibernate/model/User.hbm.xml"/>
 </session-factory>
</hibernate-configuration>
3.创建包:amigo.hibernate.model

4.编写Hibernate映射文件User.hbm.xml(Hibernate之所以能够智能判断实体类和数据表之间的对应关系不,就是因为有XML映射文件,在amigo.hibernate.model包中建立,该文件要和POJO文件要放在同一目录下)

  
Java代码
1. <?xml version="1.0" encoding='UTF-8'?>  
2.<!DOCTYPE hibernate-mapping PUBLIC  
3.                            "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
4.                            "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >  
5.   
6.<hibernate-mapping package="amigo.hibernate.model">  
7.<class name="User" table="user">  
8.    <id name="id" column="id" type="java.lang.Integer">  
9.        <generator class="native"/>  
10.    </id>  
11.      
12.    <property name="username" column="username" type="java.lang.String" not-null="true"/>  
13.    <property name="password" column="password" type="java.lang.String" not-null="true"/>  
14.</class>  
15.</hibernate-mapping> 
 <?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" >
 
<hibernate-mapping package="amigo.hibernate.model">
<class name="User" table="user">
 <id name="id" column="id" type="java.lang.Integer">
  <generator class="native"/>
 </id>
 
 <property name="username" column="username" type="java.lang.String" not-null="true"/>
 <property name="password" column="password" type="java.lang.String" not-null="true"/>
</class>
</hibernate-mapping>5.编写POJO文件User.java(每一个对应的表都有一个映射文件(.hbm.xml文件)和一个POJO文件,User.java为Hibernate进行数据的增、删、改、查操作对象,在amigo.hibernate.model包中建立。)


Java代码
1.package amigo.hibernate.model;  
2. 
3.import java.io.Serializable;  
4. 
5./** 
6. * 用户的pojo对象. 
7. * */ 
8.public class User implements Serializable {  
9.    private static final long serialVersionUID=1L;  
10.      
11.    /**用户id.*/ 
12.    private Integer id;  
13.    /**用户名.*/ 
14.    private String username;  
15.    /**密码.*/ 
16.    private String password;  
17.    public Integer getId() {  
18.        return id;  
19.    }  
20.    public void setId(Integer id) {  
21.        this.id = id;  
22.    }  
23.    public String getUsername() {  
24.        return username;  
25.    }  
26.    public void setUsername(String username) {  
27.        this.username = username;  
28.    }  
29.    public String getPassword() {  
30.        return password;  
31.    }  
32.    public void setPassword(String password) {  
33.        this.password = password;  
34.    }  
35.    public static long getSerialVersionUID() {  
36.        return serialVersionUID;  
37.    }  
38.} 
package amigo.hibernate.model;

import java.io.Serializable;

/**
 * 用户的pojo对象.
 * */
public class User implements Serializable {
 private static final long serialVersionUID=1L;
 
 /**用户id.*/
 private Integer id;
 /**用户名.*/
 private String username;
 /**密码.*/
 private String password;
 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 getPassword() {
  return password;
 }
 public void setPassword(String password) {
  this.password = password;
 }
 public static long getSerialVersionUID() {
  return serialVersionUID;
 }
}
6.编写Hibernate工具类HibernateUtil.java
   类HibernateUtil.java文件用于获得Session,该类包括获得当前的session的方法和获得SessionFactory的方法。


Java代码
1.package amigo.hibernate.model;  
2. 
3.import org.hibernate.HibernateException;  
4.import org.hibernate.Session;  
5.import org.hibernate.SessionFactory;  
6.import org.hibernate.cfg.Configuration;  
7. 
8./** 
9. * Hibernate的工具类 
10. * */ 
11.public class HibernateUtil {  
12.    private static SessionFactory sessionFactory;  
13.      
14.    /**持有一个单态的Session实例.*/ 
15.    private static final ThreadLocal threadLocal=new ThreadLocal();  
16.      
17.    /**持有一个单态的configuration实例.*/ 
18.    private static final Configuration cfg=new Configuration();  
19.      
20.    private static String CONFIG_FILE_LOCATION="/hibernate.cfg.xml";  
21.      
22.    static{  
23.        try{  
24.            sessionFactory = new Configuration().configure(CONFIG_FILE_LOCATION).buildSessionFactory();  
25.              
26.        }catch(Throwable ex){  
27.            //Make sure you log the exception,as it might be swallowed  
28.            System.err.print("Initial SessionFactory creation failed."+ex);  
29.            throw new ExceptionInInitializerError(ex);  
30.              
31.        }     
32.          
33.    }  
34.    public static SessionFactory getSessionFactory(){  
35.        return sessionFactory;  
36.          
37.    }  
38.      
39.    /** 
40.     * 获得当前的Session实例 
41.     * */ 
42.    public static Session currentSession() throws HibernateException{  
43.        Session session = (Session)threadLocal.get();  
44.        if(session==null||session.isOpen()==false){  
45.            if(sessionFactory==null){  
46.                try{  
47.                    cfg.configure(CONFIG_FILE_LOCATION);  
48.                    sessionFactory=cfg.buildSessionFactory();  
49.                }  
50.                catch(Exception e){  
51.                    System.err.print("%%%%Error Creating SessionFactory%%%%"+e.getMessage());  
52.                      
53.                }     
54.            }  
55.            session=sessionFactory.openSession();  
56.            threadLocal.set(session);  
57.        }  
58.        return session;  
59.    }  
60.      
61.} 
package amigo.hibernate.model;

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

/**
 * Hibernate的工具类
 * */
public class HibernateUtil {
 private static SessionFactory sessionFactory;
 
 /**持有一个单态的Session实例.*/
 private static final ThreadLocal threadLocal=new ThreadLocal();
 
 /**持有一个单态的configuration实例.*/
 private static final Configuration cfg=new Configuration();
 
 private static String CONFIG_FILE_LOCATION="/hibernate.cfg.xml";
 
 static{
  try{
   sessionFactory = new Configuration().configure(CONFIG_FILE_LOCATION).buildSessionFactory();
   
  }catch(Throwable ex){
   //Make sure you log the exception,as it might be swallowed
   System.err.print("Initial SessionFactory creation failed."+ex);
   throw new ExceptionInInitializerError(ex);
   
  } 
  
 }
 public static SessionFactory getSessionFactory(){
  return sessionFactory;
  
 }
 
 /**
  * 获得当前的Session实例
  * */
 public static Session currentSession() throws HibernateException{
  Session session = (Session)threadLocal.get();
  if(session==null||session.isOpen()==false){
   if(sessionFactory==null){
    try{
     cfg.configure(CONFIG_FILE_LOCATION);
     sessionFactory=cfg.buildSessionFactory();
    }
    catch(Exception e){
     System.err.print("%%%%Error Creating SessionFactory%%%%"+e.getMessage());
     
    } 
   }
   session=sessionFactory.openSession();
   threadLocal.set(session);
  }
  return session;
 }
 
}
7.编写测试类:HibernateTest.java

 
Java代码
1. package amigo.hibernate.model;  
2. 
3.import java.util.List;  
4. 
5.import org.hibernate.Query;  
6. 
7.import org.hibernate.Session;  
8. 
9.import amigo.hibernate.model.User;  
10. 
11./** 
12. * Hibernate简要测试, 
13. * 获得用户信息表(user)中的用户信息,并打印出来 
14. * */ 
15.public class HibernateTest {  
16. 
17.    /** 
18.     * @param args 
19.     */ 
20.    public static void main(String[] args) throws Exception {  
21.        // TODO Auto-generated method stub  
22.        Session session = HibernateUtil.currentSession();  
23.        session.beginTransaction();  
24.        //创建查询对象  
25.        Query query = session.createQuery("from User");  
26.        //获得用户列表  
27.        List<User> userList = query.list();  
28.        User user = null;  
29.        if(userList!=null&&userList.size()>0){  
30.            for(int i=0;i<userList.size();i++){  
31.                user=(User)userList.get(i);  
32.                System.out.println("i="+i+",id="+user.getId()+",username="+user.getUsername()+",password="+user.getPassword());  
33.                  
34.            }  
35.              
36.        }  
37.        session.getTransaction().commit();//提交  
38.    }  
39. 
40.} 
 package amigo.hibernate.model;

import java.util.List;

import org.hibernate.Query;

import org.hibernate.Session;

import amigo.hibernate.model.User;

/**
 * Hibernate简要测试,
 * 获得用户信息表(user)中的用户信息,并打印出来
 * */
public class HibernateTest {

 /**
  * @param args
  */
 public static void main(String[] args) throws Exception {
  // TODO Auto-generated method stub
  Session session = HibernateUtil.currentSession();
  session.beginTransaction();
  //创建查询对象
  Query query = session.createQuery("from User");
  //获得用户列表
  List<User> userList = query.list();
  User user = null;
  if(userList!=null&&userList.size()>0){
   for(int i=0;i<userList.size();i++){
    user=(User)userList.get(i);
    System.out.println("i="+i+",id="+user.getId()+",username="+user.getUsername()+",password="+user.getPassword());
    
   }
   
  }
  session.getTransaction().commit();//提交
 }

}

本章小结:

     搭建Hibernate的开发环境需要两个步骤:第一步是建立起一个动态工程,第二步是要在工程中加入所要用到的jar组件包,实现一个简单的Hibernate查询所需要的jar包包括:antlr-2.7.6.jar、asm.jar、cglib-2.1.3.jar、commons-collections-2.1.1.jar、commons-logging-1.0.4.jar、dom4j-1.6.1.jar、hibernate3.jar、jta.jar、log4j-12.11.jar和mysql-connector-java-5.0.4-ben.jar
     要实现用户信息的查询功能,需要5个步骤,分别为:
1) 编写Hibernate的核心配置文件Hibernate.cfg.xml,该文件中配置数据库连接等信息。
2) 编写user表的映射文件User.hbm.xml文件及其对应的POJO文件User.java。
3) 编写Hibernate的工具类HibernateUtil.java文件,该类中包括了获得Session等的方法。
4) 编写实现Hibernate查询的测试的测试类HibernateTest.java文件。
5) 通过使用Hibernate使得Java开发人员不必使用烦琐的SQL语句来完成数据库的操作,而只需要简便地使用面向对象编程思想来对数据库进行操作,减轻了开发人员工作。

struts2+hibernate3+spring2读书笔记10( ... | struts2+hibernate3+spring2读书笔记8(OG ... 09:41浏览 (78)评论 (0)分类: struts+hibernate+spring學習相关推荐评论发表评论
 
表情图标
字体颜色: 标准深红红色橙色棕色黄色绿色橄榄青色蓝色深蓝靛蓝紫色灰色白色黑色 字体大小: 标准1 (xx-small)2 (x-small)3 (small)4 (medium)5 (large)6 (x-large)7 (xx-large) 对齐: 标准居左居中居右
提示:选择您需要装饰的文字, 按上列按钮即可添加上相应的标签.您还没有登录,请登录后发表评论(快捷键 Alt+S / Ctrl+Enter)

hhr_michael
浏览: 4757 次
性别:
来自: 惠州

详细资料 留言簿
搜索本博客
 
最近访客 >>更多访客
qljobswpfwupengfeiwpf土豆皮mianhuatangone.博客分类
■全部博客 (45)
■java學習 (15)
■PHP學習 (2)
■javascript (12)
■vba excel (1)
■英語學習 (1)
■k3安裝與配置 (1)
■html學習 (1)
■struts+hibernate+spring學習 (11)
■数据库学习 (1)
我的留言簿 >>更多留言
■漂过
-- by xw302
其他分类
■我的收藏 (0)
■我的论坛主题贴 (0)
■我的所有论坛贴 (0)
■我的精华良好贴 (0)
最近加入圈子
存档
■2010-06 (7)
■2010-05 (6)
■2010-03 (1)
■更多存档...
最新评论
■struts2+hibernate3+sprin ...
恩,LZ,谢谢了,那我还是练习把SSh的例子改成S2sh的吧,呵呵,哎,现在s2s ...
-- by lixia0417
■struts2+hibernate3+sprin ...
哥们,你好,这本书着重s2sh的各个部分开发,而整合的例子不是很多,只有三章是整合 ...
-- by hhr_michael
■struts2+hibernate3+sprin ...
对,哥们,问一下,这本书中关于S2SH整合开发的例子多吗,就是用三个框架一起开发的 ...
-- by lixia0417
■struts2+hibernate3+sprin ...
谢谢提醒,由于只是着重校验的过程,所以这代码没有在struts.xml中配置对应的 ...
-- by hhr_michael
■struts2+hibernate3+sprin ...
楼主写得不错,受教了,  不过觉得<code> public Stri ...
-- by lixia0417
评论排行榜
■struts2+hibernate3+spring2读书笔记4(数据 ...
■js生成行,刪除行,復制行
■struts2+hibernate3+spring2读书笔记11( ...
■JSP环境配置使用fckeditor
■struts2+hibernate3+spring2读书笔记10( ...

 

[什么是RSS?]
.
--------------------------------------------------------------------------------
声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。若作者同意转载,必须以超链接形式标明文章原始出处和作者。
? 2003-2010 JavaEye.com. All rights reserved. 上海炯耐计算机软件有限公司 [ 沪ICP备05023328号 ] .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值