「java懒加载」java懒加载代码
今天给各位分享java懒加载的知识,其中也会对java懒加载代码进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、java中hibernate的懒加载,稍微说一下
- 2、java前台如何取消懒加载
- 3、springboot2全局指定@Lazy(懒加载)
- 4、java中hibernate默认懒加载问题,求解惑~~
- 5、java反射机制动态获取hibernate懒加载对象
- 6、JAVA Spring与事务, 三种时态(游离/托管/持久), 懒加载的关系?
java中hibernate的懒加载,稍微说一下
Hibernate懒加载策略
Hibernate 使用load()方法加载数据的时候,会创建一个代理类,这个时候他不会真正从数据库加载数据,而是当用户真正使用某个属性才从数据库里面加载数据。有了这个代理类我们就可以根据不同的场景需要,灵活加载对象所要的数据。斋说有点空泛,举个例子就明白了。
一个人事档案类PersonelFiles,人事档案有很多属性如:工作经历(Career),教育经历(Education)等。在这里它们使用多对一得关系。部分代码如下:
PersonelFiles
1: public class PersonelFiles { 2: 3: private Long id; 4: private Career career; 5: private Education education; 6: ...... 7: public Career getCareer() 8: public Education getEducation() 9: ..... 10: 11:
Career(Education类同,就是每个career和education都有一个PersonelFiles的owner,在它们的XXX.HBM.XML文件都配置成many-to-one name="owner" column="owner_id" unique="true" not-null="true" /,这样默认就是懒加载模式了)
1: public class Career { 2: 3: private Long id; 4: private String firstCareer; 5: private String secondCareer; 6: private PersonelFiles owner; 7: ...... 8: 9: 10: }
现在就可以体验代理类的优点了,譬如说当我们需要某个人事档案的所有资料的时候,可以显式初始化代理类的数据,这样就可以从数据库里面一次性加载所以关联数据了。代码如下:
1: ......... 2: PersonelFiles files= () session.load(PersonelFiles.Class,id); 3: Hibernate.initialize(files); 4: ..................
如果我们只需要某部分的时候,我们可以通过对象get方法从数据库里面拿到某个属性的数据,如拿教育经历数据,我们就可以这样做了:
1: ..... 2: PersonelFiles files=(PersonelFiles)session.load(PersonelFiles.Class,id); 3: files.getEducation() 4: ..................
通过上面的例子我们可以总结出:Hibernate通过代理类实现懒加载策略,可以使对象从数据库中加载数据的时候更有针对性,减少携带多余无用的数据,从而减少数据在各个层级之间的传输,提高程序运行的效率。
java前台如何取消懒加载
mail命令发信配置
mail默认是调用本机MTA发送邮件的,这意味着需要在本机上安装sendmail或postfix或exim或...,这让我很不爽啊,占用资源不说,多开个端口就多一份不安全,像我这样的菜鸟,要是遇到了一个红客或黑客或骇客,那不是死翘翘了?
我得找找mail是怎么支持SMTP的,翻了源码看了看,有关SMTP的参数都是用变量存着滴,而这些变量是在/etc/mail.rc里设置滴。
与大家平时用的邮件客户端一样,关于SMTP的设置也就那么几个,具体如下:
from: 当别人收到邮件时显示的发件人。默认是"当前用户id"@"主机名",所以极有可能是"root@localhost"哦,至于你这样发出去,会不会被别人家的邮件服务器当垃圾拒收,俺就不随意猜测了。但这样,默认也不方便回复邮件啊,所以还是设置设置吧。
smtp: 指定别人家的服务器地址。这个相当重要了,俺折腾这个,就是想占便宜用别人的服务器发邮件,肿么能不设置呢?
smtp-auth: 指定SMTP的认证方式。如果你不设置的话,默认是LOGIN方式,当然你可以根据需要改成CRAM-MD5或PLAIN方式。
smtp-auth-user: 指定用户名。
smtp-auth-password: 指定密码。
springboot2全局指定@Lazy(懒加载)
Spring默认在启动时立即实例化配置的bean,要修改为懒加载(在实际使用的时候实例化).
0.1 在xml配置中:
0.2 在JavaConfig配置中:
0.3 SpringBoot中指定bean的懒加载,可以在对应的类上直接使用@Lazy
那么SpringBoot中如何全局配置懒加载呢?
通过在stackoverflow上查找, 发现的答案是, 在启动类SpringbootApplication上加上@Lazy注解即可. 原来注解@SpringBootApplication是@Configuration, @EnableAutoConfiguration和@ComponentScan注解的合体.
而这个SpringbootApplication本身就是个配置类, 所以在上面加@Lazy注解理论上是可以的.果然是直观的东西不方便, 方便的东西不直观.
1.1 错误方式一:
执行 gradle bootRun 启动应用, 发现输出了
也就是说配置并没有生效. 但是so上的回答一般不会是错的. 那会是哪里出了问题呢?
1.2 方式一修正
不使用@Component, 而是在配置文件中声明bean:
这种方式实现了懒加载,但是这跟 0.2 中的方式是一样的.
1.3 方式二
spring2.2 中引入了一个application.properties中的新属性.
spring.main.lazy-initialization=true 来指定整个应用的懒加载.
这种方式不论是@Component声明的bean,还是@Bean声明的bean, 都可以实现懒加载.
虽然 懒加载可以提升应用的启动速度, 但是不利于尽早的发现错误, 对于HTTP请求, 首次访问的响应时间也会增长.
java中hibernate默认懒加载问题,求解惑~~
getStudents();获取学生集合,就是lazy load。当从list里面往外get的时候,说白了,就是真正需要数据的时候,才去库里查。
java反射机制动态获取hibernate懒加载对象
hibernate的懒加载,如果想获取它的属性,就只能将懒加载去掉
如果懒加载完成,对象有值,那用反射就可以获取到值
如果懒加载还没有开始,对象没值,无论如何反射都没有办法获取到值的,
希望对你有用
JAVA Spring与事务, 三种时态(游离/托管/持久), 懒加载的关系?
游离不用说,你自己新建对象就是游离态。
持久态,如果你的事务是放在Service层,那么在Service层及以下的方法里,从Session中获取的对象,或者save
persis
update等的对象就是持久态。
托管态,如果你的Service层方法返回一个PO对象,这个对象返回之后肯定是托管态。
如果你的Service层方法接受一个游离态PO对象,然后被save了,Servcie层方法返回后,这个游离态PO对象,肯定也是托管态。
懒加载异常:
如果你在Action层或者View层对托管态对象调用get方法试图获取懒加载的数据,肯定报异常。
原因是事务边界就在Service层方法处结束,Session也会在Service方法退出后关闭。
而如果使用OpenSessionInViewFilter,则Session的关闭时机会延迟到View层,其实就是JSP代码运行完毕之后才关闭。这样的话就不会报懒加载异常了。
java懒加载的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java懒加载代码、java懒加载的信息别忘了在本站进行查找喔。
发布于:2022-11-23,除非注明,否则均为
原创文章,转载请注明出处。