|
|
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 {
}
|
|