调用Controller传递实体对象实现数据库插入及DAO方法传参问题
一、实现Controller接收实体对象并插入数据库的步骤
你当前的Controller代码里,调用registerDAO.createUser(new RegisterBean())是传入了一个空对象,这样插入数据库的都是空值。要解决这个问题,需要让SpringMVC帮你把前端提交的表单数据绑定到RegisterBean对象上,再传给DAO:
匹配前端表单字段与
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>修改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"); }确保事务配置正确
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

