`

【转】hibernate实现有两种配置,xml配置与注释配置

阅读更多

1):xml配置:hibernate.cfg.xml (放到src目录下)和实体配置类:xxx.hbm.xml(与实体为同一目录中)

<?xml version='1.0' encoding='utf-8'?>

<!DOCTYPE hibernate-configuration PUBLIC

        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

       "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

 

    <session-factory>

        <!-- Database connection settings -->

        <property name="connection.driver_class">

com.mysql.jdbc.Driver

</property>

        <property name="connection.url">

jdbc:mysql://localhost:3306/hxj

</property>

        <property name="connection.username">root</property>

        <property name="connection.password">root</property>

 

        <!-- JDBC connection pool (use the built-in) -->

       <property name="connection.pool_size">1</property>

 

        <!-- SQL dialect -->

        <property name="dialect">

org.hibernate.dialect.MySQLDialect

</property>

 

        <!-- Enable Hibernate's automatic session context management -->

     <property name="current_session_context_class">thread</property>

 

        <!-- Disable the second-level cache -->

        <property name="cache.provider_class">

org.hibernate.cache.NoCacheProvider

</property>

 

        <!-- Echo all executed SQL to stdout -->

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

 

        <!-- Drop and re-create the database schema on startup -->

       <!—update也可以用create/create-drop/update/validate代替, create 表示可以根据实体配置文件来自动生成表(只能生成表).

-->

        <property name="hbm2ddl.auto">update</property>

 

 // 实体配置类

 <mapping resource="com/wsw/struts/model/Person.hbm.xml"/>

    </session-factory>

</hibernate-configuration>

 

(2): 实体配置类:xxx.hbm.xml

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC

        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

 

<hibernate-mapping package=”com.wsw.struts.model>

    <class name="Person" table="per">

       <id name="id" column="id">

            <generator class="native"/>   //字段自增

       </id>

       <property name="username" column="p_username"/>

       <property name="age" column="p_age"/>

    </class>

</hibernate-mapping>

 

3):测试类(包括获取SessionFactory类和实体测试类)

SessionFactory类:HibernateUtil

public class HibernateUtil {

    private static final SessionFactory sessionFactory;

    static {

        try {

            // Create the SessionFactory from hibernate.cfg.xml

            sessionFactory = new Configuration().configure().buildSessionFactory();

        } catch (Throwable ex) {

            // Make sure you log the exception, as it might be swallowed

            System.err.println("Initial SessionFactory creation failed." + ex);

            throw new ExceptionInInitializerError(ex);

        }

    }

    public static SessionFactory getSessionFactory() {

        return sessionFactory;

    }

}


实体测试类:
PersonManager

-----------------------------------------------------------------------------------

public class PersonManager {

    public static void main(String[] args) {

         createAndStorePerson();

        HibernateUtil.getSessionFactory().close();

}

 

    private static void createAndStorePerson() {

        Session session =                   // 通过Session工厂获取Session对象

HibernateUtil.getSessionFactory().getCurrentSession();

        session.beginTransaction();         //开始事务

       

        Person person = new Person();

        person.setUsername("何小景");

        person.setAge(26);

        session.save(person);

       

        session.getTransaction().commit(); // 提交事务

    }

}


 

4):注解方式:

注解的方式与xml很很多类似:

首先是需要加入4jar包:hibernate-commons-annotations.jar  hibernate-annotations.jar

ejb3-persistence.jar  hibernate-jpa-2.0-api-1.0.1.Final.jar

下面是不同的地方:

1):hibernate.hbm.xml 文件中把引用:xxx.hbm.xml改为引用实体类:

     即把:<mapping resource="com/wsw/hibernate/model/Person.hbm.xml"/>

改为:<mapping class="com.wsw.hibernate.model.Teacher" />

2):获取SessionFactory方式发生了变化:

      即:由SessionFactory sf = new Configuration().configure().buildSessionFactory()

    改为:SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory()

3):注解方式不需要在xxx.hbm.xml把实体类与表进行映射。而采用在实体类中进行注解。

注意:1):如果实体类属性名与表字段名不一致的时候,要么都注解在属性前,要么都注解在get方法前。不能部分注解在属性前,部分注解在方法前。

 (2如果实体类属性名与表字段名一致的时候,可以部分注解在属性前,部分注解在方法前。

 (3):如果在实体类中某些属性不注解:(属性和get都不写注解),默认为表字段名与实体类属性名一致。

 (4):如果实体类的某个成员属性不需要存入数据库中,使用@Transient 进行注解就可以了。即类似于:(xxx.hbm.Xml配置中的某些字段不写(就是不需要对这个成员属性进行映射))

 (5):表名称可以在实体类前进行注解。

 (6所有这些注解在:javax.persistence包下。而不是在hibernate包中。

 ---------------------------------------------------------------------------------------------------------------------

@Entity                        // 表示为实体类

@Table(name="t_teacher")       // 表名注解

public class Teacher implements Serializable {

   

    private int id;

    private String username;

    private int age;

   

    @Id              // 表示主键

    @GenericGenerator(name = "generator", strategy = "increment")   @GeneratedValue(generator = "generator")   // 自增长

    @Column(name = "id")                                 // 类属性对应着表字段

    public int getId() {

       return id;

    }

    public void setId(int id) {

       this.id = id;

    }

   

    @Column(name="t_username")                       // 类属性对应着表字段

    public String getUsername() {

       return username;

    }

   

    public void setUsername(String username) {

       this.username = username;

    }
    

    @Column(name="t_age")                      // 在实体类属性进行注解,类属性对应着表字段
    
public int getAge() {

       return age;

    }

    public void setAge(int age) {

       this.age = age;

    }

转自:http://www.blogjava.net/yxhxj2006/archive/2012/06/30/381861.html

分享到:
评论

相关推荐

    Hibernate注释大全收藏

    Hibernate注释大全收藏 声明实体Bean @Entity public class Flight implements Serializable { Long id; @Id public Long getId() { return id; } public void setId(Long id) { this.id = id; } } @Entity ...

    hibernate注解

    hibernate注解现在EJB3实体Bean是纯粹的POJO。实际上表达了和Hibernate持久化实体对象同样的概念。他们的映射都通过JDK5.0注释来定义(EJB3规范中的XML描述语法至今还没有...下面外面在代码中将混合使用这两种类型的注释

    最新版本的Struts2+Spring4+Hibernate4三大框架整合(改进:增加整合Quartz和Gson)

    一、 项目名称:S2316S411H436 项目原型:Struts2.3.16 + Spring4.1.1 + Hibernate4.3.6 + Quartz2.2.1 二、 项目目的: 整合使用最新版本的三大...(3) 提供两种声明式事务管理器方案:二选一,请注释或删除其他方案

    J2EE应用开发详解

    313 17.6 常用的JPA注释 316 17.7 小结 318 第18章 Hibernate 319 18.1 Hibernate体系结构 319 18.2 Hibernate核心接口 321 18.3 一个简单的Hibernate例子 321 18.4 详解Hibernate配置文件 325 18.4.1 Hibernate的两...

    千方百计笔试题大全

    237、触发器分为事前触发和事后触发,这两种触发有和区别。语句级触发和行级触发有何区别。 56 238、EJB容器提供的服务 56 239、EJB的角色和三个对象 56 240、EJB的几种类型 56 241、bean 实例的生命周期 56 242、...

    java面试宝典

    237、触发器分为事前触发和事后触发,这两种触发有和区别。语句级触发和行级触发有何区别。 56 238、EJB容器提供的服务 56 239、EJB的角色和三个对象 56 240、EJB的几种类型 56 241、bean 实例的生命周期 56 242、...

    springmybatis

    请注意,这里面有一个方法名 selectUserByID 必须与 User.xml 里面配置的 select 的id 对应() 重写测试代码 程序代码 程序代码 public static void main(String[] args) { SqlSession session = ...

    java面试题

    答:多线程有两种实现方法,一种是继承Thread类或者实现Runnable接口。同步就是在方法返回类型后面加上synchronized。 c#中的委托,事件是不是委托? 答:委托就是将方法作为一个参数带入另一个方法叫做委托,事件...

    java源码包---java 源码 大量 实例

     Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...

    JAVA上百实例源码以及开源项目

     Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...

    JAVA上百实例源码以及开源项目源代码

     Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...

    java源码包2

     Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...

    java源码包3

     Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...

    java源码包4

     Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java EJB中有、无状态SessionBean的两个例子 两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java EJB中有、无状态SessionBean的两个例子 两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用...

    Java学习笔记-个人整理的

    {8.3}创建线程的两种方法}{123}{section.8.3} {8.4}Runnable}{123}{section.8.4} {8.5}Sleep阻塞与打断唤醒}{124}{section.8.5} {8.5.1}sleep与wait的差异}{124}{subsection.8.5.1} {8.6}IO阻塞}{126}{section....

    整理后java开发全套达内学习笔记(含练习)

    System.out.printf() 可插入带 % 的输入类型,前两种只可以插入转义符, 不能插入 % 的数据或字符串 在 printf 里面,输出有5个部分 %[argument_index$][flags][width][.precision]conversion 以“%”开头,[第几个...

Global site tag (gtag.js) - Google Analytics