Thymeleaf 教程

通过延迟数据检索进行优化

有时,我们可能想优化数据集合的检索(例如从数据库中),以便这些集合中的数据只有在真正要被使用时才检索。

实际上,这可以应用于任何数据块,但是考虑到内存中集合的大小,在这种情况下,检索要迭代的集合是最常见的情况。

为了支持这一点,Thymeleaf 提供了一种机制来延迟加载上下文变量。实现 ILazyContextVariable 接口的上下文变量——很可能是通过扩展其 LazyContextVariable 的默认实现——将在执行时被解析。例如:

context.setVariable(
     "users",
     // 通过继承 LazyContextVariable 来实现延迟加载功能
     new LazyContextVariable<List<User>>() {
         @Override
         protected List<User> loadValue() {
             // 我们需要实现的方法
             return databaseRepository.findAllUsers();
         }
     });

这个变量不需要了解自己是延迟加载变量,它与普通的变量没有任何区别,可以直接在模板代码中使用。如下:

<ul>
  <li th:each="u : ${users}" th:text="${u.name}">user name</li>
</ul>

但同时,如果条件 ${condition} 为 false,则将永远不会被初始化 users 变量(它的 loadValue() 方法将永远不会被调用),例如:

<ul th:if="${condition}">
  <li th:each="u : ${users}" th:text="${u.name}">user name</li>
</ul>
说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号