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();
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值