• Hibernate4 : 持久化你的第一个类


    由于目前我在学校的一个实验室跟老师学习Java EE开发,老师用的是Seam框架接活做项目,所以这一系列的文章将会向Seam方向写。。路线大致应该是 : JSP --> Servlet --> Hibernate --> JSF --> EJB3 --> Seam


    在开始之前,去www.hibernate.org下载 hibernate4.final.zip ,并将所有依赖的jar文件放到classpath下


    一、Hibernate简介

    持久化,是指将内存中的数据保存到可以永久存储数据的高设备中,如硬盘。

    Hibernate是一个开放源代码的对象关系映射(ORM)框架,它对JDBC进行了轻量级的封闭,使得程序员能从繁杂的JDBC操作中彻底解放出来。Hibernate使用hibernate.cfg.xml完成数据库的配置,使用 *.hbm.xml文件定义从对象到数据库的映射规则。

    数据库的配置 : hibernate.cfg.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>
        	<!-- MySql JDBC驱动类 -->
            <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
            <!-- MySql DB用户密码 -->
            <property name="hibernate.connection.password">0000</property>
            <!-- MySql 连接URL -->
            <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
            <!-- MySql DB用户名 -->
            <property name="hibernate.connection.username">root</property>
            <!-- MySql JDBC方言 -->
            <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
            <!-- 在控制台打印自动生成的SQL语句 -->
            <property name="hibernate.show_sql">true</property>
            <!-- 实例Bean映射定义文件 -->
            <mapping resource="dev/entity/UserBean.hbm.xml"/>
        </session-factory>
    </hibernate-configuration>
    


    <mapping resource="dev/entity/UserBean.hbm.xml"/>是指定映射规则文件的路径。UserBean.hbm.xml定义了从UserBean这个类到关系数据库的映射规则。该文件应该放在与UserBean.class 同级的目录下。UserBean这个实例bean定义如下:

    package dev.entity;
    
    public class UserBean
    {
    	private int id; //用做主键
    	private String name;
    	private String pwd;
    	
    	//省略get和set方法
    }


    我们要做的就是将UserBean这个类存储到数据库的一张名叫USERBEAN的表中。UserBean的每个属性都对应着数据表中的一个字段。首先创建USERBREAN数据表:

    create table USERBEAN
    (
    	ID int key auto_increment,
    	NAME varchar(40),
    	PWD varchar(40)
    );

    注意,主键 ID字段必须设置成auto_increment,即自增类型。下面通过UserBean.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">
    <!-- Generated Jun 29, 2013 2:13:53 PM by Hibernate Tools 3.4.0.CR1 -->
    <hibernate-mapping>
        <class name="dev.entity.UserBean" table="USERBEAN">
            <id name="id" type="int">
                <column name="ID" />
                <generator class="native" />
            </id>
            <property name="name" type="java.lang.String" length="40">
                <column name="NAME" />
            </property>
            <property name="pwd" type="java.lang.String" length="40">
                <column name="PWD" />
            </property>
        </class>
    </hibernate-mapping>
    


    关于这些xml文件的说明,可以查看官方文档。上面的xml应该很容易理解,如table属性指的就是表名,id元素定义了主键等等。这里不再说明


    好了,一切准备就绪,下面就开始持久化我们的第一个类吧!


    二、使用Hibernate持久化类的流程

    构造Configuration对象 --> 构造ServiceRegistry对象 --> 得到SessionFactory对象 -->使用SessionFactory得到Session对象。

    得到Session对象后,首先要调用beginTransaction()方法来打开一个事务,然后调用save()方法将UserBean的实例做为参数传递进去,再调用Transaction的commit()方法提交事务,这时候UserBean对象才会被保存到数据库中。如果调用完save()方法后没有调用commit(),则不会进行任何的保存工作,只有当事务关闭或者调用了flush方法后才会真正地将对象持久化。

    package dev;
    
    import java.rmi.registry.Registry;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.service.ServiceRegistry;
    import org.hibernate.service.ServiceRegistryBuilder;
    
    import dev.entity.*;
    
    public class Main
    {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args)
    	{
    		// TODO Auto-generated method stub
    		Configuration cfg = new Configuration().configure(); //加载配置文件
    		ServiceRegistry registry = new ServiceRegistryBuilder().applySettings(cfg.getProperties())
    				.buildServiceRegistry(); //在得到SessionFactory之前要先进行注册,Hibernate4新特性
    		
    		SessionFactory factory = cfg.buildSessionFactory(registry);
    		Session session = factory.openSession(); //开启一个session
    		
    		//填充实例bean
    		UserBean user = new UserBean();
    		user.setId(1);
    		user.setName("bruce");
    		user.setPwd("1234567");
    		
    		session.beginTransaction(); //开始一个事务
    		session.save(user); //保存实例对象
    		session.getTransaction().commit(); //提交事务,user会被持久化
    		session.close();
    	}
    
    }
    


    注意,如果使用的是Hibernate3或之前的版本,则不需要注册这一步,即main方法中第二行代码可以省略,cfg.buildSessionFactory()方法不需要参数。


    运行程序,持久化完成。



  • 相关阅读:
    Spacemacs配置yasnippe插件
    设置SSH只允许指定IP才能访问
    firewall的规则设置与命令(白名单设置)
    Docker存储驱动介绍
    elasticsearch启动常见错误
    ES系列:解决Exception in thread “main” java.nio.file.AccessDeniedException: /usr/local/elasticsearch
    ELK6.3.2搭建配置文件篇(filebeat版)
    Linux:sudo,没有找到有效的 sudoers 资源。
    Filebeat安装及使用
    elk + filebeat,6.3.2版本简单搭建,实现我们自己的集中式日志系统
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3162842.html
Copyright © 2020-2023  润新知