• 新手上路之Hibernate:第一个Hibernate例子


    一、Hibernate概述

    (一)什么是Hibernate?

    Hibernate核心内容是ORM(关系对象模型)。可以将对象自动的生成数据库中的信息,使得开发更加的面向对象。这样作为程序员就可以使用面向对象的思想来操作数据库,而不用关心繁琐的JDBC。所以,Hibernate处于三层架构中的D层(持久层)。

    (二)使用Hibernate的优点

    1、Hibernate可以使用在java的任何项目中,不一定非要使用在java web项目中。因为Hibernate不需要类似于tomact这些容器的支持,可以直接通过一个main方法进行测试。

    2、通过下面的实例,可以发现使用Hibernate可以大大减少代码量。

    3、由于使用了Hibernate,代码中不涉及具体的JDBC语句,所以就方便了代码的可移植性。

    二、Hibernate开发的环境搭建

    (一)Hibernate的环境搭建非常简单,只需要引入Hibernate核心包(单击下载)以及Hibernate依赖包(单击下载)即可。
    (二)加入数据库驱动。下面的例子中主要是采用Mysql数据库来演示的,所以在这里引入MysqL的JDBC驱动(点击下载)。
    (三)提供核心配置文件hibernate.cfg.xml文件(在src文件夹下即可)。其中的配置如下(针对mysql)
    <!DOCTYPE hibernate-configuration PUBLIC
    	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    	"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    
    <hibernate-configuration>
    	<session-factory >
    		<!-- mysql数据库驱动 -->
    		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    		<!-- mysql数据库名称 -->
    		<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property>
    		<!-- 数据库的登陆用户名 -->
    		<property name="hibernate.connection.username">root</property>
    		<!-- 数据库的登陆密码 -->
    		<property name="hibernate.connection.password">root</property>
    		<!-- 方言:为每一种数据库提供适配器,方便转换 -->
    		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    		
    	</session-factory>
    </hibernate-configuration>

    三、HIbernate第一个实例

    该实例的目录结构如下
    说明:最后一个HIBERNATE3里面包含了所有的需要引用的jar包

    1、新建一个普通的java项目,按照上面的步骤引入相关的jar包和配置文件

    2、建立User实体类
    import java.util.Date;
    
    public class User {
    	private String id;
    	private String username;
    	private String password;
    	private Date createTime;
    	private Date expireTime;
    	
    	public String getId() {
    		return id;
    	}
    	public void setId(String id) {
    		this.id = id;
    	}
    	public String getUsername() {
    		return username;
    	}
    	public void setUsername(String userName) {
    		this.username = userName;
    	}
    	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;
    	}
    }

    2、提供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>
    	<class name="com.example.hibernate.User">
    		<id name="id">
    			<generator class="uuid"/>
    		</id>
    		<property name="username"/>
    		<property name="password"/>
    		<property name="createTime"/>
    		<property name="expireTime"/>
    	</class>
    </hibernate-mapping>
    其中的property标签是将要生成是数据库表中的字段,在这里不用关心各个字段是什么类型的。因为Hibernate会根据上面的实体类中属性的类型来决定将来表中字段的类型

    3、配置hibernate.cfg.xml文件
    <hibernate-configuration>
    	<session-factory >
    		<!-- mysql数据库驱动 -->
    		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    		<!-- mysql数据库名称 -->
    		<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property>
    		<!-- 数据库的登陆用户名 -->
    		<property name="hibernate.connection.username">root</property>
    		<!-- 数据库的登陆密码 -->
    		<property name="hibernate.connection.password">root</property>
    		<!-- 方言:为每一种数据库提供适配器,方便转换 -->
    		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    		
    		<mapping resource="com/example/hibernate/User.hbm.xml"/>
    	</session-factory>
    </hibernate-configuration>
    注意:必须是“/”而不能是“.”。
    4、生成表:编写工具类ExoprtDB.java,将hbm生成ddl
    import org.hibernate.cfg.Configuration;
    import org.hibernate.tool.hbm2ddl.SchemaExport;
    /**
     * 将hbm生成ddl
     * @author BCH
     *
     */
    public class ExoprtDB {
    
    	public static void main(String[] args) {
    		//默认读取hibernate.cfg.xml文件
    		Configuration cfr = new Configuration().configure();
    		
    		SchemaExport export = new SchemaExport(cfr);
    		export.create(true, true);
    	}
    }
    
    到这里就可以生成User表了,但是如果直接运行ExoprtDB.java文件是不能生成User表的。因为在mysql数据中还没有建立数据库Hibernate-first。所以在mysql控制台中通过create database hibernate-first; use hibernate-first;之后再执行ExoprtDB.java文件就可以生成表了。

    5、向表中添加数据
    import java.util.Date;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    
    public class Client {
    	public static void main(String[] args) {
    		//读取配置文件
    		Configuration cfg = new Configuration().configure();
    		
    		SessionFactory factory = cfg.buildSessionFactory();
    		
    		Session session = null;
    		try{
    			session = factory.openSession();
    			//开启事务
    			session.beginTransaction();
    			
    			User user = new User();
    			user.setUsername("用户名");
    			user.setPassword("123");
    			user.setCreateTime(new Date());
    			user.setExpireTime(new Date());
    			
    			session.save(user);
    			//提交事务
    			session.getTransaction().commit();
    			
    		}catch(Exception e){
    			e.printStackTrace();
    			//回滚事务
    			session.getTransaction().rollback();
    		}finally{
    			if(session != null){
    				if(session.isOpen()){
    					//关闭session
    					session.close();
    				}
    			}
    		}
    	}
    }

    执行该java文件就可以完成向表中增加数据了,效果如下


    (四)总结

    通过上面的代码我们可以看出,在代码中没有涉及到任何有关JDBC的代码,作为开发人员只需要写好相应的实体类,然后通过配置就可以实现了表的建立以及向表中实现数据的插入。
    在代码中有许多Hibernate的核心对象,例如Configuration、SessionFactory、Session等等。这些内容将在以后介绍。

  • 相关阅读:
    工作之余
    用MFC如何高效地绘图
    C++运算符优先级
    CentOS5.9下用Kate
    3G门户网(3G.cn) 招聘 软件测试工程师
    深圳市东润信息咨询有限公司招聘职位: 3G无线产品经理
    广州杰赛科技股份有限公司 招聘 技术中心3G协议软件工程师
    3G门户网(3G.cn) 招聘 手机游戏开发工程师
    3G门户网(3G.cn) 招聘 技术支持工程师
    3G工程师:三大热门的3G职业资格培训认证
  • 原文地址:https://www.cnblogs.com/jinxiang1224/p/8468214.html
Copyright © 2020-2023  润新知