You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用Controller传递实体对象实现数据库插入及DAO方法传参问题

如何在Controller中传入实体对象并完成数据库插入,以及DAO方法的参数说明

一、实现Controller接收实体对象并插入数据库的步骤

你当前的Controller代码里,调用registerDAO.createUser(new RegisterBean())是传入了一个空对象,这样插入数据库的都是空值。要解决这个问题,需要让SpringMVC帮你把前端提交的表单数据绑定到RegisterBean对象上,再传给DAO:

  1. 匹配前端表单字段与RegisterBean属性
    比如你的RegisterBean有user、firstname、email等属性,前端表单的输入框name要和这些属性名一一对应,示例表单:

    <form action="/login" method="post">
        <input type="text" name="user" placeholder="用户名">
        <input type="text" name="firstname" placeholder="名">
        <input type="email" name="email" placeholder="邮箱">
        <!-- 其他字段如lastname、address等同理 -->
        <button type="submit">提交</button>
    </form>
    
  2. 修改Controller方法,接收绑定好的实体对象
    在Controller的POST方法中添加@ModelAttribute注解的RegisterBean参数,SpringMVC会自动将请求参数填充到这个对象中。修改后的代码如下:

    @Autowired 
    RegisterDAO registerDAO; 
    
    @RequestMapping(value="/login",method=RequestMethod.POST) 
    public ModelAndView returnSuccess(@ModelAttribute RegisterBean registerBean) { 
        // 传入已填充用户数据的registerBean
        registerDAO.createUser(registerBean); 
        return new ModelAndView("login"); 
    }
    
  3. 确保事务配置正确
    RegisterDAOImpl中的session.save(register)需要在事务中执行,否则数据不会真正提交到数据库。可以在createUser方法上添加@Transactional注解(需先配置Spring事务管理):

    @Autowired 
    private SessionFactory sessionFactory; 
    
    @Transactional // 添加事务注解,确保数据库操作生效
    public void createUser(RegisterBean regbean) { 
        Session session = sessionFactory.getCurrentSession(); 
        Register register= new Register(); 
        register.setId(regbean.getId()); 
        register.setUsername(regbean.getUser()); 
        register.setFirstname(regbean.getFirstname()); 
        register.setLastname(regbean.getLastname()); 
        register.setEmail(regbean.getEmail()); 
        register.setAddress(regbean.getAddress()); 
        register.setPhone(regbean.getPhonenumber()); 
        register.setPassword(regbean.getPassword()); 
        session.save(register); 
    }
    

二、调用DAO方法需要传递的参数

从你提供的RegisterDAO接口可以看到,createUser方法的参数是**RegisterBean类型的实例**:

public interface RegisterDAO { 
    void createUser(RegisterBean registerbean); 
}

这个实例必须是填充了用户输入数据的对象——因为DAOImpl会从这个Bean中读取id、用户名、姓名、邮箱等字段值,用来构建要保存到数据库的Register实体。如果传入空的RegisterBean,插入的数据库记录会全是空值(除非数据库字段有默认值)。

额外注意事项

  • 确保RegisterBean类中所有属性都有对应的getter和setter方法,否则SpringMVC无法完成参数绑定,DAO也无法读取属性值。
  • 检查Register实体类的字段是否和数据库表的字段对应,确保ORM映射关系正确。

内容的提问来源于stack exchange,提问作者ram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:51:06