跨向Hibernate(一)

原创 2005年04月27日 13:20:00
从读Hibernate的手册开始了学习Hibernate的历程。
《与猫同乐》----乐的有些尴尬,因为在99%时,测试用了普通Java类,长时间滞留不前,把我的猫忘在门外了
 
1、配置数据源。
在Tomcat5中,修改conf/tomcat-users.xml文件,加入<user username="admin" password="admin" roles="admin"/>。启动Tomcat,进入管理页面,添加数据源,最终有如下信息加入项目的配置文件中:
  <Resource name="jdbc/quickstart" type="javax.sql.DataSource"/>
  <ResourceParams name="jdbc/quickstart">
    <parameter>
      <name>maxWait</name>
      <value>5000</value>
    </parameter>
    <parameter>
      <name>maxActive</name>
      <value>4</value>
    </parameter>
    <parameter>
      <name>password</name>
      <value>secret</value>
    </parameter>
    <parameter>
      <name>url</name>
      <value>jdbc:mysql://localhost/test</value>
    </parameter>
    <parameter>
      <name>driverClassName</name>
      <value>com.mysql.jdbc.Driver</value>
    </parameter>
    <parameter>
      <name>maxIdle</name>
      <value>2</value>
    </parameter>
    <parameter>
      <name>username</name>
      <value>quickstart</value>
    </parameter>
  </ResourceParams>
 
2、添加Hibernate库
把所需的库加入类路径中,或是项目Lib中
 
3、编写hibernate.cfg.xml文件,置于项目编译后的根目录下(在Eclipse或其他IDE中,放在源文件根目录下即可),内容类似下示:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration
    PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
 
<hibernate-configuration>
 
    <session-factory>
 
        <property name="connection.datasource">java:comp/env/jdbc/quickstart</property>
        <property name="show_sql">false</property>
        <property name="dialect">net.sf.hibernate.dialect.PostgreSQLDialect</property>
 
        <!-- Mapping files -->
        <mapping resource="Cat.hbm.xml"/>
 
    </session-factory>
 
 
</hibernate-configuration>
 
4、编写相应的映射类和配置文件,并放在同一目录下,例如:
 
package net.sf.hibernate.examples.quickstart;
 
public class Cat {
 
    private String id;
    private String name;
    private char sex;
    private float weight;
 
    public Cat() {
    }
 
    public String getId() {
        return id;
    }
 
    private void setId(String id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public char getSex() {
        return sex;
    }
 
    public void setSex(char sex) {
        this.sex = sex;
    }
 
    public float getWeight() {
        return weight;
    }
 
    public void setWeight(float weight) {
        this.weight = weight;
    }
 
}
 
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping
    PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
 
<hibernate-mapping>
 
    <class name="net.sf.hibernate.examples.quickstart.Cat" table="CAT">
 
        <!-- A 32 hex character is our surrogate key. It's automatically
            generated by Hibernate with the UUID pattern. -->
        <id name="id" type="string" unsaved-value="null" >
            <column name="CAT_ID" sql-type="char(32)" not-null="true"/>
            <generator class="uuid.hex"/>
        </id>
 
        <!-- A cat has to have a name, but it shouldn' be too long. -->
        <property name="name">
            <column name="NAME" length="16" not-null="true"/>
        </property>
 
        <property name="sex"/>
 
        <property name="weight"/>
 
    </class>
 
</hibernate-mapping>

*5、编写自定义SessionFactory类,例如:(此为Hibernate自带的示例)
 
HibernateUtil.java
 
package net.sf.hibernate.examples.quickstart;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
 
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Session;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.cfg.Configuration;
 
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
 
public class HibernateUtil {
 
    private static Log log = LogFactory.getLog(HibernateUtil.class);
 
    private static final SessionFactory sessionFactory;
 
    static {
        try {
            // Create the SessionFactory
            sessionFactory = new Configuration().configure().buildSessionFactory();
        } catch (Throwable ex) {
            log.error("Initial SessionFactory creation failed.", ex);
            throw new ExceptionInInitializerError(ex);
        }
    }
 
    public static final ThreadLocal session = new ThreadLocal();
 
    public static Session currentSession() throws HibernateException {
        Session s = (Session) session.get();
        // Open a new Session, if this Thread has none yet
        if (s == null) {
            s = sessionFactory.openSession();
            session.set(s);
        }
        return s;
    }
 
    public static void closeSession() throws HibernateException {
        Session s = (Session) session.get();
        session.set(null);
        if (s != null)
            s.close();
    }
 
}
6、编写测试Jsp或Serverlet,注意,这里是在Tomcat环境下,不能用普通Java类示例Jsp
<%@ page contentType="text/html;charset=GBK"%>
<%@ page import="net.sf.hibernate.Session"%>
<%@ page import="net.sf.hibernate.HibernateException"%>
<%@ page import="net.sf.hibernate.Transaction"%>
<%@ page import="net.sf.hibernate.examples.quickstart.Cat"%>
<%@ page import="net.sf.hibernate.examples.quickstart.HibernateUtil"%>
<html>
<body>
<hr>
<%
          try{
         Session ssession;
            ssession = HibernateUtil.currentSession();
            Transaction tx= ssession.beginTransaction();
            Cat princess = new Cat();
            princess.setName("Princess");
            princess.setSex('F');
            princess.setWeight(7.4f);
 
            ssession.save(princess);
            tx.commit();
 
            HibernateUtil.closeSession();
            }catch(HibernateException e){
            }
           
%>
<hr>
</body>
</html>

跨向Hibernate(二)

重新在Eclipse下再来过一遍,步骤有些不同。(eclipse+myEclipse)1、创建一个普通的Java项目2、加入用myeclipse导入Hibernate的包3、加入MySql的JDBC包...
  • Think2Exist
  • Think2Exist
  • 2005年04月27日 13:18
  • 1012

hibernate自动建表出现的问题

报错信息是: 21:36:15,606 ERROR SchemaUpdate:212 - Unsuccessful: create table tb_articles (id big...
  • qq_28483283
  • qq_28483283
  • 2016年03月18日 21:43
  • 451

hibernate的二级缓存 实际例子

1.实体映射文件:                          
  • elfenliedef
  • elfenliedef
  • 2011年03月11日 11:22
  • 465

hibernate中两个实体类与同一张数据表进行映射后出现的问题解决

        最近项目中遇到了一个子系统需要整合到它的父系统的问题,由于父系统和子系统的工程比较庞大 ,涉及到的class也是相当的多。最后不得已将其中比较关键的class对应的数据表进行了统一。那...
  • dmm1982
  • dmm1982
  • 2008年04月11日 12:32
  • 2076

010——hibernate具体表继承:每个子类一个表

具体表继承:这种策略是使用joined-subclass标签来定义子类的。父类、子类,每个类都对应一张数据库表。在父类对应的数据库表中,实际上会存储所有的记录,包括父类和子类的记录;在子类对应的数据库...
  • msj_god_boy
  • msj_god_boy
  • 2016年07月18日 22:20
  • 445

hibernate4 二级缓存demo实例

转自:http://cxl2012.iteye.com/blog/1944489#comments 配置一目了然 hibernate使用版本是:hibernate-release-4.2....
  • stan503
  • stan503
  • 2013年12月02日 21:46
  • 1420

用每个子类一张表的方式进行Hibernate映射

同样是Student extends User, Teacher extends User也许有人会有疑问,这种和每一个具体类一张表的映射策略有什么区别呢?他们的区别在于对每个类一张表的映射策略建立在...
  • daryl715
  • daryl715
  • 2007年02月28日 14:40
  • 733

hibernate domain配置文件的关系映射

最近对于hibernate的关系映射有点遗忘,今天回顾了下以前的学习。一点浅薄观点,有什么不足、错误大家可以在评论指正。 hibernate 表关联关系包括一对一 多对一  一对多  多对多。这种表...
  • tomatoFIREegg
  • tomatoFIREegg
  • 2016年12月24日 13:34
  • 201

Hibernate单向多对一映射下的增删改查

Hibernate单向多对一映射下的增删改查 注:作为初学者,本文仅为了巩固自己学习的知识亦或帮助初学者,如有缺漏,请见谅 在软件开发中,类与类之间最普遍的关系就是关联关系,而且关...
  • youyou_yo
  • youyou_yo
  • 2015年05月29日 15:56
  • 1159

hibernate继承关系映射关系方法(二)--每个子类一张表

TPS:所谓“每个子类一张表(Table Per Subclass)”:父类一张表,每个子类一张表,父类的表保存公共有信息,子类的表只保存自己特有的信息      这种策略是使用标签来定义子类的。父...
  • tuke_tuke
  • tuke_tuke
  • 2015年11月28日 11:44
  • 1916
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:跨向Hibernate(一)
举报原因:
原因补充:

(最多只允许输入30个字)