【SSH框架】--Hibernate入门

来源:互联网 发布:海信电视网络机顶盒 编辑:程序博客网 时间:2024/04/29 16:04


    参考数书籍:轻量级Java EE企业应用实战(第4版)
    Hibernate是轻量级Java EE应用的持久化层解决方案。它不仅管理Java类到数据库表的映射,还提供了数据查询和获取数据的方法,可以大幅度缩短处理数据持久化的时间。Hibernate充当了面向对象的程序设计语言和关系数据库之间的桥梁,允许程序开发者采用面向对象的方式来操作数据库。

    ORM和Hibernate:ORM(Object Relation Mapping)-对象关系数据库映射。ORM完成面向对象的编程语言到关系数据库的映射。

    开源O/R映射框架:


   因为有了Hibernate的支持,使得Java EE 应用的OOAOODOOP一体化。

 

优点:1、开源和免费的License.

        2、轻量级封装,生产力提高,容易调试。

          3、使开发更加对象化(阻抗不匹配)

        4、可移植性。

        5 没有侵入型,支持透明持久化

缺点:1、封装的太彻底,使用数据库特性语句,很难调优。

        2、对大批量数据更新存在问题。

        3、系统中存在大量的统计查询功能

下面通过一个实例来学习Hibernate:

       创建一个Java项目

       创建一个UserLibraries,加入依赖包:HIBERNATE_HOME/lib/*.jar

                                                   HIBERNATE_HOME/hibernate3.jar

                                                   加入数据库驱动(MySql驱动)

       提供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><!-- 指定连接数据库的url,其中test_hibernate是本应用连接的数据库名,我这里和我的项目名称一样 --><property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test_hibernate</property><!-- 指定连接数据库的用户名 --><property name="hibernate.connection.username">root</property><!-- 指定连接数据库的密码 --><property name="hibernate.connection.password">root</property><!-- 指定数据库方言 --><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><!-- 显示Hibernate持久化操作所生成的SQL --><property name="hibernate.show_sql">true</property><!--将SQL脚本进行格式化后再输出 --><property name="hibernate.format_sql">true</property><!-- 罗列所有持久化类的类名 --><mapping resource="com/lf/zym/hibernate/User.hbm.xml"/></session-factory></hibernate-configuration>

       建立实体类User.java

package com.lf.zym.hibernate;import java.util.Date;/* * User实体类 */public class User {//IDprivate 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 Date getExpireTime() {return expireTime;}public void setExpireTime(Date expireTime) {this.expireTime = expireTime;}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;}}

       提供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.lf.zym.hibernate.User"><id name="id"><generator class="uuid"/></id><property name="name"></property><property name="password"></property><property name="createTime"></property><property name="expireTime"></property></class></hibernate-mapping>

       将User.hbm.xml文件加入到hibernate.cfg.cml文件中:上边的代码中已经加入到了文件中。

       编写工具类ExportDB.java,将hbm生成ddl.也就是hmb2ddl

package com.lf.zym.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(); SchemaExport export=new SchemaExport(cfg); export.create(true, true);}}

       建立客户端类Client,添加用户数据到MySql:

package com.lf.zym.hibernate;import java.util.Date;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;public class Client {/** * @param args */public static void main(String[] args) {//读取hibernate.cfg.xml文件Configuration cfg=new Configuration().configure();//建立SessionFactorySessionFactory factory=cfg.buildSessionFactory();//取得sessionSession 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.close();}}}}}

      当Java程序以面向对象的方式来操作持久化对象时,Hibernate负责将这种操作转换为底层SQL操作。所有,当程序运行结束后,可以看到Hibernate数据库中增加了一个User表。  



3 0