hibernate单一实体映射

上传人:第*** 文档编号:38761050 上传时间:2018-05-07 格式:DOC 页数:7 大小:375KB
返回 下载 相关 举报
hibernate单一实体映射_第1页
第1页 / 共7页
hibernate单一实体映射_第2页
第2页 / 共7页
hibernate单一实体映射_第3页
第3页 / 共7页
hibernate单一实体映射_第4页
第4页 / 共7页
hibernate单一实体映射_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《hibernate单一实体映射》由会员分享,可在线阅读,更多相关《hibernate单一实体映射(7页珍藏版)》请在金锄头文库上搜索。

1、映射 x.setm();来使用,不能使用有参 3.使用 set/get 方法hibernate API:session 的 save()/delete()/update()/create()环境 1.类库导入 Eclipse 工程中a. 类库 * 导入 hibernate 库文件 * 1、在 eclipse 中建立一个 java 工程,如:hbn 2、在工程 hbn 的属性-Build Path 中选择 Add Libraries 3、在 Add Libraries 窗口中选择 User Library 点 next 按钮 4、在 User Library 窗口中点 User Librarie

2、s .按钮 5、在 User Libraries 窗口中,点 new 按钮6、在 New user library 窗口中,填写一个 User libary name(如:hbnlib,注 意不要选择 System libary 复选框),点 OK 按钮回到 User Liberies 窗口 7、在 User Liberaries 窗口中选择刚刚创建的 hbnlib,点 Add jars 按钮 8、在打开的文件选择窗口中找到解压好的 hibernate 的库文件,全部选 中,点“打开“按钮,返回 User Libraries 窗口 9、在 User Libraries 窗口中点 OK 按钮,返

3、回 User Library 窗口;再点 Finish 按钮,结束操作2.xml 映射(类表) 配置(DB 连接信息) 映射文件编码规范 XXX.hbm.xml a.一个映射文件映射一个持久类(类对应表 属性对应字段) b.映射文件名称与持久类名称保持一致 Account Account.hbm.xml c.映射文件与其映射的持久类放在同一个包路径中主键 oid 的生成采用高低位算法,高位由私有计数器生成,低位由共有计数器生成 public class Testacc public static void main(String args) Account acc=new Account(“z

4、xm316733855“,1000.0); /Configuration cfg=new Configuration();/cfg.configure();/读配置文件,相当于加载驱动 /没有返回值为void的,可以返回调用对象的引用this,相当于. Configuration cfg=new Configuration().configure();SessionFactory sf=cfg.buildSessionFactory();/取出session工 厂 /SeesionFactory是重量级对象,并且是线程安全的,可以多线程 /一个应用程序一个SessionFactory就可以,应

5、用程序结束要关闭 Session s=sf.openSession();/造出session /session是一个轻量级对象,但是线程不安全 /一个线程一个session,一个session一个事务,事务结束,关闭session Transaction tran=null; trytran=s.beginTransaction();/事务开始 s.save(acc);/将帐户对象持久化 /s.getTransaction().commit();/提交 mit(); catch(Exception e) e.printStackTrace();tran.rollback();/回滚(非捕获异常

6、,有用就自己捕捉try/catch) finally s.close(); sf.close(); 主键名方法没有序列时要创建一个序列 create sequence .hilo seqhilo sequence assigned native uuid 全球唯一标识 算法比较特殊,也不用计数器,用运行机器的 IP 地址和系统时间,算出一个特殊的 128 的 id,再 变成 32 位的十六进制,然后以字符串的形式存储,因此这个的话 OID 要用 String 而不是用 Long 类型,这种对数据库没压力,不过有点浪费空间 修改方式Hibernate 类型类型实体(独立映射的持久类)和值(基本类

7、型/集合/组件/不变对象(String 和日期)java 类型和 jdbc 类型映射,jdbc(sql 标准类型)和 db(sql 非标准类型)类型映射(hibernate 完成 需要知道 java 类型) String varchar varchar2是映射类型注意是小写,代表String,varchar表示 java 类型对应 哪种 sql 标准类型持久对象状态(一组属性值 color=red) Transient 暂态(持久对象在数据库中没有记录,和当前任何 session 无关,session 缓存里没有 东西) Persistent 持久态 有记录 与 session 有关,自动同步

8、(session 自动 update) Detached 游离态 数据库中有记录 和 session 无关(需要手动 update)关于 delete()是将数据库中对应的删除,并且删除 session 缓存中的,但是这个对象还是存在的,关于 saveorupdate 会自动判断 oid 是否为空只要 oid 为 null,或者没有找到证明没有存过,就 会用 save,如果存在就为 updatesaveorupdate()是安全函数,不确定是游离态还是暂态时用 load(类型,oid)根据 oid 从数据库中读出来恢复对象, 先到 session 缓存里面查找,如果存在会返回查询对象引用,没有

9、会创建一个代理对象并且返 回代理对象的引用, 然后当使用时如果是一个代理对象,就要去查询数据库如果查到,就执行正常操作,如果没有 就会抛异常 get(类型,oid) 根据 oid 从数据库中读出来恢复对象, 先查询缓存,如果存在返回一个引用,如果没有则查询数据库,有的话返回一个引用,没有返回 一个空 null有时候 get 也会产生异常,如果 load 在 get 前产生一个代理对象就会被 get 对象自动引用,所 以两个产生的对象时同一个,当数据库中没有时就会抛异常/用 load 查类型时还没有去数据库,只有用代理的时候才会去数据库,get 会去数据库查批量更新批量更新commit 的时候会

10、扫描缓存,提交之前不会进行任何数据库操作,要数据库进行操作用 session.flush 立刻刷新缓存1.提交之前会有一个隐式的 flush 2.查询的时候涉及到缓存里的数据,就会自动被 flush 一下 3.主动调用 flush()方法HQL:与 SQL 语法相似,但是 HQL 是面向对象的,SQL 是面向过程的 public static void main(String args) Session s=HbnUtil.getSession(); try s.beginTransaction(); String hql=“from Account“;/from后面跟类的名字,表示要所有账户

11、类的实例,具体怎么找交给 hibernate /Query q=s.createQuery(hql); /List accts=q.list(); List accts=s.createQuery(hql).list();/所有账户类的集合,等价于上面 StringBuffer sb=new StringBuffer(); for(Account acct:accts) sb.append(acct.getOid()+“=“); sb.append(acct.getBal()+“n“); System.out.println(sb.toString(); s.getTransaction(); catch (HibernateException e) / TODO Auto-generated catch block e.printStackTrace(); finally s.close(); HbnUtil.closeSessionFactory();

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 毕业论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号