Hibernate学习笔记2

本文介绍Hibernate的基本概念,包括映射文件的作用及配置方法,并详细解释如何利用Hibernate进行对象关系映射,实现Java对象与数据库表之间的转换。同时,还探讨了SessionFactory与Session的使用技巧,以及如何处理异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天上午从10:00开始学习:

1.映射文件是hibernate运行时非常重要的一个文件,因为把对象模型和关系联合起来的就是它。

里面有:

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

//这个代码的意思呢,就是,把这个类User和表user对应起来。

其实这个表,我们可以不写,缺省的是类名和表名是一样的。

下面呢,就是这个类属性的一些标签。

<id name="id">   //这个ID映射的是一个主键名。Name是java的一个属性名

<generator class="native"/>

</id>

2.那么我们再来看看这个id的值是怎么产生的?

这个主键的产生方式有很多种,那么我们用的是那种方式呢?我们要告诉它。

<generator class="native"/>对应的是主键生成器,那么native只是其中的一种。

其实这个id是有值的,我们可以这样做。在Base.java中,输入这样一个代码:

System.out.println("id:"+user.getId( ));

那么在myeclipse上就打印出了:id:1

然后下面就跟着两个属性!!!

3.下面呢,我们来看看这个java代码:Base.java

Configuration cfg=new Configuration();

cfg.configure();

SessionFactroy sf=cfg.bulidSessionFactroy();

//这个过程是hibernate初始化的一个过程

这个过程在我们的程序里面只做一次

Hibernate是通过一个工具类来完成的,这个工具类是不能被其它的东西改写的,所以申明为final

HibernateUtil.java:

在这个类里面,我们禁止new多个实例,也就是说new多个实例也是没有用的,这个过程在我们的程序里面只需要做一次。

4.我们想让:Configuration cfg=new Configuration();

cfg.configure();

SessionFactroy sf=cfg.bulidSessionFactroy();

这段代码只做一次,那么可以将这段代码挪到这个工具类里面来。

用static代码块。

package cn.itcast.hibernate;

import com.opensymphony.xwork2.config.Configuration;

public final class HibernateUtil {

//我们用私有的缺省的构造方法,别人既不能去继承它,也不能是实例化它

private HibernateUtil()

{

}

//那么我们怎么去用它呢?可以将其设计成单例,也就是一种设计模式

static{

Configuration cfg=new Configuration();

cfg.configure();

SessionFactroy sf=cfg.bulidSessionFactroy();

}

}

上面就可以保证这段代码只执行一次

package cn.itcast.hibernate;

import org.hibernate.SessionFactory;

import com.opensymphony.xwork2.config.Configuration;

public final class HibernateUtil {

private static SessionFactory sessionFactory;

public static SessionFactory getSessionFactory() {

return sessionFactory;

}

//我们用私有的构造方法,别人既不能去继承它,也不能是实例化它

private HibernateUtil()

{

}

//那么我们怎么去用它呢?可以将其设计成单例,也就是一种设计模式

static{

Configuration cfg=new Configuration();

cfg.configure();

sessionFactory=cfg.bulidSessionFactroy();

}

}

5.那么我们现在来看一下这个初始化过程:

Configuration会读取这个配置文件,也就是hibernate.hbm.xml文件,它会从这个classpath中读取。

其实在我们工程下面的src目录下也可以找到这个文件,那么这是为什么呢?这是因为,这个src目录运行的时候,最终会被注入到这个classpath当中去。

bulidSessionFactroy()是得到这个sessionfactory对象

而sessionfactory相当于JDBC里面的javamanage对象,可以获取链接。

我们在里面可以再建立一个session方法:

static{

Configuration cfg=new Configuration();

cfg.configure();

sessionFactory=cfg.bulidSessionFactroy();

}

public static Session getSession()

{

return sessionFactory.openSession();

}

}

注意,这里的session是org.hibernate.Session包里面的

通过这个HibernateUtil工具类呢,就把我们的hibernate初始化工作包装起来了。

在写代码的时候,就可以通过这个工具类来获取这个session。

那么现在就可以把Base里面的这段代码修改一下:

package cn.itcast.hibernate;

import java.sql.Date;

import org.hibernate.Transaction;

import org.hibernate.classic.Session;

import cn.itcast.hibernate.docmain.User;

public class Base {

public static void main(String[] args) {

Session s=HibernateUtil.getSession();

Transaction tx=s.beginTransaction();

User user=new User();

user.setName("name");

user.setBirthday(new Date(0));

s.save(user);

s.close();

System.out.println("end");

    

}

}

6.其实上面的测试代码有写的不是很规范,就是没有抛掷异常,那么我们应该怎么做呢?

可以来参照一个模板:

static void addUser(User user)

{

Session s=null;

Transaction tx=null;

try{

s=Hibernate.Util.getSession();//先获取session

tx=s.beginTransaction();//再通过session对象获取事务

s.save(user);

tx.commit();

}

Catch(HibernateException e)

{
if(tx!=null)

{

Tx.rollback();

Throw e;
}

Finally{
if(s!=null)

{

S.close();
}
}
}

那么上面这段代码是hibernate里面比较规范的一段代码。

                      OK,那么今天上午学习了1小时26分钟

                            

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值