我有一个家庭控制器,其中我有两种方法
@RequestMapping(value = "/mypage.te", method = RequestMethod.GET)
public String mypage1(Locale locale, Model model){
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String name = auth.getName(); //get logged in username
model.addAttribute("username", name);
model.addAttribute("customGroup",grpDao.fetchCustomGroup());
model.addAttribute("serverTime", formattedDate);
model.addAttribute("username", name);
return "mypage";
}
这个方法实际上我从Dao类调用grpDao.fetchCustomGroup()
方法,该类执行本机查询并获取数据并返回,并保存在customGroup
中。
现在相同的fetchcustomGroup()
方法将用于另一种方法,即
@RequestMapping(value = "/manageGrps.te", method = RequestMethod.GET)
public String man_grp_connections(@RequestParam("id") Integer groupId,@RequestParam("name") String groupName, Model model) {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String name = auth.getName();
System.out.println("I am in the fetchCustomGroup controller");
int profileid=grpDao.getProfileId(name);
//model.addAttribute("customGroup",grpDao.fetchCustomGroup());
model.addAttribute("memberList",grpDao.fetchGroupMembers(groupId,profileid));
model.addAttribute("groupid",groupId);
model.addAttribute("profileid",profileid);
model.addAttribute("groupName",groupName);
System.out.println("groupid="+groupId);
System.out.println("groupName="+groupName);
return "manageGrps";
}
所以不要在两个方法中调用fetchCustomGroup()
,而只想在一个方法中调用它,并在主控制器的两个方法中使用结果。
那么如何在另一种方法中使用customGroup来使用fetchCustomGroup()
答案 0 :(得分:0)
我认为你想要的是避免两次执行查询。这可以通过不同方式完成。最简单的方法是将响应分配给控制器中的变量,然后使用getter而不是dao。控制器默认为单例。类似的东西:
private Foo customGroup;
private synchronized Foo getCustomGroup() {
if(customGroup == null) {
customGroup = grpDao.fetchCustomGroup();
}
return customGroup;
}
然后使用getCustomGroup()
代替grpDao.fetchCustomGroup()
我不知道你使用的持久性,但使用缓存也是一个好主意,以避免执行两次查询。