【问题标题】:Take id from mysql table table with springboot and concatenate with url使用springboot从mysql表中获取id并与url连接
【发布时间】:2025-11-23 14:25:01
【问题描述】:

我已将下面的 id 硬编码为 1,但我需要从 EMPLOYEE 数据库的 employeedetails 表中获取 id

int id=1; //This id needs to come from table from column id


public void addViewControllers(ViewControllerRegistry registry) {   
    registry.addViewController("/home").setViewName("home");
    registry.addRedirectViewController("/", "/applyleave/"+ id);
}

@Autowired
public DataSource dataSource() {
    BasicDataSource dataSource = new BasicDataSource();
    dataSource.setDriverClassName("com.mysql.jdbc.Driver");
    dataSource.setUrl("jdbc:mysql://localhost:3306/EMPLOYEE");
    dataSource.setUsername("root");
    dataSource.setPassword("password");
    return dataSource;
}

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
    auth
    .jdbcAuthentication().dataSource(dataSource()).usersByUsernameQuery("select user_id, password, loginstatus from employeedetails where user_id=? ").authoritiesByUsernameQuery("select user_id, role from employeedetails where user_id=? ");
}

如何通过 Spring Boot Java 配置实现这一点?

【问题讨论】:

  • 在employee中写一个查询方法。这将找出员工表中的所有条目。然后在上面的代码中调用该方法。然后将您的 id 设置为 employee.getid() 并将其传递到您想要的任何地方
  • 我在 DAO 中有这个代码,但是我不能从主 java 文件调用这个方法:我如何在上面的 java 代码public Integer getidforuserId(String userId) { return (Integer) entityManager.createQuery("select id from Employee where userId like :userId ").setParameter("userId", userId).getSingleResult(); }调用这个方法
  • 我没有正确获取您的代码,但如果您愿意,我可以分享我关于如何使用不同表中的此类 id 的想法
  • 您能帮我从数据库中获取员工 ID 并分配给变量

标签: mysql spring-security spring-boot spring-jdbc


【解决方案1】:

无论我从您的问题中了解到什么,我都有一个解决方案 在 EmployeeDAO
中写一个您的员工查询 这里 Employee 是所有 getter setter 方法的实体类

public Employee getByUserId(Integer userId) {

//return your query for userId here

}

然后在您必须使用员工 ID 的用户类中调用此类

@Autowired
EmployeeDAO employeeDAO;

public void addViewControllers(ViewControllerRegistry registry) {

  Employee employee = employeeDAO.getByUserId(//pass your user id here)
   id = employee.getId();

   registry.addViewController("/home").setViewName("home");
   registry.addRedirectViewController("/", "/applyleave/"+ id);
}

这样你就可以在这里使用employeeId了。

【讨论】:

  • 我的 EmployeeDAOImpl public Integer getidforuserId(String userId) { return (Integer) entityManager.createQuery("select id from Employee where userId like :userId ").setParameter("userId", userId).getSingleResult(); } 我的班级代码:@Autowired private static EmployeeDaoImpl employeedaoimpl; public void addViewControllers(ViewControllerRegistry registry) { Employee employee=employeedaoimpl.getByUserID("vikram.mscsw@gmail.com"); id=employee.getId(); 但我得到以下异常:
  • public Employee getidforuserId(String userId) { .... }Employee 类中声明所有getter setter,以便您可以在其他方法中使用它的值
  • 我已经在 Employee 类中有 getter setter 方法,但是每当我使用 employee=employeedaoimpl.getByUserID("vikram.mscsw@gmail.com"); id=employee.getId();
  • 为什么你在getByUserId方法中传递你的电子邮件地址,这里你必须传递id
  • 我的登录表单没有电子邮件地址(即用户 ID 和密码),当我将此电子邮件地址作为参数传递时,它将返回该电子邮件 ID 的相应员工 ID。
【解决方案2】:

这个方法是控制器解决的问题。

@RequestMapping(value = "/", method = RequestMethod.GET)
public String getid() {
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        String userid = auth.getName();
        int id=employeeDaoImpl.getIdByUserId(userid);
        return "redirect:/applyleave/"+id;
    }

谢谢大家!!!

【讨论】: