`
hustlong
  • 浏览: 124112 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Hibernate Step By Step (2)

阅读更多
考虑把通过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运行通过了。再去研究一下某些步骤是不是一定得那么做。


分享到:
评论

相关推荐

    step by step 06 ssh整合hibernate

    在这个“step by step 06 ssh整合hibernate”教程中,我们将深入探讨如何将这三个强大的组件协同工作。 首先,Struts2是一个基于MVC设计模式的Java Web框架,它负责处理用户请求并展示视图。Struts2提供了一种灵活...

    NHibernate Step by Step入门教程

    在这个"NHibernate Step by Step"入门教程中,我们将深入理解NHibernate的核心概念和实践技巧。 首先,让我们了解ORM的基本理念。ORM是将数据库中的表映射到程序中的类,将SQL语句转换成对象的操作,这样开发者就...

    ssh框架整合step by step (springMVC + spring 5.0.4 + hibernate 5.0.12)

    ssh框架搭建step by step (springMVC + spring 5.0.4 + hibernate 5.0.12) 好久不弄web了, 周末心血来潮, 使用较新spirng/hibernate搭建一个ssh框架, 供有需要的同学参考/学习/使用. 使用eclipse开发, 搭建,分三步: ...

    step by step 09

    在"step by step 09"这个主题中,我们关注的是通过SSH框架进行开发的实际操作,具体涉及以下几个关键知识点: 1. **Struts2框架**:作为表现层,Struts2负责处理HTTP请求,控制应用程序的流程,并将数据展示在视图...

    step by step ssh 04 Spring 事务控制

    在"step by step ssh 04 Spring 事务控制"这一主题中,我们将深入探讨如何在SSH架构下实现Spring的AOP(面向切面编程)事务管理,以及如何结合Struts和Hibernate进行用户登录实例。 首先,Struts作为MVC(模型-视图...

    step by step ssh 06 增加用户

    在本教程“step by step ssh 06 增加用户”中,我们将深入探讨如何在SSH环境中添加新用户,以及如何集成SSH与其他技术如Spring、Struts和Hibernate(SSH框架)进行应用开发,实现包括用户登录、数据保存和查询等功能...

    step by step ssh 05 显示所有用户

    在这个"step by step ssh 05 显示所有用户"的主题中,我们聚焦于SSH在用户管理方面的一个具体应用,即如何显示系统中的所有用户。这通常是系统管理员为了管理和监控用户账户而进行的操作。 首先,SSH主要由三部分...

    ssh step by step 01 struts2项目

    SSH(Struts2 + Spring + Hibernate)是一种经典的Java Web开发框架组合,用于构建高效、可维护的Web应用程序。本篇文章将深入探讨SSH整合的核心概念、配置步骤以及在实际项目中的应用。 首先,Struts2是MVC(模型-...

    step by step ssh 10

    SSH整合开发是软件开发中的一个常见概念,主要指的是Spring、Struts和Hibernate这三大框架的集成应用。在本文中,我们将深入探讨SSH整合的核心概念、关键技术和如何实现用户管理模块,包括用户登录、删除、修改、...

    NHibernate Step by Step(教程).doc

    ### NHibernate Step by Step 教程知识点概览 #### 一、环境搭建与配置 - **NHibernate**:NHibernate 是一个开源的对象关系映射器(Object-Relational Mapper,ORM),它允许开发者以面向对象的方式操作关系型...

    spring-mvc-step-by-step中文版

    ### Spring MVC Step-by-Step中文版知识点概览 #### 一、Spring框架核心概念与组成部分 **1. 控制反转(IoC)** - **定义**:控制反转是一种编程模式,通过它对象的依赖关系是由外部容器进行管理而不是由对象本身...

    hibernate-shards.jar

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

    Hibernate+Struts 无限级树形菜单(MSSQL).rar

    内含step by step 开发文档 一、说明: 1、开发环境: Eclipse3.2.1+MyEclipse5.1+Tomcat5.5+Microsoft SQL Server 2000 2、主要实现技术:Struts1.2+Hibernate3.0+JavaScript+JSTL1.1+自定义标签 3、页面的树形...

    hibernate+webwork+spring的学习资料

    "Spring起步例子 'Developing a Spring Framework MVC application step-by-step' 剖析.pdf"则可能是一个详细指南,通过逐步教学的方式引导读者创建一个基于Spring MVC的Web应用,内容可能包括Spring的配置、控制器...

    Spring-MVC-step-by-step2.rar

    《Spring MVC 深入浅出教程》 Spring MVC 是 Spring 框架的一个核心模块,主要用于构建...这个教程“Spring-MVC-step-by-step2.pdf”将引导你一步步掌握 Spring MVC 的核心概念和实战技巧,为你的 IT 事业添砖加瓦。

    Linq2NHibernate.Step1

    2. **环境准备**: 在开始使用LINQ to NHibernate之前,你需要安装以下组件: - .NET Framework 3.5或更高版本(因为LINQ是在.NET 3.5引入的) - NHibernate库 - NHibernate.Linq库 - 所需的数据库驱动程序 - ...

    StepByStep学FLEX教程.pdf

    - **Hibernate**:讲解如何通过Hibernate持久化框架存储和检索数据,并结合Flex展现动态数据。 - **Flex访问数据库**:通过具体实例演示如何让Flex应用程序直接访问数据库,并进行增删改查操作。 - **MVC架构**:...

    NHibernate-MVC3 入门例子

    很多NHibernate的学习者往往都是通过Hibernate的文档来学习,但是毕竟不是所有的.Net开发者都熟悉Java,也不是所有的人都有精力有时间去学习Java,所以,我准备开始一个Step by Step的NHibernate教程,以便有兴趣的...

    Spring從入門到精通

    《Spring从入门到精通》是一套全面且深入的Spring学习资料集合...在实践过程中,读者可以结合"Spring MVC step-by-step.files"中的实例代码进行操作,加深理论知识与实际应用的结合,从而真正达到从入门到精通的目标。

    HibernateValidatorJSR303的参考实现使用指南.pdf

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

Global site tag (gtag.js) - Google Analytics