发表于: 2018-01-27 22:30:31

1 464


今天做的事情:

任务四擦了下屁股,然后成功实现页面的懒加载...因为大概的都在昨天的日报里面说了,这里就简单地贴一下代码:

Mybatis的扩展配置:

*Mapper.xml:

jsp对应的测试部分:

测试结果(我改的是0项,也就是第一个):

jsp中的EL表达式功能非常强大,能直接识别而且调用Graduate的getStudent的方法,从而触发懒加载操作(注意我在lazyLoadTriggerMethods里面配置了get*,不然无法触发。而且会在调用Student的getName方法时报错,空指针异常!)这也充分说明了jsp也是java编译生效的文件,功能一脉相承!实际上,打开resin中的文件夹(路径:\resin-4.0.49\webapps\task4\WEB-INF\work\_jsp),会发现有如下文件:

总的来说,jsp的懒加载是不存在有什么问题的,毕竟大家都是在java这个大环境下面,前后端耦合很紧。关于昨天说的转json失败,我越想越发现不对,又去测试了下,发现的确是我昨天说错了:被代理的对象是关联对象,而不是被关联对象!

也就是说,在这里,其实是Graduate被代理了,而不是它里面的Student,下面是测试类:

先打印graduate的一个实例变量,发现这时候并没有进行student的sql语句查询!而是在打印student这个对象之前,才延迟加载这部分内容..

另外,我打印了一下传进来的这个graduate对象的简单类名和非父类的所有子类方法,发现果然是一个代理类...看来以后转json的时候务必注意!


所以,后端应用懒加载的确会导致很多的麻烦,而且现在很多懒加载都是由前端来实现的...但也不能说这玩意不能用...因为后端的懒加载,主要还是为了简化多重嵌套下的复杂逻辑,达成“在合适的时间点完成对应的操作”。当数据库中表格关联复杂、信息宽度较大的时候,如果你积极加载,一关联二,二关联四,可能一个数据库的表都给你查出来了....要么你就手动拆分sql语句,在一个service方法里面疯狂地调各个dao类的各种方法...这样子性能是好了,无用功是少了,但是逻辑变得复杂,代码丑陋,而且维护起来也麻烦...


另外就是打Tag标签了,这个我就简单了解了一下,感觉这东西很废,为什么不在后端controller或者service层直接完成呢?万一发生什么异常,基本上很难补救:

web.xml额外配置:

WEB-INF下的tid文件(需要额外加入jsp-api包,而且在这里面可以查看版本):

对应的工具类:

效果在上面贴过了,就不重复了。今天日报篇幅有点长且乱,晚上看任务五,任务五这部分内容就放到明天去了。


明天计划做的事情:继续任务五


今天遇到的问题:各种空指针异常(通过debug的方式已解决)


今天的收获:增强了调试的能力,对jsp和EL表达式的了解又深了一步。


返回列表 返回列表
评论

    分享到