• 在Eclipse中写第一个hibernate小例子


    在hibernate自带的文档中,包含了一个很简单的小例子,不过这个小例子是基于ant的,而且说的不是很详细,不利于新手学习。在这里,我将在Eclipse中实现这个例子,并给出详细的实现步骤。
        首先,我们要创建一个数据库,并生成一个表,来供hibernate访问。在这里我们采用MySQL作为DBMS。我们的数据库取名为
    hbtest,生成一个名叫EVENTS的表。生成数据库的操作比较简单,我就不介绍了,生成表的sql语句为:

    1. create table EVENTS (
    2. EVENT_ID int(6AUTO_INCREMENT,
    3. EVENT_DATE date,
    4. TITLE varchar(20),
    5. primary key (EVENT_ID));
        接下来,我们在Eclipse中创建一个java项目。之后我们要写一个javabean类,来和数据库中的这个表来进行映射。很显然,在上面的表中,包还3个字段,所以我们的这个javabean类中也包含3个属性,具体代码如下:
    1. package org.hibernate.tutorial.domain;
    2. //上面的这个包路径比较长,因为原例子中就是这样,我没有修改
    3. import java.util.Date;
    4. public class Event {
    5.     private Long id;    
    6.     private String title;
    7.     private Date date;
    8.     public Event() {}
    9.     public Long getId() {
    10.         return id;
    11.     }
    12.     private void setId(Long id)   
    13.         //这里要注意,这个set方法是private的,
    14.         //目的是不让普通的程序员使用它,
    15.         //但是hibernate框架还是可以通过反射机制访问私有属性id
    16.         this.id id;
    17.     }
    18.     public Date getDate() {
    19.         return date;
    20.     }
    21.     public void setDate(Date date) {
    22.         this.date date;
    23.     }
    24.     public String getTitle() {
    25.         return title;
    26.     }
    27.     public void setTitle(String title) {
    28.         this.title title;
    29.     }
    30. }
        接下来,我们要写一个配置文件,将上述javabean类和数据库表映射起来。这个配置文件的名字叫做Event.hbm.xml,具体内容如下:
    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <!DOCTYPE hibernate-mapping PUBLIC
    3.         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    4.         "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

    5. <hibernate-mapping package="org.hibernate.tutorial.domain">
    6.     <class name="Event" table="EVENTS">
    7.         <id name="id" column="EVENT_ID">
    8.             <generator class="native" />
    9.         </id>
    10.         <property name="date" type="timestamp" column="EVENT_DATE" />
    11.         <property name="title" />
    12.     </class>
    13. </hibernate-mapping>
        在上述配置文件中,我们要注意如下事项:如果数据库字段和javabean类属性名字不同,则要明确指定映射关系,就像上面的第11行;名字相同就不用指定指定了,就像第12行。这个配置文件要放在哪里呢?我们只需在源代码文件夹中新建一个文件夹,将其放进去就好了。具体在Eclipse中的操作为,建立一个名叫mapping的包(一个包就相当于一个文件夹),然后把这个配置文件放进去。
        接下来,我们在src文件夹中创建一个名叫hibernate.cfg.xml的文档,来对hibernate进行综合配置,内容如下:

    1. <?xml version='1.0' encoding='utf-8'?>
    2. <!DOCTYPE hibernate-configuration PUBLIC
    3.     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    4.     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    5.         
    6. <hibernate-configuration>
    7.     <session-factory>
    8.         <!-- 数据库连接设置,根据具体情况来,特别是用户名和密码 -->
    9.         <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    10.         <property name="connection.url">jdbc:mysql://localhost:3306/hbtest</property>
    11.         <property name="connection.username">root</property>
    12.         <property name="connection.password">123456</property>
    13.         <!-- JDBC连接池(内置的) -->
    14.         <property name="connection.pool_size">1</property>
    15.         <!-- SQL语句的方言 -->
    16.         <property name="dialect">org.hibernate.dialect.HSQLDialect</property>
    17.         <!-- Enable Hibernate's automatic session context management -->
    18.         <property name="current_session_context_class">thread</property>
    19.         <!-- Disable the second-level cache  -->
    20.         <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
    21.         <!-- Echo all executed SQL to stdout -->
    22.         <property name="show_sql">true</property>
    23.         <!-- Drop and re-create the database schema on startup -->
    24.         <property name="hbm2ddl.auto">create</property>
    25.         <mapping resource="mapping/Event.hbm.xml"/>
    26.     </session-factory>
    27. </hibernate-configuration>
        大家注意上面的第25行,"mapping/Event.hbm.xml"这个路径要和我们上面讲的对应起来,也就是我们新建了一个mapping包,然后把Event.hbm.xml这个配置文件放了进去。如果你的配置文件放在其他地方,这个设置就要修改。
        接下来我们写一个工具类。因为hibernate在执行的时候,总是要用到SessionFactory这个东西,而得到这个东西的方法稍微有点复杂,因此我们写一个工具类,唯一的功能就是得到SessionFactory,这样使用起来就很方便了,代码如下:
    1. package util;
    2. import org.hibernate.*;
    3. import org.hibernate.cfg.*;
    4. public class HibernateUtil {
    5.     private static final SessionFactory sessionFactory;
    6.     static {
    7.         try {
    8.             // Create the SessionFactory from hibernate.cfg.xml
    9.             sessionFactory new Configuration().configure().buildSessionFactory();
    10.         catch (Throwable ex) {
    11.             // Make sure you log the exception, as it might be swallowed
    12.             System.err.println("Initial SessionFactory creation failed." ex);
    13.             throw new ExceptionInInitializerError(ex);
    14.         }
    15.     }
    16.     public static SessionFactory getSessionFactory() {
    17.         return sessionFactory;
    18.     }
    19. }
        接下来,我们写一个main函数,来检测一下hibernate是否能够成功运行,代码如下:
    1. package events;
    2. import org.hibernate.Session;
    3. import java.util.Date;
    4. import util.HibernateUtil;
    5. import org.hibernate.tutorial.domain.Event;
    6. public class EventManager {
    7.     public static void main(String[] args) {
    8.         EventManager mgr new EventManager();
    9.             mgr.createAndStoreEvent("My Event"new Date());
    10.         HibernateUtil.getSessionFactory().close();
    11.     }
    12.     private void createAndStoreEvent(String title, Date theDate) {
    13.         Session session HibernateUtil.getSessionFactory().getCurrentSession();
    14.         session.beginTransaction();
    15.         //建立一个Event对象并进行赋值
    16.         Event theEvent new Event();
    17.         theEvent.setTitle(title);
    18.         theEvent.setDate(theDate);
    19.         //将该对象写入数据库
    20.         session.save(theEvent);
    21.         session.getTransaction().commit();
    22.     }
    23. }
        最后,特别注意,hibernate的运行是需要大量第三方类库支持的,因此我们还需要将这些类库导入到我们的这个项目中,同时还要把hibernate自带的log4j配置文件也复制过来。这些内容都在hibernate的发布包中,大家自己找。
        当所有的工作都做完后,这个项目的布局是如下图所示:



        至此,最简单的hibernate小例子就完成了,应该可以运行了
  • 相关阅读:
    NOI2020省队联合选拔赛(JXOI2020)退役记
    NOI2020省队选拔赛前训练(打摆)记录
    一些省选题
    Codeforces Round #648 (Div. 2) 简要题解
    Atcoder NOMURA Programming Competition 2020简要题解
    AtCoder Grand Contest 020 简要题解
    Codeforces Round #643 (Div. 2) 题解
    Codeforces Round #642 (Div. 3) 题解
    【GDKOI2016】小学生数学题 【自然数幂求和】【斯特林数】
    【XSY3163】Tree Ext【二分】【最小生成树】【矩阵树定理】【拉格朗日插值】
  • 原文地址:https://www.cnblogs.com/liuzhuqing/p/7480751.html
Copyright © 2020-2023  润新知