天天看点

hibernate入门示例

一、首先加入如下jar包:

hibernate入门示例

二、第二步建立pojo类:

public class User {

private int id;

private String name;

public User() {

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

private int age;

}

三、添加pojo类的映射文件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">

<!-- Generated 2012-8-11 11:32:10 by Hibernate Tools 3.4.0.CR1 -->

<hibernate-mapping  package="com.oraclewdp.entity" >

<!-- 一个映射文件可以写多个类,通常不建议大家去这样做 

 1、多个类情况下,我们可以定义这些类的相同特征在hibernate-mapping

-->

<!-- 这个文件主要用来定义映射:类和表,属性和列 ,类关联和表关联映射-->

    <class name="User" table="TB_USER" lazy="false">

      <!-- 主键映射: -->

        <id name="id" type="int">

            <column name="id" />

            <!-- generator用来配置序列或自动增长列等 -->

           <generator class="native"></generator>

            <!-- 如果你的数据库是oracle,一般情况下需要配置参数,要不然hibernate会使用一个叫hibernate_sequece的序列

            <generator class="native"> -->

            <!-- 指定序列名

             <param name="sequence">STUDENTS_ID_SEQ</param>

          </generator> -->

        </id>

        <!-- 简单属性,

        1、type可以不写,可以写的类型为:全限定名,另外就是Hibernate定义的类型 

        2、column可以省略,列名与name一致

        3、name必须写

        -->

        <property name="name" type="java.lang.String">

            <column name="NAME" />

        </property>

        <property name="age" type="int">

            <column name="AGE" />

        </property>

    </class>

</hibernate-mapping>

四、第三步建立配置文件hibernate.cfg.xml内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

                                         "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

<!-- Hibernate的配置文件,"hibernate."可以省略 ,但是"name"中不能有空格并且主要大小写-->

 <session-factory >

 <!-- 连接到数据库需要的信息 ,以下四个必须配置-->

 <!-- 驱动类,用全限定名 -->

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

  <!-- 连接到数据库的密码 -->

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

  <!-- 连接到数据库的URL -->

  <property name="hibernate.connection.url">jdbc:mysql:///test?useUnicode=true&amp;characterEncoding=utf-8</property>

  <!-- 用户名 -->

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

  <!-- sql 方言,jdbc3+就能自动推测出方言,这项可以不配置-->

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

 <!-- 以下三个都是辅助我们开发,在产品部署后可以禁止 -->

  <!-- 

  create:如果表已经存在,那么首先删除,然后新建

  update:如果表不存在,那么新建表;反之,根据修改后hbm去更新表结构

  create-drop:如果表存在,删之;不存在则新建,并且在程序结束的时候把表删除:适合于做测试

  validate:不会新建表,根据hbm去验证表的结构,如果符合则什么都不做,反之抛出异常

   -->

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

  <!-- 是否显示Hibernate生成的SQL -->

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

  <!-- 对hibernate生成的Sql进行格式化 -->

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

  <!-- 告诉Hibernate映射文件在哪里 -->

  <mapping resource="com/oraclewdp/entity/User.hbm.xml"/>

 </session-factory>

</hibernate-configuration>

五、建立测试类Test.java到吗如下:

import org.hibernate.HibernateException;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.Transaction;

import org.hibernate.cfg.Configuration;

import com.oraclewdp.entity.User;

import com.oraclewdp.util.HibernateUtil;

public class Test {

public static void main(String[] args) {

Configuration cfg=null;

SessionFactory sf=null;

Session session=null;

Transaction tx=null;

User user=null;

try {

//1、建立Confi

cfg=new Configuration().configure();

//2、建立SessionFactory

sf=cfg.buildSessionFactory();

//3、建立Session

       session=sf.openSession();

//4、开启事务

tx=session.beginTransaction();

瞬时状态

user=new User();

user.setId(21);

        user.setAge(23);

user.setName("zs");

session.save(user);//持久态:数据库中有一条记录与之对应;处于持久态的对象,如果对象状态发生了改变,那么在事务提交的会同步到数据库

user.setName("zs3");

//session.flush();//提交缓存

user.setName("lisi");

        tx.commit();//Hibernate默认autocommit是false,如果不写,那么就撤销已经保存的对象

} catch (HibernateException e) {

if (tx!=null) {

tx.rollback();

}

e.printStackTrace();

}finally{

if (session!=null) {

session.close();

}

if (sf!=null) {

sf.close();

}

}

//session关闭后,这个对象就是游离态:曾经与Session关联,但是现在Session关闭了

user.setName("wangwu");

}

}

继续阅读