我如何使用从表单中获得的值作为我的 dao 类中的变量?

Posted

技术标签:

【中文标题】我如何使用从表单中获得的值作为我的 dao 类中的变量?【英文标题】:How can i use the value which i got from a form as an variable in my dao class? 【发布时间】:2020-09-03 06:09:53 【问题描述】:

我正在尝试创建一个页面,我将在该页面上键入 java 之类的兴趣,然后我将从数据库中获取所有对 java 感兴趣的行,所以我创建了这个表单元素

<input class="form-control" type="text" placeholder="Search..." name="interest"><br>

这是我在控制器中的映射

@ModelAttribute("courses")
    public Map<String, String> getCourseList() throws SQLException, IOException 

        return (new ServiceImpl()).getCourseList();
    
    
    @RequestMapping(value="showCourses", method=RequestMethod.POST)
    public ModelAndView showCourses(@RequestParam("interest") String interest) 
        ModelAndView mv=new ModelAndView();
        mv.addObject("interest",interest);
        mv.setViewName("showCourses");
        return mv;
    

我正在从数据库中获取所有课程,但在我的 daoimpl 课程中

public Map<String, String> courseList() throws SQLException, IOException 
        connect();
        Map<String, String> courseList = new HashMap<String, String>();
        String sql = "SELECT * from course;";
        resultSet = statement.executeQuery(sql);
        while (resultSet.next()) 
            courseList.put(resultSet.getString("CourseName"), resultSet.getString("CourseName"));
        
        return courseList;
    

在这个 courseList 方法中,我想使用兴趣,以便我只能获取特定兴趣的课程并在我的 jsp 上显示它们如何在我的 daoImpl 类中使用兴趣?

【问题讨论】:

不明白问题出在哪里。但首先,我假设 ServiceImpl 是一个 Spring bean,不应该直接实例化。而是自动装配 bean。其次,要在you dao中使用查询参数,只需提供作为方法参数 好的,我将 ServiceImpl 作为 Bean 并自动装配它,但我如何将我在控制器中请求的兴趣传递给 dao? 只是作为方法参数 【参考方案1】:

请看下面的代码sn-p。

您已经实现了 dao,只需对该方法进行少量修改即可:-

public Map<String, String> getCourseList(String subjectInterest) 
     connect();
     Map<String, String> courseList = new HashMap<String, String>();
     String sql = "SELECT * from course where subInterest = ?";
     statement.setString(1,subjectInterest);
     resultSet = statement.executeQuery(sql);
     while (resultSet.next()) 
        courseList.put(resultSet.getString("CourseName"), resultSet.getString("CourseName"));
     
     return courseList;

除此之外,您还需要实现一个服务类,您可以从中调用您的 dao 方法来获取课程详细信息,如下所示:-

@Service
public class CourseService 
    @Autowired
    private CourseDAO courseDao;

    public Map<String, String> getCourseList(String subjectInterest) throws SQLException, IOException 
        return courseDao.getCourseList(subjectInterest);
    

在您的控制器中发布此内容需要更改如下内容:-

@Controller
public class CourseController 

    @Autowired
    private CourseService courseService;

    @RequestMapping(value = "/showCourses", method = RequestMethod.POST)
    public String showCourses(@RequestParam("interest") String interest, Model model) throws SQLException, IOException 
        model.addAttribute("interest", interest);
        Map<String, String> courseList = courseService.getCourseList(interest);
        model.addAttribute("courseList", courseList);
        return "showCourses";
    


最后,您需要在 showCourses.jsp 中循环 courseList 属性,这样您就可以根据兴趣展示课程。

【讨论】:

以上是关于我如何使用从表单中获得的值作为我的 dao 类中的变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用列表中的值作为 pydantic 验证器?

在同一类中获得更改的值?

使用DAO将值从java类传递给jsp页面

如何在jsp页面直接获取常量类中的常量

如何在FXML中显示和访问Java类中的ComboBox?

如何从选择表单输入中显示的值发布不同的值