设为首页 加入收藏

TOP

Hibernate概念深入和CURD(增删改查)
2014-11-24 13:55:53 来源: 作者: 【 】 浏览:2
Tags:Hibernate 概念 深入 CURD 删改

一 Hibernate开发流程


1.hibernate需要的三个条件


(1)domian类


(2)映射文件 User.hbm.xml


(3)创建表


2.开发流程


(1)站在面向对象的角度


由domain Object---àmapping ---àdb(官方推荐)


(2)站在关系模型的角度


由DB开始,用工具生成mapping和Domain object(使用较多)


(3)从映射文件开始写(用的较少)


注:以上任何两个都可以互相生成


二 开发中的细节


1.Domian Object限制(实体类对象限制)


(1)默认的构造是必须的,如果写了一个有参数的构造,必须要写上无参构造


原因是Hibernate会用反射的机制生成一个class对象,创建对象的时候用newInstance()方法去创建,用的是无参构造,例:


Class clazz = User.class;


User user = clazz.newInstance();


(2)有无意义的标识符id(主键)(可选)


在实际中用到,如果有id,会充分发挥它的特性


(3)非final的,对懒加载有影响(可选)


懒加载内部会自动的创建一个子类,如果是final,懒加载会有影响


2.映射文件 --- 把类映射成二维表


(1)一个java类在映射文件中用一对标签表示,如果有多个java类,那么在映射文件中应该有多个标签


(2)对于标签来说,标签可以放到一个映射文件中,可以放到多个映射文件中


(3)映射文件的命名规范:类名.hbm.xml


三 代码编写


(1)HibernateUitl 工具类 -- 提取和数据库连接的宝贵资源


public final class HibernateUtil {


private static SessionFactory sessionFactory;


private HibernateUtil() {



}


//耗时资源放到代码块中,只执行一次


static {


Configuration cfg = new Configuration();


cfg.configure();// 用来完成Hibernate的初始化---用来读取配置文件中的信息,可以指定配置文件的位置


// cfg.configure("");


// 得到sessionFactoroy的工厂对象,相当于DirverManager,


sessionFactory = cfg.buildSessionFactory();


}



public static SessionFactory getSessionFactory() {


return sessionFactory;


}



public static Session getSession() {


return sessionFactory.openSession();


}


}


(2)添加用户 --- 使用上面的工具类优化代码


public static void addUser1(User user) {


Session session = null;


Transaction tx = null;


try {


session = HibernateUtil.getSession();


tx = session.beginTransaction();// 开启事务


session.save(user);


tx.commit();


} finally {


// 使资源得到释放


if (session != null) {


session.close();


}


}


}


(3)查询用户


//查 ---查询不用开启事务,不修改数据库中的东西


public static User getUser(int id){



Session session = null;


try {


session = HibernateUtil.getSession();


Class clazz = User.class;//通过映射文件查找class对象


//User user = (User) session.load(clazz, id);//懒加载,运行后没有立刻访问相应的数据库,返回的是代理对象,永远不可能为空,当第一次使用该对象的时候,才去访问


User user = (User) session.get(clazz, id);


return user;


} finally {


// 使资源得到释放


if (session != null) {


session.close();


}


}


}


四 session接口中的方法


Transation beginTransaction() 开启事务


Void clear() 清除缓存


Connection close() 关闭session释放资源的方法


Session只能按id查询,所以有了:


Criteria createCirteria(Class persistentClass) 查询所有...


Query createQuert(String queryString)


void delete(Object object)


Object load(Class theClass,Serializable id) 懒加载,当调用的时候,不是立刻去查数据库,只有第一次使用的时候才去查


Void persist(Object object) 保存对象


Void save(Object object) 保存对象 两者不同是:


在没有开启事务的时候,persist插入的语句没有做,而save插入的操作确做了,可是回滚了



五 对象状态


1.瞬时状态:自己new出来的对象就是瞬时状态


User user =new User() ;


user是一个瞬时对象,在数据库的表中没有记录和瞬时对象想对应的,也不管理瞬时 对象


当调用 session.save(user)方法之后,为持久状态


2.持久状态:数据库表中有记录和这个对象相对应的,当持久态的对象发生变化的时候,session中也变化


3.脱管状态:数据库的表中有一条记录和对象相对应的,并且这个对象不被session管理,但是在数据库表中有记录和它相对应,当对象再发生变化的时不会改变


当对象处于脱管状态的时候,又更新了数据库中的值,要调用更新的方法来通知Hibernate


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Hibernate懒加载异常处理 下一篇Java中字符替方法replace之发现

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: