游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1582|回复: 0

Hibernate的一个例子:wxh zt

[复制链接]

1367

主题

1993

帖子

2118

积分

金牌会员

Rank: 6Rank: 6

积分
2118
发表于 2005-8-8 19:27:00 | 显示全部楼层 |阅读模式
Ms Server+Tomcat+Hibernate,工具:JBuilder2005。

1.  在JBuilder中建立一个LIBRARY,具体做法就不细讲了,跟做jdbc的库一样,名称为Hibernate

2.  新建一个项目,hibernateTest,导入Hibernate库、MS Server库。

3.  配置Hibernate,建立hibernate.cfg.xml,放在工程的源代码如下:

<?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="dialect"> net.sf.hibernate.dialect.SQLServerDialect</property>

       <property name="connection.driver_class"> com.microsoft.jdbc.sqlserver.SQLServerDriver</property>

       <property name="connection.url">

                   jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=cat;SelectMethod=cursor

         </property>

<property name="connection.username">

sa

</property>

<property name="connection.password">

sa

</property>

        <property name="show_sql">false</property>





        <!-- Mapping files -->

        <mapping resource="Cat.hbm.xml"/>



    </session-factory>



</hibernate-configuration>

这个例子本来参考的是Hibernate自带的quickstart的例子,那上面使用的是Tomcat的数据源,我在建立Tomcat的数据源时好长时间都出错误,项目每次启动时都会重写在本项目中的server.xml文件,把刚写的数据源覆盖掉,因此无法在Tomcat中发布数据源,在这里我想问一下如何在JBuilder自带的Tomcat中指定数据源?有高人指点一下。

因此我改用Hibernate自己的连接池,具体如上所示。

在这个文件中指定方言dialect,以及指定Driver和用户名、密码,值得注意的是我在JBuider使用中出现过一个错误,指出找不到Driver的类文件,经过研究,后来把JBuilder中Web-INF下的class目录下的MsSQLServer的三个文件拷贝到lib下就可以了,不知为何,JBuilder把三个jdbc文件放到了class目录下,需要手动拷贝过去。



建立log4j的属性文件,这个文件可以从hibernate目录下的etc下得到,在此给列出:

### 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



log4j.logger.net.sf.hibernate=info



### log just the SQL

#log4j.logger.net.sf.hibernate.SQL=debug



### log JDBC bind parameters ###

log4j.logger.net.sf.hibernate.type=info



### log schema export/update ###

log4j.logger.net.sf.hibernate.tool.hbm2ddl=debug



### log cache activity ###

#log4j.logger.net.sf.hibernate.cache=debug



### enable the following line if you want to track down connection ###

### leakages when using DriverManagerConnectionProvider ###

#log4j.logger.net.sf.hibernate.connection.DriverManagerConnectionProvider=trace



4.  建立持久性文件:Cat.java,源代码如下:

package net.sf.hibernate.examples.quickstart;



public class Cat {



    private Long id;

    private String name;

    private char sex;

    private float weight;



    public Cat() {

    }



    public Long getId() {

        return id;

    }



    private void setId(Long 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;

    }



}

注意,和Hibernate自带的例子不同,我把id改为long型,防止MsSQLServer不支持,因此在建立数据库时也有所不同。

5.  建立数据库cat,新建表CAT



Column |         Type          | Modifiers
--------+-----------------------+-----------
cat_id | bigint                | not null
name   | nchar(16)             | not null
sex    | character(1)          |
weight | real                  |
primary key cat_id
6.  建立表cat和类Cat的映射文件:cat.cfg.xml:

<?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="long" unsaved-value="null" >
            <column name="CAT_ID"  not-null="true"/>
            <generator class="native"/>
        </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>
把这个文件放在class目录下,本来我把这个文件和cat类文件放在一起,结果编译后发现不见了,不知怎么回事?

7.  Ok,现在就可以使用了,建立一个Servlet,其中新建虚拟路径quickstart,servlet源代码如下:

package net.sf.hibernate.examples.quickstart;



import javax.servlet.*;

import javax.servlet.http.*;

import java.io.*;

import java.util.*;

import net.sf.hibernate.cfg.Configuration;

import net.sf.hibernate.SessionFactory;

import net.sf.hibernate.*;

import org.dom4j.*;

public class Servlet1 extends HttpServlet {

    private static final String CONTENT_TYPE = "text/html; charset=GB2312";















    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();

    }

















    //Initialize global variables

    public void init() throws ServletException {

    }
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-26 19:39

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表