最近要用到jhipster開發,遇到好多疑問,整理第一個
1 如何實現的數據查詢功能。
從以下代碼查看
首先是controller層代碼如下
controller層
package cn.com.yusys.uaa.web.rest;
import cn.com.yusys.uaa.domain.AdminSmUser;
import cn.com.yusys.uaa.repository.AdminSmUserRepository;
import cn.com.yusys.uaa.service.AdminSmUserService;
import com.codahale.metrics.annotation.Timed;
import cn.com.yusys.uaa.domain.User;
import cn.com.yusys.uaa.repository.UserRepository;
import cn.com.yusys.uaa.security.SecurityUtils;
import cn.com.yusys.uaa.service.MailService;
import cn.com.yusys.uaa.service.UserService;
import cn.com.yusys.uaa.service.dto.UserDTO;
import cn.com.yusys.uaa.web.rest.vm.KeyAndPasswordVM;
import cn.com.yusys.uaa.web.rest.vm.ManagedUserVM;
import cn.com.yusys.uaa.web.rest.vm.OldAndNewPassWord;
import cn.com.yusys.uaa.web.rest.util.HeaderUtil;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.util.*;
/**
* REST controller for managing the current user’s account.
*/
@RestController
@RequestMapping(“/api”)
public class AdminSmUserResource {
private final Logger log = LoggerFactory.getLogger(AccountResource.class);
private final UserRepository userRepository;
private final UserService userService;
private final MailService mailService;
public AdminSmUserResource(UserRepository userRepository, UserService userService,
MailService mailService) {
this.userRepository = userRepository;
this.userService = userService;
this.mailService = mailService;
}
@Resource
private AdminSmUserService adminSmUserService;
@Resource
private AdminSmUserRepository adminSmUserRepository;
/**
* POST /register : 註冊用戶.
*
* @param managedUserVM the managed user View Model
* @return the ResponseEntity with status 201 (Created) if the user is registered or 400 (Bad Request) if the login or email is already in use
*/
@PostMapping(path = "/register",
produces = {MediaType.APPLICATION_JSON_VALUE, MediaType.TEXT_PLAIN_VALUE})
@Timed
public ResponseEntity registerAccount(@Valid @RequestBody ManagedUserVM managedUserVM) {
HttpHeaders textPlainHeaders = new HttpHeaders();
textPlainHeaders.setContentType(MediaType.TEXT_PLAIN);
return adminSmUserService.findOneByLoginCode(managedUserVM.getLogin().toLowerCase())
.map(user -> new ResponseEntity<>("login already in use", textPlainHeaders, HttpStatus.BAD_REQUEST))
.orElseGet(() -> adminSmUserRepository.findOneByUserEmail(managedUserVM.getEmail())
.map(user -> new ResponseEntity<>("email address already in use", textPlainHeaders, HttpStatus.BAD_REQUEST))
.orElseGet(() -> {
AdminSmUser adminSmUser = new AdminSmUser();
adminSmUser.setLoginCode(managedUserVM.getLogin());
adminSmUser.setUserPassword(managedUserVM.getPassword());
adminSmUser.setUserEmail(managedUserVM.getEmail().toLowerCase());
adminSmUser.setUserAvatar(managedUserVM.getImageUrl());
adminSmUserService.registerAccount(adminSmUser);
// mailService.sendActivationEmail(user);
return new ResponseEntity<>(HttpStatus.CREATED);
})
);
}
/**
* GET /account : 獲取當前用戶.
*
* @return the ResponseEntity with status 200 (OK) and the current user in body, or status 500 (Internal Server Error) if the user couldn't be returned
*/
@GetMapping("/account")
@Timed
public ResponseEntity<UserDTO> getAccount() {
String loginCode = SecurityUtils.getCurrentUserLogin();
return adminSmUserService.getUserInfo(loginCode)
.map(user -> new ResponseEntity<>(new UserDTO(user), HttpStatus.OK))
.orElse(new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR));
}
/**
* POST /account/change_password : changes the current user's password
*
* @param password the new password
* @return the ResponseEntity with status 200 (OK), or status 400 (Bad Request) if the new password is not strong enough
*/
@PostMapping(path = "/account/change_password",
produces = MediaType.TEXT_PLAIN_VALUE)
@Timed
public ResponseEntity changePassword(@RequestBody OldAndNewPassWord models) {
String newPassWord = models.getNewPassword();
String oldPassWord = models.getoldPassWord();
//String oldPassWord="";
if (!checkPasswordLength(newPassWord)) {
return new ResponseEntity<>("Incorrect password", HttpStatus.BAD_REQUEST);
}
if( adminSmUserService.validPassword(oldPassWord)) {
adminSmUserService.changePassword(newPassWord);
return new ResponseEntity<>(HttpStatus.OK);
}else {
return new ResponseEntity<>("Incorrect password", HttpStatus.BAD_REQUEST);
}
}
/**
* POST /account : 修改用戶信息.
*
* @param userDTO the current user information
* @return the ResponseEntity with status 200 (OK), or status 400 (Bad Request) or 500 (Internal Server Error) if the user couldn't be updated
*/
@PostMapping("/account")
@Timed
public ResponseEntity saveAccount(@Valid @RequestBody UserDTO userDTO) {
Optional<User> existingUser = userRepository.findOneByEmail(userDTO.getEmail());
if (existingUser.isPresent() && (!existingUser.get().getLogin().equalsIgnoreCase(userDTO.getLogin()))) {
return ResponseEntity.badRequest().headers(HeaderUtil.createFailureAlert("user-management", "emailexists", "Email already in use")).body(null);
}
return userRepository
.findOneByLogin(SecurityUtils.getCurrentUserLogin())
.map(u -> {
userService.updateUser(userDTO.getFirstName(), userDTO.getLastName(), userDTO.getEmail(),
userDTO.getLangKey(), userDTO.getImageUrl());
return new ResponseEntity(HttpStatus.OK);
})
.orElseGet(() -> new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR));
}
/**
* GET /activate : 激活註冊用戶.
*
* @param key the activation key
* @return the ResponseEntity with status 200 (OK) and the activated user in body, or status 500 (Internal Server Error) if the user couldn't be activated
*/
@GetMapping("/activate")
@Timed
public ResponseEntity<String> activateAccount(@RequestParam(value = "key") String key) {
return userService.activateRegistration(key)
.map(user -> new ResponseEntity<String>(HttpStatus.OK))
.orElse(new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR));
}
/**
* GET /authenticate : check if the user is authenticated, and return its login.
*
* @param request the HTTP request
* @return the login if the user is authenticated
*/
@GetMapping("/authenticate")
@Timed
public String isAuthenticated(HttpServletRequest request) {
log.debug("REST request to check if the current user is authenticated");
return request.getRemoteUser();
}
/**
* POST /account/reset_password/init : Send an email to reset the password of the user
*
* @param mail the mail of the user
* @return the ResponseEntity with status 200 (OK) if the email was sent, or status 400 (Bad Request) if the email address is not registered
*/
@PostMapping(path = "/account/reset_password/init",
produces = MediaType.TEXT_PLAIN_VALUE)
@Timed
public ResponseEntity requestPasswordReset(@RequestBody String mail) {
return userService.requestPasswordReset(mail)
.map(user -> {
mailService.sendPasswordResetMail(user);
return new ResponseEntity<>("email was sent", HttpStatus.OK);
}).orElse(new ResponseEntity<>("email address not registered", HttpStatus.BAD_REQUEST));
}
/**
* POST /account/reset_password/finish : Finish to reset the password of the user
*
* @param keyAndPassword the generated key and the new password
* @return the ResponseEntity with status 200 (OK) if the password has been reset,
* or status 400 (Bad Request) or 500 (Internal Server Error) if the password could not be reset
*/
@PostMapping(path = "/account/reset_password/finish",
produces = MediaType.TEXT_PLAIN_VALUE)
@Timed
public ResponseEntity<String> finishPasswordReset(@RequestBody KeyAndPasswordVM keyAndPassword) {
if (!checkPasswordLength(keyAndPassword.getNewPassword())) {
return new ResponseEntity<>("Incorrect password", HttpStatus.BAD_REQUEST);
}
return userService.completePasswordReset(keyAndPassword.getNewPassword(), keyAndPassword.getKey())
.map(user -> new ResponseEntity<String>(HttpStatus.OK))
.orElse(new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR));
}
private boolean checkPasswordLength(String password) {
return !StringUtils.isEmpty(password) &&
password.length() >= ManagedUserVM.PASSWORD_MIN_LENGTH &&
password.length() <= ManagedUserVM.PASSWORD_MAX_LENGTH;
}
}
可以看到裏面調用了adminSmUserService這樣的service層。
單個adminSmUserService
package cn.com.yusys.uaa.service;
import cn.com.yusys.uaa.domain.AdminSmRole;
import cn.com.yusys.uaa.domain.AdminSmUser;
import cn.com.yusys.uaa.domain.AdminSmUserRoleRel;
import cn.com.yusys.uaa.domain.Authority;
import cn.com.yusys.uaa.repository.AdminSmRoleRepository;
import cn.com.yusys.uaa.repository.AdminSmUserRepository;
import cn.com.yusys.uaa.repository.AdminSmUserRoleRelRepository;
import cn.com.yusys.uaa.security.AuthoritiesConstants;
import cn.com.yusys.uaa.security.SecurityUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.netflix.infix.lang.infix.antlr.EventFilterParser.boolean_expr_return;
import javax.annotation.Resource;
import java.util.*;
/**
* 功能描述:
*
* @author
* @date 2017年12月13日
* @company Copyright © 2016 Yusys Technologies Co., Ltd. All Rights Reserved.
*/
@Service
@Transactional
public class AdminSmUserService {
private final Logger log = LoggerFactory.getLogger(AdminSmUserService.class);
@Resource
private AdminSmUserRepository adminSmUserRepository;
@Resource
private AdminSmRoleRepository adminSmRoleRepository;
@Resource
private AdminSmUserRoleRelRepository adminSmUserRoleRelRepository;
@Resource
private PasswordEncoder passwordEncoder;
@Transactional(readOnly = true)
public Optional<AdminSmUser> findOneByLoginCode(String loginCode) {
return adminSmUserRepository.findOneWithAuthoritiesByLoginCode(loginCode);
// return adminSmUserRepository.findOneByLoginCode(loginCode);
}
/**
* 註冊用戶
* //TODO 默認值臨時添加,後期調整
*
* @param adminSmUser
* @return
*/
public AdminSmUser registerAccount(AdminSmUser adminSmUser) {
String encryptedPassword = passwordEncoder.encode(adminSmUser.getUserPassword());
AdminSmRole authority = adminSmRoleRepository.findOneByRoleCode(AuthoritiesConstants.ADMIN);//添加admin角色
adminSmUser.setUserPassword(encryptedPassword);
adminSmUser = adminSmUserRepository.save(adminSmUser);
log.debug("Created Information for User: {}", adminSmUser);
//添加用戶角色
AdminSmUserRoleRel rel = new AdminSmUserRoleRel();
rel.setUserId(adminSmUser.getUserId());
rel.setRoleId(authority.getRoleId());
rel.setRelSts("1");//TODO 修改
rel.setLastChgUsr(adminSmUser.getLoginCode());
String date = DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss");
rel.setLastChgDt(date);
adminSmUserRoleRelRepository.save(rel);
log.debug("Created Information for User Role Relation: {}", rel);
return adminSmUser;
}
/**
* 獲取用戶、權限等詳細信息
*
* @return
*/
@Cacheable(value = "users", key = "#loginCode")
public Optional<AdminSmUser> getUserInfo(String loginCode) {
return adminSmUserRepository.findOneWithAuthoritiesByLoginCode(loginCode);
}
/**
* 修改密碼
*
* @param password
*/
public void changePassword(String password) {
Optional.ofNullable(adminSmUserRepository.findOneByLoginCode(SecurityUtils.getCurrentUserLogin())).ifPresent(user -> {
String encryptedPassword = passwordEncoder.encode(password);
user.setUserPassword(encryptedPassword);
log.debug("Changed password for User: {}", user);
});
}
/**
* 修改密碼前校驗原密碼
*
* @param oldpassword
*/
public boolean validPassword(String password) {
boolean passWordValid=false;
AdminSmUser adminSmUser =adminSmUserRepository.findOneByLoginCode(SecurityUtils.getCurrentUserLogin());
if(passwordEncoder.matches(password, adminSmUser.getUserPassword())) {
passWordValid = true;
}
return passWordValid;
}
}
在這裏面調用了adminSmUserRepository.findOneByLoginCode以及類似的方法。所以找到該方法
adminSmUserRepository
package cn.com.yusys.uaa.repository;
import cn.com.yusys.uaa.domain.AdminSmUser;
import org.springframework.data.jpa.repository.EntityGraph;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.http.ResponseEntity;
import java.util.Optional;
/**
* 功能描述:
*
* @author
* @date 2017年12月12日
* @company Copyright © 2016 Yusys Technologies Co., Ltd. All Rights Reserved.
*/
public interface AdminSmUserRepository extends JpaRepository
實體類
package cn.com.yusys.uaa.domain;
import cn.com.yusys.uaa.security.SecurityUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.hibernate.annotations.BatchSize;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.validator.constraints.Email;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.sql.Time;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
/**
* 功能描述:
*
* @author
* @date 2017年12月12日
* @company Copyright © 2016 Yusys Technologies Co., Ltd. All Rights Reserved.
*/
@Entity
@Table(name = “表名稱”)
public class AdminSmUser implements Serializable {
private String userId;
private String loginCode;
private String userName = " ";
private String certType = "1";
private String certNo;
private String userCode;
private Time deadline;
private String orgId = "1";
private String dptId;
private String userPassword;
private String userSex;
private Time userBirthday;
private String userEmail;
private String userMobilephone;
private String userOfficetel;
private String userEducation;
private String userCertificate;
private Time entrantsDate;
private String positionTime;
private String financialJobTime;
private String positionDegree;
private String userAvatar;
private String offenIp;
private String userSts = "1";
private String lastLoginTime;
private Time lastEditPassTime;
private String lastChgUsr = SecurityUtils.getCurrentUserLogin();
private String lastChgDt = DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss");
private Set<AdminSmRole> authorities = new HashSet<>();
/*@Transient
private AdminSmOrg adminSmOrg;
@Transient
private AdminSmDpt adminSmDpt;*/
@Id
@Column(name = "USER_ID")
/* @GeneratedValue(generator = “uuid2” )
@GenericGenerator(name = “uuid2”, strategy = “org.hibernate.id.UUIDGenerator” )*/
@GeneratedValue(generator = “uuid”)
@GenericGenerator(name = “uuid”, strategy = “uuid”)
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
@NotNull
@Basic
@Column(name = "LOGIN_CODE")
public String getLoginCode() {
return loginCode;
}
public void setLoginCode(String loginCode) {
this.loginCode = loginCode;
}
@Basic
@Column(name = "USER_NAME")
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@Basic
@Column(name = "CERT_TYPE")
public String getCertType() {
return certType;
}
public void setCertType(String certType) {
this.certType = certType;
}
@Basic
@Column(name = "CERT_NO")
public String getCertNo() {
return certNo;
}
public void setCertNo(String certNo) {
this.certNo = certNo;
}
@Basic
@Column(name = "USER_CODE")
public String getUserCode() {
return userCode;
}
public void setUserCode(String userCode) {
this.userCode = userCode;
}
@Basic
@Column(name = "DEADLINE")
public Time getDeadline() {
return deadline;
}
public void setDeadline(Time deadline) {
this.deadline = deadline;
}
@Basic
@Column(name = "ORG_ID")
public String getOrgId() {
return orgId;
}
public void setOrgId(String orgId) {
this.orgId = orgId;
}
@Basic
@Column(name = "DPT_ID")
public String getDptId() {
return dptId;
}
public void setDptId(String dptId) {
this.dptId = dptId;
}
@Basic
@Column(name = "USER_PASSWORD")
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
@Basic
@Column(name = "USER_SEX")
public String getUserSex() {
return userSex;
}
public void setUserSex(String userSex) {
this.userSex = userSex;
}
@Basic
@Column(name = "USER_BIRTHDAY")
public Time getUserBirthday() {
return userBirthday;
}
public void setUserBirthday(Time userBirthday) {
this.userBirthday = userBirthday;
}
@Basic
@Email
@Column(name = "USER_EMAIL")
public String getUserEmail() {
return userEmail;
}
public void setUserEmail(String userEmail) {
this.userEmail = userEmail;
}
@Basic
@Column(name = "USER_MOBILEPHONE")
public String getUserMobilephone() {
return userMobilephone;
}
public void setUserMobilephone(String userMobilephone) {
this.userMobilephone = userMobilephone;
}
@Basic
@Column(name = "USER_OFFICETEL")
public String getUserOfficetel() {
return userOfficetel;
}
public void setUserOfficetel(String userOfficetel) {
this.userOfficetel = userOfficetel;
}
@Basic
@Column(name = "USER_EDUCATION")
public String getUserEducation() {
return userEducation;
}
public void setUserEducation(String userEducation) {
this.userEducation = userEducation;
}
@Basic
@Column(name = "USER_CERTIFICATE")
public String getUserCertificate() {
return userCertificate;
}
public void setUserCertificate(String userCertificate) {
this.userCertificate = userCertificate;
}
@Basic
@Column(name = "ENTRANTS_DATE")
public Time getEntrantsDate() {
return entrantsDate;
}
public void setEntrantsDate(Time entrantsDate) {
this.entrantsDate = entrantsDate;
}
@Basic
@Column(name = "POSITION_TIME")
public String getPositionTime() {
return positionTime;
}
public void setPositionTime(String positionTime) {
this.positionTime = positionTime;
}
@Basic
@Column(name = "FINANCIAL_JOB_TIME")
public String getFinancialJobTime() {
return financialJobTime;
}
public void setFinancialJobTime(String financialJobTime) {
this.financialJobTime = financialJobTime;
}
@Basic
@Column(name = "POSITION_DEGREE")
public String getPositionDegree() {
return positionDegree;
}
public void setPositionDegree(String positionDegree) {
this.positionDegree = positionDegree;
}
@Basic
@Column(name = "USER_AVATAR")
public String getUserAvatar() {
return userAvatar;
}
public void setUserAvatar(String userAvatar) {
this.userAvatar = userAvatar;
}
@Basic
@Column(name = "OFFEN_IP")
public String getOffenIp() {
return offenIp;
}
public void setOffenIp(String offenIp) {
this.offenIp = offenIp;
}
@Basic
@Column(name = "USER_STS")
public String getUserSts() {
return userSts;
}
public void setUserSts(String userSts) {
this.userSts = userSts;
}
@Basic
@Column(name = "LAST_LOGIN_TIME")
public String getLastLoginTime() {
return lastLoginTime;
}
public void setLastLoginTime(String lastLoginTime) {
this.lastLoginTime = lastLoginTime;
}
@Basic
@Column(name = "LAST_EDIT_PASS_TIME")
public Time getLastEditPassTime() {
return lastEditPassTime;
}
public void setLastEditPassTime(Time lastEditPassTime) {
this.lastEditPassTime = lastEditPassTime;
}
@Basic
@Column(name = "LAST_CHG_USR")
public String getLastChgUsr() {
return lastChgUsr;
}
public void setLastChgUsr(String lastChgUsr) {
this.lastChgUsr = lastChgUsr;
}
@Basic
@Column(name = "LAST_CHG_DT")
public String getLastChgDt() {
return lastChgDt;
}
public void setLastChgDt(String lastChgDt) {
this.lastChgDt = lastChgDt;
}
// @JsonIgnore
@ManyToMany
@JoinTable(
name = "ADMIN_SM_USER_ROLE_REL",
joinColumns = {@JoinColumn(name = "USER_ID", referencedColumnName = "USER_ID")},
inverseJoinColumns = {@JoinColumn(name = "ROLE_ID", referencedColumnName = "ROLE_ID")})
@BatchSize(size = 20)
public Set<AdminSmRole> getAuthorities() {
return authorities;
}
public void setAuthorities(Set<AdminSmRole> authorities) {
this.authorities = authorities;
}
/*
// @JsonIgnore
// @ManyToOne(cascade = {CascadeType.REFRESH})
@JoinColumn(name = “ORG_ID”, referencedColumnName = “ORG_ID”, insertable = false, updatable = false)//
public AdminSmOrg getAdminSmOrg() {
return adminSmOrg;
}
public void setAdminSmOrg(AdminSmOrg adminSmOrg) {
this.adminSmOrg = adminSmOrg;
}
// @JsonIgnore
*//*@ManyToOne(cascade = {CascadeType.REFRESH})
@JoinColumn(name = "DPT_ID", referencedColumnName = "DPT_ID", insertable = false, updatable = false)*//*
public AdminSmDpt getAdminSmDpt() {
return adminSmDpt;
}
public void setAdminSmDpt(AdminSmDpt adminSmDpt) {
this.adminSmDpt = adminSmDpt;
}*/
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
AdminSmUser that = (AdminSmUser) o;
if (userId != null ? !userId.equals(that.userId) : that.userId != null) return false;
if (loginCode != null ? !loginCode.equals(that.loginCode) : that.loginCode != null) return false;
if (userName != null ? !userName.equals(that.userName) : that.userName != null) return false;
if (certType != null ? !certType.equals(that.certType) : that.certType != null) return false;
if (certNo != null ? !certNo.equals(that.certNo) : that.certNo != null) return false;
if (userCode != null ? !userCode.equals(that.userCode) : that.userCode != null) return false;
if (deadline != null ? !deadline.equals(that.deadline) : that.deadline != null) return false;
if (orgId != null ? !orgId.equals(that.orgId) : that.orgId != null) return false;
if (dptId != null ? !dptId.equals(that.dptId) : that.dptId != null) return false;
if (userPassword != null ? !userPassword.equals(that.userPassword) : that.userPassword != null) return false;
if (userSex != null ? !userSex.equals(that.userSex) : that.userSex != null) return false;
if (userBirthday != null ? !userBirthday.equals(that.userBirthday) : that.userBirthday != null) return false;
if (userEmail != null ? !userEmail.equals(that.userEmail) : that.userEmail != null) return false;
if (userMobilephone != null ? !userMobilephone.equals(that.userMobilephone) : that.userMobilephone != null)
return false;
if (userOfficetel != null ? !userOfficetel.equals(that.userOfficetel) : that.userOfficetel != null)
return false;
if (userEducation != null ? !userEducation.equals(that.userEducation) : that.userEducation != null)
return false;
if (userCertificate != null ? !userCertificate.equals(that.userCertificate) : that.userCertificate != null)
return false;
if (entrantsDate != null ? !entrantsDate.equals(that.entrantsDate) : that.entrantsDate != null) return false;
if (positionTime != null ? !positionTime.equals(that.positionTime) : that.positionTime != null) return false;
if (financialJobTime != null ? !financialJobTime.equals(that.financialJobTime) : that.financialJobTime != null)
return false;
if (positionDegree != null ? !positionDegree.equals(that.positionDegree) : that.positionDegree != null)
return false;
if (userAvatar != null ? !userAvatar.equals(that.userAvatar) : that.userAvatar != null) return false;
if (offenIp != null ? !offenIp.equals(that.offenIp) : that.offenIp != null) return false;
if (userSts != null ? !userSts.equals(that.userSts) : that.userSts != null) return false;
if (lastLoginTime != null ? !lastLoginTime.equals(that.lastLoginTime) : that.lastLoginTime != null)
return false;
if (lastEditPassTime != null ? !lastEditPassTime.equals(that.lastEditPassTime) : that.lastEditPassTime != null)
return false;
if (lastChgUsr != null ? !lastChgUsr.equals(that.lastChgUsr) : that.lastChgUsr != null) return false;
if (lastChgDt != null ? !lastChgDt.equals(that.lastChgDt) : that.lastChgDt != null) return false;
return true;
}
@Override
public int hashCode() {
int result = userId != null ? userId.hashCode() : 0;
result = 31 * result + (loginCode != null ? loginCode.hashCode() : 0);
result = 31 * result + (userName != null ? userName.hashCode() : 0);
result = 31 * result + (certType != null ? certType.hashCode() : 0);
result = 31 * result + (certNo != null ? certNo.hashCode() : 0);
result = 31 * result + (userCode != null ? userCode.hashCode() : 0);
result = 31 * result + (deadline != null ? deadline.hashCode() : 0);
result = 31 * result + (orgId != null ? orgId.hashCode() : 0);
result = 31 * result + (dptId != null ? dptId.hashCode() : 0);
result = 31 * result + (userPassword != null ? userPassword.hashCode() : 0);
result = 31 * result + (userSex != null ? userSex.hashCode() : 0);
result = 31 * result + (userBirthday != null ? userBirthday.hashCode() : 0);
result = 31 * result + (userEmail != null ? userEmail.hashCode() : 0);
result = 31 * result + (userMobilephone != null ? userMobilephone.hashCode() : 0);
result = 31 * result + (userOfficetel != null ? userOfficetel.hashCode() : 0);
result = 31 * result + (userEducation != null ? userEducation.hashCode() : 0);
result = 31 * result + (userCertificate != null ? userCertificate.hashCode() : 0);
result = 31 * result + (entrantsDate != null ? entrantsDate.hashCode() : 0);
result = 31 * result + (positionTime != null ? positionTime.hashCode() : 0);
result = 31 * result + (financialJobTime != null ? financialJobTime.hashCode() : 0);
result = 31 * result + (positionDegree != null ? positionDegree.hashCode() : 0);
result = 31 * result + (userAvatar != null ? userAvatar.hashCode() : 0);
result = 31 * result + (offenIp != null ? offenIp.hashCode() : 0);
result = 31 * result + (userSts != null ? userSts.hashCode() : 0);
result = 31 * result + (lastLoginTime != null ? lastLoginTime.hashCode() : 0);
result = 31 * result + (lastEditPassTime != null ? lastEditPassTime.hashCode() : 0);
result = 31 * result + (lastChgUsr != null ? lastChgUsr.hashCode() : 0);
result = 31 * result + (lastChgDt != null ? lastChgDt.hashCode() : 0);
return result;
}
}
目前初步瞭解到只要繼承了接口JpaRepository的類就可以自動調用類中封裝的方法,因爲是接口,只能繼承不能實現。但是不用實現類也可以用。