zoukankan      html  css  js  c++  java
  • Hibernate:HIbernate配置详解-HelloWorld

    hibernate介绍:

         Hibernate是一个开源的对象关系映射框架,它对JDBC进行了轻量级的对象封装,使Java程序员可以随心所欲的使用对象编程思维来操纵数据库

    它不仅提供了从java类到数据库表之间的映射,也提供了数据查询和恢复机制。相对于使用JDBC和SQL来手工操作数据库,Hibernate可以大大减少

    操作数据库的工作量。另外Hibernate可以利用代理模式简化载入类的过程,这将大大减少利用Hql从数据库提取数据的代码编写量,从而节约开发时间

    和开发成本Hibernate可以和多种web服务器或者应用服务器良好集成,如今已经支持几乎所有的流行数据库服务器。

     

    2. Hibernate原理:

         Hibernate技术本质上是一个提供数据库服务的中间件。Hibernate的工作原理,他是利用数据库以及其他一些配置文件如:hibernate.cfg.xml,

    xxx.hbm.xml等来为应用程序提供数据持久化服务的。

    1.   Configuration来读取hibernate.cfg.xml文件
    2.   使用Configuration对象创建SessionFactory
    3.   用SessionFactory来打开一个Session
    4.   创建事务Transaction
    5.   begin事务
    6.   使用Session进行数据库操作
    7.   关闭或回滚事务
    8.   关闭Session

    3. 配置Hibernate 声明:我使用的是JDK1.7,Hibernate3.6.0

      3.1 导入相关Jar包:Hibernate模式不只是自己内部实现,同样也导入了许多外部的jar包,下面是Hibernate3.6.0框架的基本jar包

        我使用的是mysql数据库,可以根据自己使用的数据库添加相关驱动Jar包

      3.2 先创建一个User实体

     1 package com.a_helloworld;
     2 
     3 public class User {
     4 
     5     private int id;
     6     private String name;
     7     public int getId() {
     8         return id;
     9     }
    10     public void setId(int id) {
    11         this.id = id;
    12     }
    13     public String getName() {
    14         return name;
    15     }
    16     public void setName(String name) {
    17         this.name = name;
    18     }
    19     
    20     @Override
    21     public String toString() {
    22         return "User [id=" + id + ", name=" + name + "]";
    23     }
    24     
    25     
    26 }

      3.3 配置User实体在数据库表的映射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 package="com.a_helloworld">
        
        <!-- 属性table 表示在数据库中的表名  -->
        <class name="User" table="user_1" >
            <id name="id" column="id" type="int">
                <!-- 值native表示会根据数据库来创建不同的主键生成策略 -->
                <generator class="native"></generator>
            </id>
            <property name="name" column="name" type="string"></property>
        </class>
    </hibernate-mapping>

      3.4 简单配置hibernate.cfg.xml配置文件,这个文件名可以随便修改(xxx.cfg.xml),但是没多大意义,一般不建议修改。配置的信息如下:

        

     1 <!DOCTYPE hibernate-configuration PUBLIC
     2     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
     3     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
     4 
     5 <hibernate-configuration>
     6     <session-factory name="foo">
     7     
     8         <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
     9         <property name="connection.username">root</property>
    10         <property name="connection.password">123456</property>
    11         <property name="connection.url">jdbc:mysql:///user</property>
    12         
    13         <!-- 要根据自己使用的数据库来配置相对应的属性,也成方言,针对不同数据库
    14              关于怎么配置可以查看HibernateAPI
    15          -->
    16         <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    17         
    18         <!-- Hibernate 創建的SQL語句会显示在控制台 -->
    19         <property name="hibernate.show_sql">true</property>
    20         
    21         <!-- 选择方案,常用值:validate | update | create | create-drop -->
    22         <property name="hbm2ddl.auto">update</property>
    23         
    24         <mapping resource="com/a_helloworld/user.hbm.xml"/> -- 导入实体映射配置,程序每次启动都会自动检索
    25         
    26     </session-factory>
    27 </hibernate-configuration>

    以上Hibernate简单配置已经基本完成,可以添加一个测试类来测试是否成功

        

    package com.a_helloworld;
    
    
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.Session;
    import org.junit.Test;
    
    public class Demo {
    
        private static SessionFactory sf = new Configuration()//
                .configure("hibernate.cfg.xml")//
                .buildSessionFactory();
        
        @Test
        public void addUser(){
            Session session = null;
            Transaction tran = null;
            try{
                session = sf.openSession(); // 创建一个Session
                tran = session.beginTransaction(); //开启事务
                
                User user = new User();
                user.setName("张三");
                session.save(user);
                
                tran.commit();//事务提交
            }catch(Exception e){
                tran.rollback(); //事务回滚
                throw(e);
            }finally{
                session.close(); //关闭session
            }
        }
        
        @Test
        public void getUser(){
            Session session = null;
            Transaction tran = null;
            try{
                session = sf.openSession(); // 创建一个Session
                tran = session.beginTransaction(); //开启事务
                
                /*这里指明你要获得哪个类型,Hibernate会根据类名查询映射配置文件到数据库查询哪张表,根据指定
                 * id查询实体,通过反射机制创建实体对象
                */
                User user = (User) session.get(User.class, 1); //执行查询,get
                
                tran.commit();//事务提交
            }catch(Exception e){
                tran.rollback(); //事务回滚
                throw(e);
            }finally{
                session.close(); //关闭session
            }
        }
        @Test
        public void updateUser(){
            Session session = null;
            Transaction tran = null;
            try{
                session = sf.openSession(); // 创建一个Session
                tran = session.beginTransaction(); //开启事务
                
                User user = new User();            
                user.setId(1);//这里指定了要更新的数据id为1
                user.setName("李四");// 把名字 “张三” 修改为 “李四”        
                session.update(user);//执行更新    
                
                tran.commit();//事务提交
            }catch(Exception e){
                tran.rollback(); //事务回滚
                throw(e);
            }finally{
                session.close(); //关闭session
            }
        }
        
        @Test
        public void deleteUser(){
            Session session = null;
            Transaction tran = null;
            try{
                session = sf.openSession(); // 创建一个Session
                tran = session.beginTransaction(); //开启事务
                
                User user = new User();
                user.setId(1);//这里指定了要更新的数据id为1
                session.delete(user); //执行删除
                
                tran.commit();//事务提交
            }catch(Exception e){
                tran.rollback(); //事务回滚
                throw(e);
            }finally{
                session.close(); //关闭session
            }
        }
        
    }

      如需转载请说明出处:http://www.cnblogs.com/gudu1/p/6879990.html 

  • 相关阅读:
    幻方~未完待续
    过河(DP)
    生日蛋糕(DFS)
    n皇后问题<dfs>
    POJ 1182_食物链
    POJ 2431 Expedition【贪心】
    POJ 3268_Silver Cow Party
    POJ 1061 青蛙的约会【扩欧】
    【数学】扩展欧几里得算法
    Codeforces 404D Minesweeper 1D
  • 原文地址:https://www.cnblogs.com/gudu1/p/6879990.html
Copyright © 2011-2022 走看看