RSS
热门关键字:  java  Ajax  JSP  JSF  Struts
当前位置 : 首页>Hibernate>列表

Hibernate初级基础教程

来源: 作者: 时间:2007-08-09 点击:

public void insert(Fruit fruit){
Configuration config=new Configuration();
config.configure();//读配置文件
SessionFactory sf=config.buildSessionFactory();//得到工厂
Session session=sf.openSession();//得到session
Transaction tt=session.beginTransaction();//检查事务开启
session.save(fruit);//存储insert
tt.commit();//提交
session.close();//关闭资源
}
}

 

写测试类: 插入一个对象到数据库中
/**
* 知识点:
* hibernate基础:练习语法部分API和简单的映射关系
* 程序目标:
* 使用hibernate方法将对象进行持久化
* 实现数据库的增删改查
* API:
* 1.Configuration:这个类负责读取XML文档(映射配置文件)
* configure():读xml
* buildSessionFactory():创建一个生产session对象的工厂,其实是再次检查
* 因为hibernate和jdbc不一样,jdbc是如果不手动设置开启事务,那它
* 就是马上执行sql的,hibernate的不会马上执行,是事务提交后执行
* 默认情况下就是打开事务的状态,这里只是再检查以下
* 2.SessionFactory:负责生产session对象
* openSession():创建一个session
* 3.Session类:这个是主要的类,负责增删改查,开启事务等
* beginTransaction():产生一个事务对象(Transaction)
* save():增加相当于操作sql中的insert语句
* 4.Transaction类:负责管理事务的
* commit():提交一个事务
*
*/
package Yuchen.fristHbn.client;

import Yuchen.fristHbn.business.Biz.FruitManager;
import Yuchen.fristHbn.business.entity.Fruit;

public class Test {

public static void test1(){
Fruit fruit=new Fruit("lisi","hello",100);
// fruit.setName("zhangsan");
// fruit.setComments("hello");
// fruit.setPrice(100);

FruitManager fm=new FruitManager();
fm.insert(fruit);
}
public static void main(String[] args) {
// TODO 自动生成方法存根
Test t=new Test();
t.test1();
}

}

hibernate API(一):
Configuration: 读取配置文件信息用来初始化的
SessionFactory: 重量级对象,特点:消耗资源大,线程是安全,所以可以被共享
上面两个对象只实例化一个就行了,都是用于初始化的
Session: 线程是不安全的,所以要避免多个线程共享它,是轻量级的对象,使用后关闭

Session对象的状态:
顺态: 还没有被持久化,也就是说数据库中没有该对象的记录,并且Session中的缓冲区里没有这个对象的引用
持久态: 在数据库中有该对象的记录,并且在session中的缓冲区里有这个对象的引用,和顺态正好相反
游离态: 在数据库中有记录,但是不在session的缓冲区里

对象状态的转换:
做一个工具类,将hibernate中重复的代码包装起来:
package Yuchen.fristHbn.util;
//生产session对象的工具类
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HbnUtil {
private static SessionFactory sf;
static{
sf=new Configuration().configure().buildSessionFactory();
}

public static Session getSession(){
return sf.openSession();
}
}

完善FruitManager类:
package Yuchen.fristHbn.business.Biz;
//业务逻辑类:负责增删改查通过使用hibernate API进行
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import Yuchen.fristHbn.business.entity.Fruit;
import Yuchen.fristHbn.util.HbnUtil;

public class FruitManager {
public Integer insert(Fruit fruit){
Session session=HbnUtil.getSession();//通过工具更方便了
Integer id=null;
// Configuration config=new Configuration();
// config.configure();//读配置文件
// SessionFactory sf=config.buildSessionFactory();//得到工厂
// Session session=sf.openSession();//得到session
Transaction tt=session.beginTransaction();//检查事务开启
id=(Integer)session.save(fruit);//存储insert
tt.commit();//提交
session.close();//关闭资源
return id;
}

public Fruit selectId(Integer id){
Session session=HbnUtil.getSession();
Transaction t=session.beginTransaction();
Fruit fruit=(Fruit)session.get(Fruit.class, id);
t.commit();
session.close();
return fruit;
}

public void remove(Fruit fruit){
Session session=HbnUtil.getSession();
Transaction t=session.beginTransaction();
session.delete(fruit);
t.commit();
session.close();
}
}

测试对象状态的转换:
/**
* 知识点:
* hibernate基础:练习语法部分API和简单的映射关系
* 程序目标:
* 使用hibernate方法将对象进行持久化
* 实现数据库的增删改查
* API:
* 1.Configuration:这个类负责读取XML文档(映射配置文件)
* configure():读xml
* buildSessionFactory():创建一个生产session对象的工厂,其实是再次检查
* 因为hibernate和jdbc不一样,jdbc是如果不手动设置开启事务,那它
* 就是马上执行sql的,hibernate的不会马上执行,是事务提交后执行
* 默认情况下就是打开事务的状态,这里只是再检查以下
* 2.SessionFactory:负责生产session对象
* openSession():创建一个session
* 3.Session类:这个是主要的类,负责增删改查,开启事务等
* beginTransaction():产生一个事务对象(Transaction)
* save():增加相当于操作sql中的insert语句
* 4.Transaction类:负责管理事务的
* commit():提交一个事务
* test1():测试插入的功能
* test2():测试数据同步更新的功能
* test3():测试saveOrUpdate()
* test4():测试clear()和flush()
*/
package Yuchen.fristHbn.client;

import org.hibernate.Session;
import org.hibernate.Transaction;

import Yuchen.fristHbn.business.Biz.FruitManager;
import Yuchen.fristHbn.business.entity.Fruit;
import Yuchen.fristHbn.util.HbnUtil;

public class Test {

public void test1(){
Fruit fruit=new Fruit("lisi","hello",100);
// fruit.setName("zhangsan");
// fruit.setComments("hello");
// fruit.setPrice(100);

FruitManager fm=new FruitManager();
fm.insert(fruit);
}

public void test2(){
//测试同步更新的功能
Fruit fruit=new Fruit("meigui","hongse",70);//顺态
FruitManager fm=new FruitManager();
Fruit fruit2=new Fruit();

Integer id=fm.insert(fruit);
fruit2=fm.selectId(id);
System.out.println(fruit2.getFid());
System.out.println(fruit2.getName());

fruit.setName("ziluolan");//这里修改了对象
fruit2=fm.selectId(id);
System.out.println(fruit2.getFid());//但是结果没有更新
System.out.println(fruit2.getName());
//因为fruit在Integer id=fm.insert(fruit);后变成游离态了
//也就是说只有持久态才能实现同步更新
System.out.println(fruit.getFid());
System.out.println(fruit.getName());
}

public void test3(){
Session session=HbnUtil.getSession();
Transaction t=session.beginTransaction();
Fruit fruit=new Fruit("ziluolan","lanse",100);//顺态
Fruit fruit2=new Fruit();
FruitManager fm=new FruitManager();
session.save(fruit);//fruit在运行完此句后变为游离态
fruit2=(Fruit) session.get(Fruit.class, fruit.getFid());
//从数据库读并打印出来
System.out.println(fruit2.getFid()+":"+fruit2.getName());

session.saveOrUpdate(fruit);//如果该对象为游历态就更新数据库update
//否则就是顺态,增加insert
fruit2=(Fruit) session.get(Fruit.class, fruit.getFid());
//saveOrUpdate后再从数据库读并打印出来
System.out.println(fruit2.getFid()+":"+fruit2.getName());
//两个打印结果一样,saveOrUpdate方法判断如果id为null,就
//顺态,否则就是游离态
t.commit();
session.close();
}

public void test4(){
Session session=HbnUtil.getSession();
Transaction t=session.beginTransaction();
Fruit fruit=new Fruit("guihua","fense",300);//顺态
Fruit fruit2=new Fruit();
session.saveOrUpdate(fruit);//执行insert因为对象为顺态
// session.flush();
session.clear();//fruit变成游离态了,并且不会执行insert语句

共3页: 上一页 [1] 2 [3] 下一页
最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
Google Adsense
相关文章