- 浏览: 124081 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
Alicus520:
我也想呢,最尽在研究这方面的,不知道楼主是否可以?
图像纹理描述中的共生矩阵 -
凌绿寒绮:
好凄美的爱情故事,爱 就得趁早说出吧
说声我爱你 -
sd2646:
如果用svn过程中出现java.lang.NoClassDef ...
MyEclipse 6下按照SVN插件 -
liuxiang00435057:
??
SWT开发的一个简单的信息管理软件 -
wicker:
有Java代码就好了,呵呵
图像纹理描述中的共生矩阵
考虑把通过xxx.hbm.xml转换为用Annotation从而省去配置文件。
首先假定已经可以在hbm.xml配置方式下运行成功 ,Step by step 1中已经描述。接下来需要在原来的方案上的改变如下:
1,首先,引入包,在保证hbm.xml方式运行的包的基础上,还需要:ejb3-persistence.jar(不要以为它是EJB的专用了),hibernate-annotation.jar。如果你用myeclipse开发,在hibernate相关目录下都可以找到的。
这一步有一些需要特别注意的地方:版本问题。因为我因为这个问题碰到过麻烦。下面也简单的介绍一下。
hibernate-annotation.jar 用的3.2.0.CR2版本,是比较新的版本了。
开始时hibernate我是用的hibernate-3.2.5版本的。
于是我把hibernate3.2.5换作了3.1 ,又发现另外一些类比如NativeSqlQueryReurn找不到...
最后再尝试用hibernate3.2.0.cr4 ,终于看到了我想要的。所以在这一步要比较小心。
其中一步我发现会报如下错误:SqlresultsetMappings Not found 。解决方法是引入Java EE 5的库。后来发现,如果引入了Java EE 5的库以后,就不用再引入ejb3-persistence.jar了 。因为Java EE 5已经把这个部分包含了,不再是EJB独有的了。
2,要用到的库文件就这些了,接下来开始写配置文件(Hibernate.cfg.xml这个配置还是需要的)。
hibernate.cfg.xml和用hbm.xml方式的区别是,mapping字段不再用resource,而改用 class=Myclass.
内容如下:
<?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>
<property name="connection.driver_class">
org.hsqldb.jdbcDriver
</property>
<property name="connection.url">
jdbc:hsqldb:hsql://localhost
</property>
<property name="connection.username">SA</property>
<property name="connection.password"></property>
<property name="dialect">
org.hibernate.dialect.HSQLDialect
</property>
<property name="connection.pool_size">3</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">create</property>
<property name="current_session_context_class">thread</property>
<mapping class="dian.ikeel.annotation.Picture"/>
</session-factory>
</hibernate-configuration>
3,开始写Java类了,注意要用到Annotation的:
package dian.ikeel.annotation;
import javax.persistence.*;
import org.hibernate.annotations.AccessType;
@Entity
@Table(name="Pics")
@AccessType("property")
public class Picture {
private long picid;
private String picname;
private int picsize;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public long getPicid() {
return picid;
}
public void setPicid(long picid) {
this.picid = picid;
}
public String getPicname() {
return picname;
}
public void setPicname(String picname) {
this.picname = picname;
}
public int getPicsize() {
return picsize;
}
public void setPicsize(int picsize) {
this.picsize = picsize;
}
}
我就不详细解释每个标注的意思了。
4,下面该关心如何或得SessionFactory了,跟以前的方式的区别只有一点点,我们用到了AnnotationConfiguration;
代码如下:
package dian.ikeel.hibernate.util.SessionFactory;
import org.hibernate.HibernateException;
import org.hibernate.Session;
//import org.hibernate.cfg.Configuration;
import org.hibernate.cfg.AnnotationConfiguration;
/**
* Configures and provides access to Hibernate sessions, tied to the
* current thread of execution. Follows the Thread Local Session
* pattern, see {@link http://hibernate.org/42.html }.
*/
public class AnnotationSessionFactory {
/**
* Location of hibernate.cfg.xml file.
* Location should be on the classpath as Hibernate uses
* #resourceAsStream style lookup for its configuration file.
* The default classpath location of the hibernate config file is
* in the default package. Use #setConfigFile() to update
* the location of the configuration file for the current session.
*/
private static String CONFIG_FILE_LOCATION = "/annotationhibernate.cfg.xml";
private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
private static AnnotationConfiguration configuration = new AnnotationConfiguration();
private static org.hibernate.SessionFactory sessionFactory;
private static String configFile = CONFIG_FILE_LOCATION;
static {
try {
configuration.configure(configFile);
sessionFactory = configuration.buildSessionFactory();
}catch (Exception e) {
System.err
.println("%%%% Error Creating SessionFactory %%%%"+e.getLocalizedMessage());
e.printStackTrace();
}
}
/**
* Returns the ThreadLocal Session instance. Lazy initialize
* the <code>SessionFactory</code> if needed.
*
* @return Session
* @throws HibernateException
*/
public static Session getSession() throws HibernateException {
Session session = (Session) threadLocal.get();
if (session == null || !session.isOpen()) {
if (sessionFactory == null) {
rebuildSessionFactory();
}
session = (sessionFactory != null) ? sessionFactory.openSession()
: null;
threadLocal.set(session);
}
return session;
}
/**
* Rebuild hibernate session factory
*
*/
public static void rebuildSessionFactory() {
try {
configuration.configure(configFile);
sessionFactory = configuration.buildSessionFactory();
} catch (Exception e) {
System.err
.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
/**
* Close the single hibernate session instance.
*
* @throws HibernateException
*/
public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
threadLocal.set(null);
if (session != null) {
session.close();
}
}
/**
* return session factory
*
*/
public static org.hibernate.SessionFactory getSessionFactory() {
return sessionFactory;
}
/**
* return session factory
*
* session factory will be rebuilded in the next call
*/
public static void setConfigFile(String configFile) {
AnnotationSessionFactory.configFile = configFile;
sessionFactory = null;
}
/**
* return hibernate configuration
*
*/
public static AnnotationConfiguration getConfiguration() {
return configuration;
}
}
5,接下来,启动数据库,我用的是hsql。然后给一个入口点就OK了。
最简单的入口函数:
package dian.ikeel.hibernate.BLL;
import org.hibernate.Session;
import dian.ikeel.annotation.Picture;
import dian.ikeel.hibernate.util.SessionFactory.*;
import org.hibernate.cfg.AnnotationConfiguration;;
public class AnnotationEntry {
/**
* @param args
*/
public static void main(String[] args) {
Session session=AnnotationSessionFactory.getSessionFactory().getCurrentSession();
session.beginTransaction();
Picture pic=new Picture();
pic.setPicname("heat3");
pic.setPicsize(123);
session.save(pic);
session.getTransaction().commit();
System.out.println("AnnotationEntry excuted");
}
}
6,这样就算是最简单的Annotation 的Demo运行通过了。再去研究一下某些步骤是不是一定得那么做。
首先假定已经可以在hbm.xml配置方式下运行成功 ,Step by step 1中已经描述。接下来需要在原来的方案上的改变如下:
1,首先,引入包,在保证hbm.xml方式运行的包的基础上,还需要:ejb3-persistence.jar(不要以为它是EJB的专用了),hibernate-annotation.jar。如果你用myeclipse开发,在hibernate相关目录下都可以找到的。
这一步有一些需要特别注意的地方:版本问题。因为我因为这个问题碰到过麻烦。下面也简单的介绍一下。
hibernate-annotation.jar 用的3.2.0.CR2版本,是比较新的版本了。
开始时hibernate我是用的hibernate-3.2.5版本的。
于是我把hibernate3.2.5换作了3.1 ,又发现另外一些类比如NativeSqlQueryReurn找不到...
最后再尝试用hibernate3.2.0.cr4 ,终于看到了我想要的。所以在这一步要比较小心。
其中一步我发现会报如下错误:SqlresultsetMappings Not found 。解决方法是引入Java EE 5的库。后来发现,如果引入了Java EE 5的库以后,就不用再引入ejb3-persistence.jar了 。因为Java EE 5已经把这个部分包含了,不再是EJB独有的了。
2,要用到的库文件就这些了,接下来开始写配置文件(Hibernate.cfg.xml这个配置还是需要的)。
hibernate.cfg.xml和用hbm.xml方式的区别是,mapping字段不再用resource,而改用 class=Myclass.
内容如下:
<?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>
<property name="connection.driver_class">
org.hsqldb.jdbcDriver
</property>
<property name="connection.url">
jdbc:hsqldb:hsql://localhost
</property>
<property name="connection.username">SA</property>
<property name="connection.password"></property>
<property name="dialect">
org.hibernate.dialect.HSQLDialect
</property>
<property name="connection.pool_size">3</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">create</property>
<property name="current_session_context_class">thread</property>
<mapping class="dian.ikeel.annotation.Picture"/>
</session-factory>
</hibernate-configuration>
3,开始写Java类了,注意要用到Annotation的:
package dian.ikeel.annotation;
import javax.persistence.*;
import org.hibernate.annotations.AccessType;
@Entity
@Table(name="Pics")
@AccessType("property")
public class Picture {
private long picid;
private String picname;
private int picsize;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public long getPicid() {
return picid;
}
public void setPicid(long picid) {
this.picid = picid;
}
public String getPicname() {
return picname;
}
public void setPicname(String picname) {
this.picname = picname;
}
public int getPicsize() {
return picsize;
}
public void setPicsize(int picsize) {
this.picsize = picsize;
}
}
我就不详细解释每个标注的意思了。
4,下面该关心如何或得SessionFactory了,跟以前的方式的区别只有一点点,我们用到了AnnotationConfiguration;
代码如下:
package dian.ikeel.hibernate.util.SessionFactory;
import org.hibernate.HibernateException;
import org.hibernate.Session;
//import org.hibernate.cfg.Configuration;
import org.hibernate.cfg.AnnotationConfiguration;
/**
* Configures and provides access to Hibernate sessions, tied to the
* current thread of execution. Follows the Thread Local Session
* pattern, see {@link http://hibernate.org/42.html }.
*/
public class AnnotationSessionFactory {
/**
* Location of hibernate.cfg.xml file.
* Location should be on the classpath as Hibernate uses
* #resourceAsStream style lookup for its configuration file.
* The default classpath location of the hibernate config file is
* in the default package. Use #setConfigFile() to update
* the location of the configuration file for the current session.
*/
private static String CONFIG_FILE_LOCATION = "/annotationhibernate.cfg.xml";
private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
private static AnnotationConfiguration configuration = new AnnotationConfiguration();
private static org.hibernate.SessionFactory sessionFactory;
private static String configFile = CONFIG_FILE_LOCATION;
static {
try {
configuration.configure(configFile);
sessionFactory = configuration.buildSessionFactory();
}catch (Exception e) {
System.err
.println("%%%% Error Creating SessionFactory %%%%"+e.getLocalizedMessage());
e.printStackTrace();
}
}
/**
* Returns the ThreadLocal Session instance. Lazy initialize
* the <code>SessionFactory</code> if needed.
*
* @return Session
* @throws HibernateException
*/
public static Session getSession() throws HibernateException {
Session session = (Session) threadLocal.get();
if (session == null || !session.isOpen()) {
if (sessionFactory == null) {
rebuildSessionFactory();
}
session = (sessionFactory != null) ? sessionFactory.openSession()
: null;
threadLocal.set(session);
}
return session;
}
/**
* Rebuild hibernate session factory
*
*/
public static void rebuildSessionFactory() {
try {
configuration.configure(configFile);
sessionFactory = configuration.buildSessionFactory();
} catch (Exception e) {
System.err
.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
/**
* Close the single hibernate session instance.
*
* @throws HibernateException
*/
public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
threadLocal.set(null);
if (session != null) {
session.close();
}
}
/**
* return session factory
*
*/
public static org.hibernate.SessionFactory getSessionFactory() {
return sessionFactory;
}
/**
* return session factory
*
* session factory will be rebuilded in the next call
*/
public static void setConfigFile(String configFile) {
AnnotationSessionFactory.configFile = configFile;
sessionFactory = null;
}
/**
* return hibernate configuration
*
*/
public static AnnotationConfiguration getConfiguration() {
return configuration;
}
}
5,接下来,启动数据库,我用的是hsql。然后给一个入口点就OK了。
最简单的入口函数:
package dian.ikeel.hibernate.BLL;
import org.hibernate.Session;
import dian.ikeel.annotation.Picture;
import dian.ikeel.hibernate.util.SessionFactory.*;
import org.hibernate.cfg.AnnotationConfiguration;;
public class AnnotationEntry {
/**
* @param args
*/
public static void main(String[] args) {
Session session=AnnotationSessionFactory.getSessionFactory().getCurrentSession();
session.beginTransaction();
Picture pic=new Picture();
pic.setPicname("heat3");
pic.setPicsize(123);
session.save(pic);
session.getTransaction().commit();
System.out.println("AnnotationEntry excuted");
}
}
6,这样就算是最简单的Annotation 的Demo运行通过了。再去研究一下某些步骤是不是一定得那么做。
发表评论
-
再望Sun的背影
2010-02-06 00:41 0这是在运营公司,不 ... -
被FCKeditor给弄的快疯掉了!!
2008-04-14 14:44 915FCKEditor显示在页面上总是只有一个TextArea,折 ... -
SWT的Table对单元格添加可编辑属性
2008-04-09 22:02 13515首先是初始化Display , shell ,然后建立tabl ... -
JVM_8080 Already In use 暴力解决方法
2008-04-09 18:57 1690在Myeclipse中启动tomcat报错: JVM——808 ... -
SWT开发的一个简单的信息管理软件
2008-04-07 21:35 1776花了两天时间做了个简单的信息管理软件,界面开发采用了SWT,之 ... -
jar命令加入Main-Class描述
2008-04-03 15:58 5584想在Jar包的Manifest文件中加入Main-Class描 ... -
Spring2.5中可以用Annotation代替xml配置bean了
2008-04-02 13:28 2142xml配置文件中bean的定义可以去掉了,xml配置主要内容如 ... -
Hibernae+Spring+Annotation 的一个Demo
2008-04-02 13:00 18591,今天在用Annotation+Hibern ... -
使用Myeclipse的一个小技巧
2008-04-01 12:55 1654用Eclipse开发的过程中,经常用到的一个功能就是为一个新建 ... -
hibernate Step By Step (1)
2008-03-31 13:27 1018Hibernate的第一个例子,用hibernate3.0 ... -
MyEclipse 6下按照SVN插件
2008-03-31 10:02 8987我也是按照一般的步骤安装SVN插件:解压——Copy plu ... -
hibernate中所需要的各 jar
2008-03-21 22:00 1494hibernate3.jar 编译hibernate所必须的 ... -
学习Hibernate和Spring ing...
2008-03-21 21:55 858团队信息平台的项目打算用到Hibernate+Spring ... -
Ajax4jsf开发的Helloworld
2008-03-20 08:11 1194学习ajax4jsf+myfaces ,今天写了个简单的Hel ... -
Liferay中的配置文件
2008-03-14 12:58 1822portlet.xml portlet定义描述文件,它描述p ...
相关推荐
在这个“step by step 06 ssh整合hibernate”教程中,我们将深入探讨如何将这三个强大的组件协同工作。 首先,Struts2是一个基于MVC设计模式的Java Web框架,它负责处理用户请求并展示视图。Struts2提供了一种灵活...
在这个"NHibernate Step by Step"入门教程中,我们将深入理解NHibernate的核心概念和实践技巧。 首先,让我们了解ORM的基本理念。ORM是将数据库中的表映射到程序中的类,将SQL语句转换成对象的操作,这样开发者就...
ssh框架搭建step by step (springMVC + spring 5.0.4 + hibernate 5.0.12) 好久不弄web了, 周末心血来潮, 使用较新spirng/hibernate搭建一个ssh框架, 供有需要的同学参考/学习/使用. 使用eclipse开发, 搭建,分三步: ...
在"step by step 09"这个主题中,我们关注的是通过SSH框架进行开发的实际操作,具体涉及以下几个关键知识点: 1. **Struts2框架**:作为表现层,Struts2负责处理HTTP请求,控制应用程序的流程,并将数据展示在视图...
在"step by step ssh 04 Spring 事务控制"这一主题中,我们将深入探讨如何在SSH架构下实现Spring的AOP(面向切面编程)事务管理,以及如何结合Struts和Hibernate进行用户登录实例。 首先,Struts作为MVC(模型-视图...
在本教程“step by step ssh 06 增加用户”中,我们将深入探讨如何在SSH环境中添加新用户,以及如何集成SSH与其他技术如Spring、Struts和Hibernate(SSH框架)进行应用开发,实现包括用户登录、数据保存和查询等功能...
在这个"step by step ssh 05 显示所有用户"的主题中,我们聚焦于SSH在用户管理方面的一个具体应用,即如何显示系统中的所有用户。这通常是系统管理员为了管理和监控用户账户而进行的操作。 首先,SSH主要由三部分...
SSH(Struts2 + Spring + Hibernate)是一种经典的Java Web开发框架组合,用于构建高效、可维护的Web应用程序。本篇文章将深入探讨SSH整合的核心概念、配置步骤以及在实际项目中的应用。 首先,Struts2是MVC(模型-...
SSH整合开发是软件开发中的一个常见概念,主要指的是Spring、Struts和Hibernate这三大框架的集成应用。在本文中,我们将深入探讨SSH整合的核心概念、关键技术和如何实现用户管理模块,包括用户登录、删除、修改、...
### NHibernate Step by Step 教程知识点概览 #### 一、环境搭建与配置 - **NHibernate**:NHibernate 是一个开源的对象关系映射器(Object-Relational Mapper,ORM),它允许开发者以面向对象的方式操作关系型...
### Spring MVC Step-by-Step中文版知识点概览 #### 一、Spring框架核心概念与组成部分 **1. 控制反转(IoC)** - **定义**:控制反转是一种编程模式,通过它对象的依赖关系是由外部容器进行管理而不是由对象本身...
as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and ...
内含step by step 开发文档 一、说明: 1、开发环境: Eclipse3.2.1+MyEclipse5.1+Tomcat5.5+Microsoft SQL Server 2000 2、主要实现技术:Struts1.2+Hibernate3.0+JavaScript+JSTL1.1+自定义标签 3、页面的树形...
"Spring起步例子 'Developing a Spring Framework MVC application step-by-step' 剖析.pdf"则可能是一个详细指南,通过逐步教学的方式引导读者创建一个基于Spring MVC的Web应用,内容可能包括Spring的配置、控制器...
《Spring MVC 深入浅出教程》 Spring MVC 是 Spring 框架的一个核心模块,主要用于构建...这个教程“Spring-MVC-step-by-step2.pdf”将引导你一步步掌握 Spring MVC 的核心概念和实战技巧,为你的 IT 事业添砖加瓦。
2. **环境准备**: 在开始使用LINQ to NHibernate之前,你需要安装以下组件: - .NET Framework 3.5或更高版本(因为LINQ是在.NET 3.5引入的) - NHibernate库 - NHibernate.Linq库 - 所需的数据库驱动程序 - ...
- **Hibernate**:讲解如何通过Hibernate持久化框架存储和检索数据,并结合Flex展现动态数据。 - **Flex访问数据库**:通过具体实例演示如何让Flex应用程序直接访问数据库,并进行增删改查操作。 - **MVC架构**:...
很多NHibernate的学习者往往都是通过Hibernate的文档来学习,但是毕竟不是所有的.Net开发者都熟悉Java,也不是所有的人都有精力有时间去学习Java,所以,我准备开始一个Step by Step的NHibernate教程,以便有兴趣的...
《Spring从入门到精通》是一套全面且深入的Spring学习资料集合...在实践过程中,读者可以结合"Spring MVC step-by-step.files"中的实例代码进行操作,加深理论知识与实际应用的结合,从而真正达到从入门到精通的目标。
2. Validation step by step 2.1. 定义约束 2.1.1. 字段级(field level) 约束 2.1.2. 属性级别约束 2.1.3. 类级别约束 2.1.4. 约束继承 2.1.5. 对象图 2.2. 校验约束 2.2.1. 获取一个Validator的实例 2.2.2. ...