当前位置: 首页 > news >正文

电子商务公司简介模板如何给自己的网站做优化

电子商务公司简介模板,如何给自己的网站做优化,网站建设 流程,百度搜索网站下方描述假设现在有Book和Category两张表,表的关系为双向的一对多,表结构如下: 假设现在我想查询id为2的那本书的书名,使用session.get(...)方法: 1 Session sessionHibernateUtil.getSession(); 2 Book book (Book) session.get(Book.class,2); 3 System.out.println(book.getName());…   假设现在有Book和Category两张表,表的关系为双向的一对多,表结构如下:   假设现在我想查询id为2的那本书的书名,使用session.get(...)方法: 1 Session sessionHibernateUtil.getSession(); 2 Book book (Book) session.get(Book.class,2); 3 System.out.println(book.getName());   当执行完第二行代码,还未执行第三行时,控制台已经打印出了sql语句,执行第三行时打印出书名斗破苍穹.   而如果使用session.load(..)查询时: 1 Session sessionHibernateUtil.getSession(); 2 Book book (Book) session.load(Book.class,1); 3 System.out.println(book.getName());   当执行完第二行代码还未执行第三行时,控制台什么都没有打印,执行第三行时,控制台打印出sql语句和书名斗破苍穹.   看出get和load的区别了吗?   实际上,当使用get方法查询时,程序立即去访问数据库(实际上是先去一级缓存session中查询,没有发现的话再去二级缓存,再没有的话才去访问数据库),得到id2的Book,并且打印出sql语句,而是用load方法查询时,load并未立即去访问数据库,他先是返回了一个Book的代理对象,当你真正要用到Book中信息时,才去访问数据库.load支持延迟加载,get不支持延迟加载,当然如果设置了lazyfalse,get和load都会直接去访问数据库,都变成即时加载.   get/load方法还有一个很重要的区别就是:     load方式检索不到的话会抛出org.hibernate.ObjectNotFoundException异常    get方法检索不到的话会返回null   这就引出了即时加载和延时加载的概念,通俗的说,即时加载,就是立即去数据库查找,延迟加载,就是真正需要的时候才去数据库查找,这类似于单例模式中的懒汉式和饿汉式的加载方式.   假设我现在想通过查询Book,来得到Book所对应的Category,如果设置为即时加载,当加载Book时,会自动加载Category,如果设置为延迟加载,则加载Book时,不会加载Category,只有当第一次调用getCategory(),时,才去执行sql语句,加载Category.   一般来说,延迟加载要比即时加载节省资源,但是如果处理不当,延迟加载容易抛出延迟加载异常(LazyInitializationException).这是因为延迟加载时,只有第一次调用getCategory()时才会加载Category数据,如果这时候数据库连接已经关闭了,就会因为无法加载数据而抛出异常.   在*.hbm.xml中可以设置加载方式,class标签中可以设置:lazytrue,打开延迟加载,默认就是lazytrue.   在set/bag标签下,默认也是lazytrue,支持延迟加载,也叫懒加载.   单端关联(many_to_one或者one_to_one)上也可以设置lazytrue.默认也是true支持懒加载. 下面是网络上一段关于get和load方法的详细异同,写的不错,贴在这里:  一、get和load方法都是根据id去获得对应数据的但是获得机制不同如果使用get方法hibernate会去确认该id对应的数据是否存在它首先会去session中去查询(session缓存其实就hibernate的一级缓存)如果没有再去二级缓存中去查询如果再没有就去数据库中查询仍然没有找到的话就返回null   而使用load方法的话hibernate会认定该id对应的数据一定存在它也会先去session缓存中去查找如果没有找到hibernate会根据lazy属性值来确定是否使用延迟加载。如果lazy‘true’ 就使用延迟加载返回该代理对象等到真正访问到该对象的属性时才会去二级缓存中查询如果没有再去数据库中查询如果还没有就抛出org.hibernate.ObjectNotFoundException异常。如果lazyfalse 则不使用延迟加载这是load的访问机制就和get一样了。   二、对于load和get方法返回类型虽然好多书中都这么说“get()永远只返回实体类”但实际上这是不正确的get方法如果在 session缓存中找到了该id对应的对象如果刚好该对象前面是被代理过的如被load方法使用过或者被其他关联对象延迟加载过那么返回的还是 原先的代理对象而不是实体类对象如果该代理对象还没有加载实体数据(就是id以外的其他属性数据)那么它会查询二级缓存或者数据库来加载数据但是 返回的还是代理对象只不过已经加载了实体数据。       抓取策略:   在hibernate的官方文档中对于抓取策略,是这么定义的: 当应用程序需要在(hibernate实体对象图的)关联关系间进行对象导航的时候,hibernate如何获取关联对象的策略. fetchselect:当查询关联对象通过select语句去查询,Select语句的发出时机,是根据lazy的值来确定的,如果lazyfalse,那么在获取对象时,就会发出一条select语句,将关联对象查询出来,就是说,我们在查询Book信息的时候会自动把Category的数据也查询出来,但如果lazytrue,那么只有在获取关联对象的时候才会发出select语句去查询. fetchjoin:当查询Book信息时,会通过outer join把关联的对象Category一起查询出来,这个时候lazy无效,所有数据会立即查询出来. fetchsubselect:如果要查询关联集合的内容,会查询之前已经查询出来的所有关联集合的内容,category对应了多张Book,如果查询了玄幻类,武侠类,那么在使用玄幻类和武侠类对应的集合对象(所对应的书籍信息),会将他们的书籍信息一并查询出来,
http://wiki.neutronadmin.com/news/66064/

相关文章:

  • 阿里云服务器建立网站网站建设文字教程视频
  • 打开网站出现directory网站制作咨
  • 网站上内容列表怎么做怎么建WordPress数据库
  • 网站发展历程win7创建wordpress
  • app手机网站建设黄网站建设考级
  • 网站建设都需要什么技术人员黄岛开发区网站制作
  • 哪个网站建网页比较好云浮市住房和城乡建设局网站
  • 雅安做网站的公司17173游戏网
  • 做网站首页ps中得多大评价模板
  • 手机能制作网站吗深圳网站设计公司行业
  • 做专题页的背景网站wordpress 评论模块
  • 网站开发重庆免费公司宣传视频制作软件
  • 网站建设定制开发价格企业网站的在线推广方法有哪些
  • ipv6 网站开发网奇seo赚钱培训
  • 做试题网站怎么找平台推广
  • 在网站怎么做代销石家庄知名网站
  • 服装网站首页设计商丘峰少seo
  • 百度网站建设推广网站开发实施方案进度
  • 快站app官网下载wordpress移动主题
  • 竞价可以做两个网站吗有什么做兼职的网站比较好
  • 网站开发需要懂多少代码怀仁网站建设
  • 计算机网站建设与管理是什么备案网站可以做接码平台么
  • 网站建设思路方法三库一平台个人信息查询系统
  • 哪里网站建设联系方式郑州百度建网站
  • 域名网站建设教程wordpress 公告栏
  • 佛山网站设计定制wordpress 中文版 英文版
  • 国外哪个网站做服装下载app免费下载安装下载
  • 网页qq登录页面seo网站推广 沈阳
  • 网站开发前端跟后端的区别对电子商务网站建设的理解
  • 网站建设是什么意思 打不开wordpress 商业主题插件