zoukankan      html  css  js  c++  java
  • Hibernate环境搭建_ALL

    1、新建java项目
     
    2、创建User Library,加入如下jar
        * HIBERNATE_HOME/hibernate3.jar
        * HIBERNATE_HOME/lib/*.jar
        * MySql jdbc驱动
        
    3、在根目录下,创建hibernate配置文件hibernate.cfg.xml,加入log4j配置文件(log4j.properties)
    <!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.url">jdbc:mysql://localhost/hibernate_first</property>
            <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
            <property name="hibernate.connection.username">root</property>
            <property name="hibernate.connection.password">bjsxt</property>
            <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
            <property name="hibernate.show_sql">true</property>
            //为了方便跟踪sql执行,在hibernate.cfg.xml文件中加入
            <property name="hibernate.show_sql">true</property>
        </session-factory>
    </hibernate-configuration>
    4、定义实体类
    public class User {
        private String id;    
        private String name;
        private Date createTime;
     
        public String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        ........
    }
    5、定义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>
        <class name="com.swpu.hibernate.User">
            <id name="id">
                <generator class="uuid"/>
            </id>
            <property name="name"/>
            <property name="createTime"/>
        </class>
    </hibernate-mapping>
    6、将User.hbml.xml文件加入到hibernate.cfg.xml文件中(注意resource属性中填写的是文件路径)
    <session-factory>
            ...... 
            <mapping resource="com/swpu/hibernate/User.hbm.xml"/>
           ......
    </session-factory>
    7、编写hbm2ddl工具类,将实体类生成数据库表
        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);
        }
    }
    8、开发客户端
     
    ************************************************************
     
    我的环境是:eclipse 、mysql数据库。
     
    一:先创建一个普通的java项目。
     
    步骤:File→new→Project 。如果直接看不到Project 就选择Other →General→Project
    在project name处输入项目名字。其他选项根据需要填写。
     
    二:导入hibernate需要的包。
     
         所需要的包:<!--StartFragment -->
    <!--StartFragment -->
          hibernate3.jar
          ejb3-persistence.jar
          antlr-2.7.6.jar
          commons-collections-3.1.jar
          dom4j-1.6.1.jar
          javassist-3.12.0.GA.jar
          jta-1.1.jar
          slf4j-api-1.6.1.jar
    步骤:点击项目名称右键→Propertise(最后一个属性)→ Java Build Path →Libraries →Add External JARs...
             找到你的包就可以了。
     
    三:导入数据库驱动。
         根据你使用的什么数据库导入什么样的驱动。我这里所用的是mysql
    步骤同导入hibernate包一样。
     
    四:hibernate的配置文件。
            hibernate.cfg.xml
     
    Hibernate.cfg.xml代码  
    <!DOCTYPE hibernate-configuration PUBLIC  
      
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
      
          "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">  
      
    <hibernate-configuration>  
    <!-- sessionFactory -->  
          <session-factory>  
                <!--配置数据库驱动类 -->  
               <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>  
                <!--数据库连接的url ,最后要跟数据库的名称-->  
               <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/school</property>  
                <!--数据库账号 -->  
               <property name="hibernate.connection.username">root</property>  
                <!--数据库密码 -->  
               <property name="hibernate.connection.password">root</property>  
                <!--数据库方言-->  
               <property name="dialect">org.hibernate.dialect.MySQLDialect</property>  
      
               <!--<property name="hibernate.hbm2ddl.auto">create</property>-->  
      
               <property name="hibernate.show_sql">true</property>  
                 
                <!-- 映射实体类配置文件 -->  
               <mapping resource="com/coney/school/model/Teacher.hbm.xml"/>  
      
          </session-factory>  
    </hibernate-configuration>  
       
     
    在这里的时候遇到一个问题:
    在我搭建好环境后。测试时,往数据库里面添加数据。每次添加一条都会覆盖原来的数据。。
    并且,本来设置好的自动增长列也会自动给取消。刚开始还以为是我每次都添加的一条记录标识列没有自动添加上去。
    现在找到根本原因了。。
    原因就是在这个配置文件里面
    <!--<property name="hibernate.hbm2ddl.auto">create</property>-->
    这句。现在注释掉就可以正常添加了。不会覆盖原来的数据。
    这个hibernate.hbm2ddl.auto参数的作用主要用于:自动创建|更新|验证数据库表结构
    详细介绍请看这:
    http://run-wang.iteye.com/blog/1323223
    五:创建实体类并封装好。
    实体类代码  
    public class Teacher {  
      
        private Long tid;  
        private String tname;  
        private String tpwd;  
        private String tclass;  
        private String tschool;  
                //  此处省略掉 get...set...方法  
    }  
     在建这个实体类的时候也出过一个问题,就是命名不对。
    刚开始的时候我的属性名是叫‘tId ,tName.....’ 然后自动生成get。set方法出来。
    getTId ,setTId 。。在启动服务器的时候报错说找不到Teacher类的tId 这个属性。
    看着命名有点怪怪的就怀疑会不会是命名的问题。然后就把tId该成了tid 再生成get。set方法。
    然后就没报错了。。问题是解决了。。可就是不知道原因是什么。。汗。。。
    六:创建实体类的配置文件。(在这里使用的是配置文件来映射实体类。同样也可以用注解来影射)
         Teacher.hbm.xml
    建好后在hibernate.cfg.xml文件里面配置。上面代码有写。但要注意文件的路径。
    实体类映射文件代码  
    <?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.coney.school.model"> <!--  实体类包 -->  
      
    <class name="Teacher" table="teacher"> <!-- name对应实体类名称, table 对应数据库表名 -->  
        <!-- ID name 对应实体类字段,column 数据库表字段-->  
        <id name="tid" type="java.lang.Long" ><!--type :java类型-->  
            <column name="tid"  ><!--column 数据库表字段 not-null:不为空 ,length:长度,default:默认值-->  
                <comment>表ID</comment><!-- 注释 -->  
            </column>  
            <generator class="increment"/> <!--序列生成器, 字段增长 -->  
        </id>  
        <!--其他字段基本上一样,name 实体类字段,column 数据库表字段,length 长度,not-null 不为空 -->  
        <property name="tname" column="tName" length="20" not-null="true"></property>  
        <property name="tpwd" column="tPwd"  length="20" not-null="true"></property>  
        <property name="tclass" column="tClass"  length="20" not-null="true"></property>  
        <property name="tschool" column="tSchool"  length="20" not-null="true"></property>  
    </class>  
      
    </hibernate-mapping>  
     
    七:测试
          建一个测试类。测试连接数据库。并往表里面添加数据。
    测试类代码  
    package com.coney.school.test;  
        
    import org.hibernate.*;   
    import org.hibernate.cfg.Configuration;  
    import com.coney.school.model.Teacher;  
      
    public class TestConn {  
         public static void main(String[] args){   
         Configuration config = new Configuration().configure("hibernate.cfg.xml");  //调用hibernate配置文件,读取配置文件信息。  
         SessionFactory sf = config.buildSessionFactory();   //读完之后,再用这个对象来生成一个SessionFactory  
         Session session = sf.openSession();    
         Transaction tx = session.beginTransaction();    
         tx.begin();  //有了SessionFactory就可以开Session了,可以用事务提交了.  
         Teacher m = new Teacher();     
         m.setTname("小小");  
         m.setTpwd("xx");  
         m.setTclass("小班");  
         m.setTschool("翠花幼儿园");  
         session.save(m);  
         tx.commit(); //提交  
      
      }     
      
    }  
     
    然后去数据里看是否添加成功哦。
    大概就这样了。。当做笔记。。下次不清楚的时候可以来回忆回忆。。嘿嘿。。
    额。把需要的包。。放在附件里面吧。
    在驱动包里面顺便把sqlserver的驱动包也放进去了。
     
  • 相关阅读:
    Python-学习-小例子练习
    Python-学习-import语句导入模块
    Python-类-函数参数-takes 0 positional arguments but 1 was given
    虚拟现实-VR-UE4-构建光照显示光照构建失败,Swarm启动失败
    Qt 实现脉搏检测-2,简陋的功能产品
    Qt 蓝牙部分翻译
    Qt QLabel 播放GIF动画
    Qt 实现脉搏检测-1-心跳曲线部分
    C++学习014函数值传递和地址传递
    Ubuntu 普通用户无法启动Google chrome
  • 原文地址:https://www.cnblogs.com/huapox/p/3251495.html
Copyright © 2011-2022 走看看