【Hibernate】简单应用实例

18 篇文章 2 订阅
13 篇文章 0 订阅
【回顾】
    在上篇博客中,我们对Hibernate有了一个宏观认识,它是一个比较经典的持久层框架,给我们的开发带来了很大的优势。本篇博客,就开始从实例出发,继续学习Hibernate。
【环境搭建】
    1. 建立java项目。它不像Struts需要建立Web Project,它不需要容器支持,普通的项目就可以。
    2. 引入jar包。包括:Hibernate lib下所有的jar文件、Hibernate3.jar和mysql数据库驱动的jar包。
    3. 提供缺省配置文件,Hibernate.cfg.xml.以前Hibernate配置的方式是通过properties文件,现在用的都是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>
        <!-- mysql数据库连接驱动 -->
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <!-- 数据库连接地址 -->
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property>
        <!-- 连接数据库用户名和密码 -->
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">123456</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    </session-factory>
</hibernate-configuration>
【开发步骤】
    1. 建立User实体类。
package com.bjpowernode.hibernate;
import java.util.Date;
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;
    }
}
    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>
    <!-- 将会在数据库中建立一个User表,默认名称与User类名相同,也可以用table属性对表名进行重命名 -->
    <class name="com.bjpowernode.hibernate.User">
    <!-- 给表提供一个标识,也就是主键,同样需要提供生成策略,是数据库自增,还是手动增 -->
        <id name="id">
            <!-- 生成器,自动生成主键  -->
            <generator class="uuid"/>
        </id>
    <!-- 该表的其它字段,默认列名为name的属性值,也可以用column属性对字段进行重命名 -->
        <property name="name"/>
        <property name="password"/>
        <property name="createTime"/>
        <property name="expireTime"/>
    </class>
</hibernate-mapping>  
    至此,通过建立User.java实体类和User.hbm.xml文件,完成了实体类与数据库表的映射。但Hibernate并不知道,所以还需要我们在Hibernate的核心配置文件中对它们进行配置。
    3. 将User.hbm.xml加入到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>
        ......
        <!-- 添加实体类映射文件配置,提供该文件的路径。中间的'.'号都需要改写成'/' -->
        <mapping resource="com/bjpowernode/hibernate/User.hbm.xml"/>
    </session-factory>
</hibernate-configuration>
    4. 建立工具类,将映射文件生成表,测试是否成功建表。
package com.bjpowernode.hibernate;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
//将hbm生成ddl
public class ExportDB {
    public static void main(String[] args) {        
       //默认读取hibernate.cfg.xml文件
        Configuration cfg = new Configuration().configure();  
        //Commandline tool to export table schema to the database. This class may also be called from inside an application.  
        SchemaExport export = new SchemaExport(cfg);
        //将ddl打印到控制台,输入到数据库
        export.create(true, true);
    }
}  
    执行,可以在控制台看到如下结果:


    并且在数据库中也以建立好User表。

    5. 建立客户端类Client,保存数据到mysql。
package com.bjpowernode.hibernate;
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) {       
        //读取hibernate.cfg.xml文件
        Configuration cfg = new Configuration().configure();
        //建立SessionFactory
        SessionFactory factory = cfg.buildSessionFactory();
        //取得session
        Session session = null;
        try {
            session = factory.openSession();
            //开启事务
            session.beginTransaction();
            User user = new User();
            user.setName("张三");
            user.setPassword("123");
            user.setCreateTime(new Date());
            user.setExpireTime(new Date());            
            //保存User对象
            session.save(user);        
            //提交事务
            session.getTransaction().commit();
        }catch(Exception e) {
            e.printStackTrace();
            //回滚事务
            session.getTransaction().rollback();
        }finally {
            if (session != null) {
                if (session.isOpen()) {
                    //关闭session
                    session.close();
                }
            }
        }
    }
}
    这样,我们就可以将数据保存到用户表中。和之前不同的是,我们不用再写insert sql语句,用Hibernate提供的save语句即可。并且我们可以在hibernate.cfg.xml文件中将hibernate.show_sql设置为true,我们就可以在控制台看到其执行的sql语句,方便了我们观察sql的生成。
【开发比较】
    本次开发以保存用户为例,如果按照之前的做法,我们需要去数据库建表,然后写一系列的jdbc代码,连接数据库、执行sql、关闭数据库等。但Hibernate,它更好地实现了面向对象设计,我们不再需要关注数据库表方面,我们只需要去代码中编写各个类即可。
    但Hibernate封装的太彻底,如果系统中需要用到更多的数据库特性方面的东西,就不容易控制了。
【总结】
    之前在敲网上商城的时候,用的是Struts+Spring+Hibernate框架的集成,很多东西都不太清楚它是什么,或者它属于谁。通过这样单独框架的学习过程,从最初的来源、原理以及简单的实例,才让自己明白其中某些东西的来源及作用。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值