hibernate的环境搭建以及实例

来源:互联网 发布:linux vi编辑器使用 编辑:程序博客网 时间:2024/06/05 09:00
 

安装配置

下载地址http://www.hibernate.org.。

将下载目录/hibernate3.jar和/lib下的hibernate运行时必须的包加入classpath中:

      antlr.jar,cglib.jar,asm.jar,commons-collections.jar,commons-logging.jar,jta.jar,dom4j.jar

配置文件hibernate.cfg.xml和hibernate.properties,XML和properties两种,这两个文件的作用一样,提供一个即可,推荐XML格式,下载目录/etc下是示例配置文件。

可以在配置文件指定:

      数据库的URL、用户名、密码、JDBC驱动类、方言等。

      启动时Hibernate会在CLASSPATH里找这个配置文件。

映射文件(hbm.xml,对象模型和关系模型的映射)。在/eg目录下有完整的hibernate示例。

总结步骤:

1)创建一个实体类User

2)将hibernate所需要的jar包都构建到项目中

   mysql的驱动

   hibernate3.jar

   lib/required文件夹下的所有jar包

   lib/jpa/jar文件

3)配置文件

   hibernate.cfg.xml---默认文件名

   hibernate.properties   注:两者都存在,前者会覆盖后者

  

   配置信息:驱动、url、用户名、密码、方言、自动创建表格、将hibernate在工作的过程中产生的sql语句输出到控制台中、以及映射文件的位置

<hibernate-configuration>

   <session-factory name="foo">

     <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

     <property name="connection.url">jdbc:mysql:///demo</property>

     <property name="hibernate.connection.username">root</property>

     <property name="connection.password">123</property>

     <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

     <property name="hibernate.hbm2ddl.auto">create</property>

     <property name="hibernate.show_sql">true</property>

    

     <mapping resource="com/hbsi/domain/User.hbm.xml"/>

   </session-factory>

</hibernate-configuration>

4)映射文件

<class name="java中的实体类的类名" table="表名">table属性可以缺省,表示表名和类名一样

<!--java类中的属性映射成表的字段-->

</class>

 

<hibernate-mapping package="com.hbsi.domain">

 

   <class name="User" table="user">

      <id name="java类中作为主键的相应的属性" column="表中的列名">    <!--id用来指明主键,表中列名与主键相同时column可以省略-->

        <generator class="native" /><!--指定主键的生成器,native表示自动增长的生成器-->

      </id>

      <property name="java类中普通的属性的名字" column="表中的列名"/>    <!--映射普通的java属性-->

   </class>

</hibernate-mapping>

User.hbm.xml

<hibernate-mapping package="com.hbsi.domain">----指定java实体类的包

   <class name="User" table="user"> -------说明实体类怎么样映射成表

     <id name="id">

        <generator class="native" />

     </id>

     <property name="name"/>

     <property name="birthday"/>

   </class>

</hibernate-mapping>

javaBean中的代码:

   public static void main(String[] args) {

     // TODO Auto-generated method stub

     //使用hibernate完成将对象存入表中

     Configuration cfg=new Configuration();

     cfg.configure();//完成hibernate的初始化----读取配置文件cfg.configure("/");

     //SessionFactory对象----DriverManager

     SessionFactory sf=cfg.buildSessionFactory();

     //得到Session对象

     Session s=sf.openSession();

     Transaction tx=s.beginTransaction();

     User user=new User();

     user.setName("Tom");

     user.setBirthday(new Date());

     s.save(user);

     tx.commit();

     s.close();

     System.out.println("end");

   }

注:此代码存在很多优化问题,只是为了了解hibernate的使用

输出结果:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".

SLF4J: Defaulting to no-operation (NOP) logger implementation

SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

Hibernate: insert into user (name, birthday) values (?, ?)

end

项目中可能会出现的问题:

(1)驱动找不到

(2)在配置文件中没有指定unknow entity:不认识User实体类-------原因:在配置文件中没有指明映射文件所在的位置

需要添加:<mapping resource="com/hbsi/domain/User.hbm.xml"/>

(3)table"demo.user"does not exist:

解决办法:

1、在mysql下创建一个表

2、在配置文件中添加相应的配置:

<property name="hibernate.hbm2ddl.auto">create</property>

   create-drop:在hibernate初始化时创建表,程序运行结束时表会删除

   create:在hibernate初始化时创建表格(原来有表格的话会将原来的表格删掉)

   update:只是根据映射文件去和数据库中的表对应起来,如果不一致就更新表的结构

   validate:校验映射文件和数据库中的表是不是能够对应起来,不能对应会报错(常用)

(4)表格建好了,但是相应的表格中没有插入记录

   配置文件中增加属性:<property name="hibernate.show_sql">true</property>

   控制台输出:Hibernate: insert into user (name, birthday) values (?, ?)说明插入语句执行了

原因:事物回滚问题:

(增删改一定要有事物的处理)

Transaction tx=s.beginTransaction();开启事物

。。。。。。

tx.commit();//提交事物

 

原创粉丝点击