首页 > 其他 > 详细

第一个Hibernate项目

时间:2014-02-24 06:58:08      阅读:324      评论:0      收藏:0      [点我收藏+]
bubuko.com,布布扣

内容提要:

  • 软件项目的分层情况
  • 持久化技术
  • Hibernate简介
  • 第一个Hibernate项目的开发
  • Hibernate中重要的类介绍

 

1.java web 项目的分层

  • 表示层
  • 控制层
  • 业务逻辑层
  • 持久化层:对象持久化

    数据库

    分层的目的是:通过层之间自上而下的抽象依赖来降低程序耦合度(解耦)

     

    2.持久层

    (1)什么是持久化

    持久化就是把数据持久保持在可掉电的存储设备中

    存储方式有

    • 文件形式(如:XML文件)
    • 数据库形式

    一般的企业应用中,是将内存中的数据,持久保持在关系数据库中

    (2)什么是对象持久化

    对象持久化是指:将对象的状态持久化的保存为数据库中表的记录

    在关系数据库中数据的表现形式是表,存储形式是记录

    在面向对象(OOP)中数据的表现形式的类,存储形式是对象的状态

     

    3.ORM

    (1)ORM

    O:Object 指对象

    R:Relation 指关系

    M:Mapping 指映射

    (2)为什么需要ORM

    在高级编程语言里,都是面向对象(OOP)的,类和对象 ,主要概念有:继承,关联,多态等;

    在关系数据库里,是关系表和记录 ,主要概念有:表,主键,外键等

    OOP与传统关系型数据库存在不匹配问题

    解决不匹配的方法

    • 使用JDBC手工转换
    • 使用ORM(Object Relation Mapping对象关系映射)框架来解决,主流的ORM框架有Hibernate,TopLink,OJB

    (3)ORM映射基础

    数据库中的表结构和类结构的映射

    表中的记录和对象的映射

    表的主键和对象ID的映射(OID)

    表的字段和类的属性的映射

     

     

    什么是Hibernate?

    bubuko.com,布布扣

    Hibernate之父:Gavin King

    JBoss核心成员之一

    EJB3.0专家委员会成员

    《Hibernate In Action》作者

    2001年开始开发Hibernate

    2003年Hibernate发展为Java世界主流持久层框架

    充满激情

    脾气倔强

    永不言败

     

    Hibernate一个开源的Java ORM 框架
    提供了一种,强大的对象到关系数据库的映射机制
    强大的查询功能
    Hibernate官方网址:http://www.hibernate.org
    Hibernate归属于JBoss社团,Hibernate3这个版本已经相当成熟,我们学习3.6这个版本
    Hibernate第一个版本在2001年底推出,目前最新版本4.x
    Hibernate的优势
    提高开发效率
    更贴近于OO(OOA、OOD、OOP)思想
    轻量级、无侵入性
    开源、成熟、流行

     

    Hibernate3.6软件包介绍

     

    第一个Hibernate项目

    使用框架最重要的就是导入jar包添加配置文件

    配置文件主要有hibernate.cfg.xml 和 hibernate.properties

    xml和properties两种,这两个文件的作用是一样的,添加一个就行,推荐用xml格式的

    在下载的hibernate软件包的/etc目录下有示例配置文件。

    在配置文件中可以指定:

    数据库的url, 用户名,密码,JDBC驱动类,方言等

    启动Hibernate会在类路径下找这个配置文件

    实体映射文件(hbm.xml,对象模型和关系模型映射)

     

    第一个项目的开发步骤:

    1.创建一个实体类User.java

    User.java

    bubuko.com,布布扣
    package com.xunpoit.entity;
    
    public class User {
        private int id;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        private String name;
        private String password;
    
        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;
        }
    
    }
    bubuko.com,布布扣

    添加实体映射配置文件User.hbm.xml 与实体类同目录

    User.hbm.xml

    bubuko.com,布布扣
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    
    
    <hibernate-mapping package="com.xunpoit.entity">
        <class name="User" table="t_user">
            <id name="id">
                <generator class="native" />
            </id>
            <property name="name" type="string" length="255" column="name" not-null="true" />
            <property name="password" type="string" length="20" column="password" not-null="true" />
        </class>
    </hibernate-mapping>
    bubuko.com,布布扣

    添加Hibernate核心配置文件 hibernate.cfg.xml到src目录下

    hibernate.cfg.xml

    bubuko.com,布布扣
    <!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>
            <property name="show_sql">true</property>
            <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
            <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
            <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/testhibernate</property>
            <property name="hibernate.connection.username">root</property>
            <property name="hibernate.connection.password">962297fabaoyi</property>
            <mapping resource="com/xunpoit/entity/User.hbm.xml"/>
        </session-factory>
    </hibernate-configuration>
    bubuko.com,布布扣

    在类路径下添加log4j.properties

    log4j.properties

    bubuko.com,布布扣
    ### direct log messages to stdout ###
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target=System.out
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
    
    ### direct messages to file hibernate.log ###
    #log4j.appender.file=org.apache.log4j.FileAppender
    #log4j.appender.file.File=hibernate.log
    #log4j.appender.file.layout=org.apache.log4j.PatternLayout
    #log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
    
    ### set log levels - for more verbose logging change ‘info‘ to ‘debug‘ ###
    
    log4j.rootLogger=warn, stdout
    
    #log4j.logger.org.hibernate=info
    log4j.logger.org.hibernate=warn
    
    ### log HQL query parser activity
    #log4j.logger.org.hibernate.hql.ast.AST=debug
    
    ### log just the SQL
    #log4j.logger.org.hibernate.SQL=debug
    
    ### log JDBC bind parameters ###
    log4j.logger.org.hibernate.type=warn
    #log4j.logger.org.hibernate.type=debug
    
    ### log schema export/update ###
    log4j.logger.org.hibernate.tool.hbm2ddl=warn
    
    ### log HQL parse trees
    #log4j.logger.org.hibernate.hql=debug
    
    ### log cache activity ###
    #log4j.logger.org.hibernate.cache=debug
    
    ### log transaction activity
    #log4j.logger.org.hibernate.transaction=debug
    
    ### log JDBC resource acquisition
    #log4j.logger.org.hibernate.jdbc=debug
    
    ### enable the following line if you want to track down connection ###
    ### leakages when using DriverManagerConnectionProvider ###
    #log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace
    bubuko.com,布布扣

    创建UserManager.java类 来测试向数据库添加一条数据

    bubuko.com,布布扣
    package com.xunpoit.manager;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.tool.hbm2ddl.SchemaExport;
    
    import com.xunpoit.entity.User;
    
    public class UserManager {
        public static void main(String[] args) {
            
            Configuration config = new Configuration().configure();
            SchemaExport export = new SchemaExport(config);
            export.create(true, true);
            SessionFactory factory = config.buildSessionFactory();
            Session session = factory.openSession();
            
            User user = new User();
            user.setName("张三");
            user.setPassword("123456");
            
            Transaction tran = session.beginTransaction();
            session.save(user);
            tran.commit();
    
        }
    }
    bubuko.com,布布扣

  • 在mysql数据库创建数据库 testhibernate

     

    然后运行UserManager

     

    可看到在数据库testhibernate中,hibernate自动根据实体映射文件创建了表,并插入了一条数据。

     

    Hibernate中重要的类的介绍(核心接口)

    SessionFactory 保存了对应当前数据库配置的所有映射关系,负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。初始化复杂、费时,一般一个应用中有一个实例就以了,它是线程安全的。


    Session 是hibernate持久化操作的基础,所有的持久化操作都是在Session基础上完成的,相当于JDBC中的Connection;它关联了数据库对象,同时它也是Transaction的工厂,Session中提供了一系列的持久化操作的方法。


    Transaction 事务,这个对象由Session产生,生命周期短于Session,也就是说,一个Session可以包括多个事务

    ConnectionProvider 用于生成与数据库的连接对象,同时,它也是数据库连接的缓冲池


    TransactionFactory 产生Transaction的工厂

    第一个Hibernate项目

    原文:http://www.cnblogs.com/fabaoyi/p/3562026.html

    (0)
    (0)
       
    举报
    评论 一句话评论(0
    关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
    © 2014 bubuko.com 版权所有
    打开技术之扣,分享程序人生!