gpt4 book ai didi

java - 如何在 Spring MVC 中将数据库中的数据存储到字段中

转载 作者:行者123 更新时间:2023-12-01 14:47:39 25 4
gpt4 key购买 nike

我有一个与逻辑相关而不是技术相关的问题,这是一个场景,(我使用 Spring + Hibernate)

我需要从数据库中读取一些数据,以便在每次获取请求时返回页面,但我认为这里有一些技巧,如果使用某些脚本,有人非常频繁地重新加载页面,这会导致对服务器的多次调用,为此我想读取数据并将它们放入全局变量或类变量中,通过这样做,我最终编写了非常奇怪的代码,许多全局变量和愚蠢的方法给它们初始值,就像变量用户状态,它是一个字节类型变量我已给出 -2 作为初始值,以便我的内部逻辑可以理解数据库中没有为此变量设置值,下面是我的代码

    @Controller
/* @Secured("hasRole('ROLE_USERS')") */
@RequestMapping("member")
public class ApplyRoles {

@Autowired
private UserInformationForAccessApplication checkUserStatus;

// we will initialize variables to avoid auto-initialize by constructor
private byte userStatus = Constant.IntializationOfGlobalVariable.GLOBALINIT,
requesttype = Constant.IntializationOfGlobalVariable.GLOBALINIT,
access = Constant.IntializationOfGlobalVariable.GLOBALINIT;

Map<String, Object> accessnrole;
Map<String, String> country;
Map<String, String> roleArray;

@Autowired
StudentEnrollmentApplication enrollmentApplication;

@Autowired
SystemProperties systemProperties;

@Autowired
EmployeeEnrollmentApplicationResume employeeEnrollmentApplicationResume;

@Autowired
AccessEnrollmentProcessing accessEnrollmentProcessing;

private String role = Constant.IntializationOfGlobalVariable.ROLENOTSET,
fname, lname;

@RequestMapping(value = "/user", method = RequestMethod.GET)
public String checkingUserStatus(Model model, HttpSession session,
Authentication authentication) {

String sessionemail = "yashprit@gmail.com";// (String) session
// .getAttribute(Constant.SessionAttributes.LOGGEDINUSER);

// first check global value, if found set than don't fetch from database
if (userStatus == Constant.IntializationOfGlobalVariable.GLOBALINIT) {
// get user status from MySQL Database
userStatus = checkUserStatus.checkStatus(sessionemail).get(0);
if (!(userStatus == Constant.UserRoleApplicationStatus.NOTAPPLIED)) {
access = checkUserStatus.checkStatus(sessionemail).get(1);
model.addAttribute(Constant.SystemName.ACCESS, access);
}
}

if (!(userStatus >= Constant.UserRoleApplicationStatus.NOTAPPLIED || userStatus <= Constant.UserRoleApplicationStatus.REJECTED)) {
model.addAttribute("error", "User status is not avaible");
return "redirect:error/pagenotfound";
} else if (userStatus == Constant.UserRoleApplicationStatus.NOTAPPLIED) {
if (requesttype == Constant.IntializationOfGlobalVariable.GLOBALINIT) {
// get request type from MongoDB database
requesttype = checkUserStatus.getRequestType(sessionemail);
}

if (!(requesttype == Constant.RequestType.NORMALEBIT || requesttype == Constant.RequestType.INVITEBIT)) {
model.addAttribute("error",
"Facing Technichal Issue, Please try again");
return "redirect:error/pagenotfound";
}

if (requesttype == Constant.RequestType.INVITEBIT) {
if (!(Byte.parseByte((String) accessnrole
.get(Constant.SystemName.ACCESS)) == Constant.Access.USERBIT)) {
accessnrole = checkUserStatus
.getAccessAndRole(sessionemail);
}

if (accessnrole.get(Constant.SystemName.ACCESS).equals(
Constant.Database.ERRORMESSAGE)
|| accessnrole.get(Constant.SystemName.ROLE).equals(
Constant.Database.ERRORMESSAGE)) {

model.addAttribute("error",
"Facing Technichal Issue, Please try again");
return "redirect:error/pagenotfound";
}

model.addAttribute(Constant.SystemName.ACCESSNROLE, accessnrole);
model.addAttribute(Constant.SystemName.REQUESTTYPE, requesttype);
}
}

model.addAttribute(Constant.SystemName.USERSTATUS, userStatus);


return "member/user";

}
}

为了避免全局变量,我想到了起诉cookie,因为我不想在同一 session 中的每个页面重新加载时调用数据库,一旦为 session 加载,我就不必调用数据库。

任何有助于重新设计上述部分代码的内容都将不胜感激

谢谢

最佳答案

您确实正在考虑两件事,如果我错了,请正确地考虑,但是:

  1. 在服务器上(在您的 Java 应用程序中)进行缓存,以避免对相同数据进行多次数据库查找。
  2. 避免客户端(浏览器)向服务器发送多个请求。

第一个问题可以使用缓存来解决,Spring 中可用的缓存在任何给定方法上使用注释。该文档可用 here .

第二个有点棘手,除非您发现性能问题,否则我暂时保留它。在 Spring 中也可以做到这一点,并利用 HTTP 协议(protocol)和 HTTP header 中可用的缓存控件来通知浏览器缓存响应的时间。

关于java - 如何在 Spring MVC 中将数据库中的数据存储到字段中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15257412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com