• 【Hibernate】--第一个实例:实现数据表的创建与数据导入


        上篇已经简单介绍了Hibernate的基础知识,对一些文字上的内容,理解起来也许并不是那么的容易。下面就以一个小例子来开始Hibernate的学习之旅。本实例是应用Java程序来创建数据表,并且实现数据的简单添加。

        首先创建一个普通的Java程序,引入基本的jar包和创建基本类,具体如下:

                  


        hibernate.cfg.xml的配置信息如下:    

    <!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="hibernate.connection.driver_class" >com.mysql.jdbc.Driver</property>
    	<!--  配置连接库 表示连接本地库,库名为hibernate_demo1-->
    	  <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_demo1</property>
    	  <!-- 连接数据库的登录名 -->
    	  <property name="hibernate.connection.username">root</property>
    	  <!-- 数据库密码 -->
    	  <property name="hibernate.connection.password">root</property>
    	  <!-- 数据库的转换配置,适配器 -->
    	  <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    	  <!-- 配置在控制台显示sql语句 -->
    	  <property name="hibernate.show_sql">true</property>
    	  <!-- 配置映射 ,对应所建的User映射-->
    	  <mapping resource="com/tgb/hibernate/User.hbm.xml"/>
    	</session-factory>
    </hibernate-configuration>
             上述配置主要是对数据库的连接建立关联,使用MySQL数据库。并且与我们的映射文件建立联系

         用户实体类:User.java       

    package com.tgb.hibernate;
    
    import java.util.Date;
    /**
     * 用户实体类
     * @author victor
     *
     */
    public class User {
      private String id;  //主键
      private String name; //姓名
      private String password;  //密码
      private Date createTime;  //创建时间
      private Date expireTime;  //失效时间
    public String getId() {
    	return id;
    }
    public void setId(String id) {
    	this.id = id;
    }
    public String getName() {
    	return name;
    }
    public void setName(String name) {
    	this.name = name;
    }
    public String getPassword() {
    	return password;
    }
    public void setPassword(String password) {
    	this.password = password;
    }
    public Date getCreateTime() {
    	return createTime;
    }
    public void setCreateTime(Date createTime) {
    	this.createTime = createTime;
    }
    public Date getExpireTime() {
    	return expireTime;
    }
    public void setExpireTime(Date expireTime) {
    	this.expireTime = expireTime;
    }
    }
    

        映射文件信息:User.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>
      <!-- 建立数据表映射 -->
      <!-- name值表示是所建的实体类路径,会在数据库中创建相对应的表 -->
      <class name="com.tgb.hibernate.User">
      <!-- id标签表示主键,name的值是字段名。此处表示以id为主键。 -->
        <!-- 若想要另取名,使用colum属性来赋值。
                例如:column="user_id",则数据表中存的是user_id,但是实体类仍然是id,他们之间自动创建映射关系 -->
        <id name="id">
        <!-- generator标签表示主键是自动生成 -->
          <generator class="uuid" />
        </id>
        <!-- property标签是指表的其他属性,name值表示字段名 -->
        <property name="name" />
        <property name="password" />
        <property name="createTime" />
        <property name="expireTime" />
      </class>
    </hibernate-mapping>

         创建表的类代码如下:ExportDB.java       

    package com.tgb.hibernate;
    
    import org.hibernate.cfg.Configuration;
    import org.hibernate.tool.hbm2ddl.SchemaExport;
    
    /**
     * 创建表类
     * @author victor
     *
     */
    public class ExportDB {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		
    		/*默认读取hibernate.cfg.xml*/
           Configuration cfg=new Configuration().configure();
           
           SchemaExport export=new SchemaExport(cfg);
           //进行创建表,第一个表示将值打印到控制台,第二个表示创建到数据库
           export.create(true, true);
    	}
    
    }
    

         添加数据的类:ImportData.java        

    package com.tgb.hibernate;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    
    public class ImportData {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    //      读取配置
    		Configuration cfg=new Configuration().configure();
    //		创建sessionFactory
    		SessionFactory factory=cfg.buildSessionFactory();
    //		获取session
    		Session session=null;
    		try{
    			session=factory.openSession();
    //			开启事务
    			session.beginTransaction();
    			SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    			User user=new User();
    			user.setName("victor");
    			user.setPassword("123");
    			/*user.setCreateTime(new Date());
    			user.setExpireTime(new Date());*/
    			user.setCreateTime(formatter.parse( formatter.format(new Date())));
    			user.setExpireTime(formatter.parse(formatter.format(new Date())));
    			System.out.println(new Date());
    		   System.out.println(formatter.parse((formatter.format(new Date()))));
    		       
    			
    //			保存数据
    			session.save(user);
    //			提交事务,获取当前的事务并提交
    			session.getTransaction().commit();
    		}
    		catch(Exception e){
    			e.printStackTrace();
    //			回滚
    			session.getTransaction().rollback();
    		}finally{
    //			关闭session
    			if(session !=null){
    				if(session.isOpen()){
    					session.close();
    				}
    			}
    		}
    	}
    
    }
    

        至此,功能所需要的文件建立完毕,首先我们需要在数据库中建立一个与hibernate.cfg.xml中配置的库名一致的数据库,名为hibernate_demo1。然后运行ExportDB.java类,创建数据表。最后运行ImportData.java来添加数据。 

       

        此过程是一个简单的 Hibernate框架应用,通过简单的功能实现,能够初步了解Hibernate框架的使用过程,知道了这几种核心文件的使用方式与关联的方法。接下来就要开启更加系统而又细致的Hibernate框架学习之旅。


        在这个过程中,遇到了一个经常遇到的问题,关于时间格式问题,具体解决过程见下篇。


  • 相关阅读:
    一个matlab小程序:挑出沪市A股年报与一季度报在同一天发布的股票
    AWK
    matlab搜索路径
    从新浪财经上下载交易明细数据并统计每天的买卖笔数(shell 命令行)
    AWK截取字符串
    tar GNU
    工作效率上的错觉(转载)
    matlab双精度浮点数编码及区间覆盖(原创)
    DNS服务器设置(Ubuntu10.04)
    sed
  • 原文地址:https://www.cnblogs.com/victor-grace/p/7253661.html
Copyright © 2020-2023  润新知