javaSe中使用Hibernate

   hibernate可用在javaSe中也可以用在javaSe中,在javaSe中使用的常规流程是:

hibernate配置文件
<?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">
<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration >
    <session-factory>
         <!-- 
                              可以在对应jar包下众多方言中选择一种适合自己的方言
         -->
        <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
        <property name="connection.url">jdbc:oracle:thin:@localhost:1521:ORCL</property>
        <property name="connection.username">EMG</property>
        <property name="connection.password">lgyw1236987</property>
        <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
        <property name="myeclipse.connection.profile">oracle.jdbc.driver.OracleDriver</property>
         <!--
                               自动根据配置文件创建表
           create:每次执行都重新创建新表,之前的记录都丢失
           update:每次执行都更新操作,之前的记录保留。
          -->
        <property name="hibernate.hbm2ddl.auto">update</property>
        <property name="show_sql">true</property>
        <mapping resource="News.hbm.xml"/>
        <mapping resource="Person.hbm.xml"/>
    </session-factory>
</hibernate-configuration>



表映射文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--hibernate-mapping的属性简介;
  default-lazy:默认是true,不应该关闭延迟加载策略,例如当加载一个teacher对象,且该Teacher对象有
  N个关联的Student对象,如果关闭延迟加载策略,则hibernate在加载teacher时候会自动加载所有的student
  对象,如果该teacher有一万个关联student对象,深圳更多,而程序仅需要访问teacher对象,则依次加载这些studetn
  对象纯属多余。
 default-access:则用来说明hibernate是通过反射访问类的getter、setter方法来访问属性的。
 default-cascade:默认的级联级别为none,可以在指定表中设置该属性来覆盖此处的默认设置。
   注意:上处三个属性都是指定hibernate默认的,可以在具体的表或字段中设置来覆盖此处的设置。
 package:指定一个包的前缀,如果calss标签属性name没有完成的类名就加上package的属性值组成完成的类
 auto-import:true:表示处于不同包下的两个名称相同的类映射同一个表。false:表示映射两个不同的表
  -->        
<hibernate-mapping default-lazy="true" default-access="property" >
    <!-- 
     class标签的属性简介:
     1 table:表示映射到数据库中的表的名称,默认的是类的名称
     2 mutable:用于指定持久化类的实例是可变的还是不可变的,只有true、false可选
     3 proxy:指定一个借口,在延迟加载时作为代理使用,也可以在这里指定该类的自己的名字
     -->
    <class name="com.supan.bean.News" dynamic-update="true" dynamic-insert="true">
        <id name="id" column="id" type="integer">
            <generator class="native"/>
        </id>
        <property name="title" type="string">
            <column name="username" length="20"/>
        </property>
        <property name="content" type="string">
            <column name="password" length="20"/>
        </property>
    </class>
</hibernate-mapping>
package com.supan.session;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import com.supan.bean.News;
public class NewsManager {
	public static void main(String[] args) throws Exception {
		//获取配置对象,注意.configure()会自动读取hibernate.cfg.xml文件
		Configuration config = new Configuration().configure();
		//创建回话工厂sessionFactory是整个数据库映射关系经过编译后的内存影像,是线程安全的。
		SessionFactory sf = config.buildSessionFactory();
		//从回话工程中打开一个回话
		Session sess = sf.openSession();
		//该回话启动事物
		Transaction tx = (Transaction) sess.beginTransaction();
		//创建实体对象
		News mynew = new News();
		mynew.setTitle("hibernate的神奇");
		mynew.setContent("hibernate非常的神奇");
		//保存实体对象
		//注意因为该实体在映射文件中已经指定了标示符生成规则,在保存之前会自动的生成一个id分配给对象,并持久化到数据库中
		//如果标示符是assigned或者是符合主键,那么在save之前需要手动分配数值。
		/*
		 * save persist方法功能几乎完全一样:之所以提供两个方法,是因为:
		 * 1,照顾习惯了jpa的用法
		 * 2,save返回主键值,persist返回null
		 * 3,save因为需要返回主键值,所以会立即生成insert语句
		 *   persist则保证当它在一个事务外部被调用时,并不立即转换成insert这个是
		 *   非常有用的,尤其当我们封装一个长回话流程的时候。
		 */
//		System.out.println(sess.save(mynew));//返回持久化对象的主键值
//		System.out.println(sess.persist(mynew));//返回null
		//提交事物
		tx.commit();
		//关闭回话
		sess.close();
		//关闭事物
		sf.close();
	}
}

你可能感兴趣的:(Hibernate)