您的位置:首页 > 其它

day01(1-5)

2012-06-03 21:50 351 查看
一、开发入门
1.为什么引入Hibernate:主要是因为模式不匹配(关系->对象)
2.主流ORM框架有Hibernate,toplink,OJB
3.Hibernate框架的使用:
a.我们为每一个JAVABEAN建立一个mapping文件(xxx.hbm.xml),放在和类同目录。然后为Hibernate新建一个配置文件(Hibernate.cfg.xml)。
b.初始化Hibernate:
Configuration cfg = new Configuration();
cfg.configure();
SessionFactory sef = cfg.buildSessionFactory();
Session s = sef.openSession();
Transaction tx = s.beginTransaction();
........
tx.commit();
s.close();
4.Hibernate的配置文件中,通常是数据库的URL信息和数据库驱动信息以及方言信息。
5.要想将JAVABEAN交给Hibernate进行映射,必须将其在Hibernate的配置文件中通过<mapping resource="映射文件的相对路径"/>来引用
6.我们可以通过<property name="hbm2ddl.auto">XXX</property>来设置Hibernate是否自动创建表,可选方式:create-drop,create,update,validate-->将数据库结构与映射文件进行比较
如果结构发生变化,则报错,用于实际部署中
7.我们可以通过show create table xxx来显示表的结构信息,通过show engines显示数据库的引擎信息.
二、入门案例的细节分析
1.使用Hibernate进行开发的流程
a.Domain Object->mapping->db(官方)
b.db开始,通过工具生成mapping和domain object(使用较多)
2.映射到数据库的JAVABEAN的一些限制:
a.默认的构造方法(这是因为Tomcat创建JAVABEAN对象的时候,通过反射技术来实现的,反射时需要默认的构造方法)
b.有主键(可选)
c.非final的,否则对懒加载有影响(可选)
3.简单认识映射文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.hibernate.auction">-->JAVABEAN所在的包名
<class name="User" table="AuctionUser" lazy="true">-->JAVABEAN的类名
<id name="id">
<generator class="native"/>
</id>
<property name="email"/>
</class>
</hibernate-mapping>
三、入门案例的优化
1.为了提高代码的重用性,我们把Hibernate初始化相关的工作封装到一个工具类中:
public final class HibernateUtil{
private HibernateUtil(){}
private static sessionFactory;
static{
Configuration cfg = new Configuration();
cfg.configure();
sessionFactory = cfg.buildSessionFactory();
}
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
public static Session getSession(){
return sessionFactory.openSession();
}
}
2.使用上述工具类的模版代码:
public void save(Object entity){
Session session = null;
Transaction tx = null;
try{
session = HibernateUtil.getSession();
tx = session.beginTransaction();
session.save(entity);
tx.commit();
}finally{
if(session!=null)
session.close();
}
}
四、初步认识Session接口
1.Session的几个主要方法:
a.save,persist方法,用来保存数据,在开启事务的情况下,两者相同,若不开启事务,则save方法会先插入,然后回滚,而persist则不会产生插入动作
b.update,merge方法,更新对象,前者如果数据库中没有对应的的记录,则会出现异常,后者更新的对象一般处于托管状态
c.get方法,根据ID立刻查询数据库
d.load方法,根据ID下一次查询数据库(懒加载)
e.saveorupdate方法,根据对象的状态来确定调用save还是update
f.lock方法,从数据库中将对象查找出来,并将该对象加锁。
2.认识一下懒加载(查询一般不需要事务)
User user = (User)session.load(user.class,id);//Hibernate会新建一个对象,该对象继承自User,将该对象的引用赋给user
Sysout(user.getName());//第二次调用的时候,Hibernate才会查询数据库,将user对象设置值
五、Hibernate中对象的三种状态
1.三种状态(主要判断数据库中是否有该对象的记录,Session是否已经关闭)
a.瞬时的:数据库中没记录,和session也没有关联
b.持久的:数据库中有记录,和session有关联,并且事务没有提交。处于持久状态的对象,如果发生改变,则会更新到数据库,并且将更新延迟到事务提交的时刻(多个update只会更新最后一个)
c.托管的(游离的):数据库中有记录,但是和session没有关联
2.Hibernate如何判断一个对象是瞬时的还是托管的?
答:有两个标准,一、判断该对象的ID值是否为0,或者为空。如果在mapping文件的<id>节点中设置了unsavedvalue,那么如果对象的ID值和
unsavedvalue值相同,那么该对象就是瞬时的二、判断该对象的version值
3.三种状态的转换

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: