0

我有一个家庭控制器,其中我有 2 种方法之一是

    @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";
}

在此方法中,实际上我grpDao.fetchCustomGroup()从 Dao 类调用方法,该类执行本机查询并获​​取数据并返回,并将其保存在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()

4

1 回答 1

0

我认为您想要的是避免执行两次查询。这可以通过不同的方式来完成。最简单的方法是将响应分配给控制器中的变量,然后使用 getter 而不是 dao。控制器默认是单例的。就像是 :

private Foo customGroup;

private synchronized Foo getCustomGroup() {
    if(customGroup == null) {
        customGroup = grpDao.fetchCustomGroup();
    } 
    return customGroup;
}

然后使用getCustomGroup()代替grpDao.fetchCustomGroup()

我不知道您使用什么来进行持久性,但使用缓存也是避免执行两次查询的好主意。

于 2013-02-06T10:52:35.330 回答