我们如何使用Spring Boot将jsp文件中的表单数据保存到数据库中?

我正在创建一个 Spring Boot API,它基本上要求用户创建一个帐户。帐户详细信息显示在表格上。我想从表单中获取详细信息并将其保存到数据库(MYSQL)中。


模型类如下:


@Table(name = "user")

public class User {


    @Id

    @Column(name = "ID")

    private int ID;


    @Column(name = "Fname")

    private String fName;


    @Column(name = "Lname")

    private String lName;


    @Column(name = "dob")

    private String dob;


    @Column(name = "email")

    private String email;


    @Column(name = "pWord")

    private String pWord;

}

控制器类如下:


public class MController {


    @Autowired

    private UserRepository userRepository;


    @PostMapping("/successSignUp")

    public String dataToDB(@ModelAttribute("User") User formData, Model model) {


        userRepository.save(new User(formData.getFname(), formData.getLname(), formData.getDob(), formData.getEmail(), formData.getPassword()));    

        model.addAttribute("user", new User());

        return "welcomeUser";

    }

当我执行此代码时,出现以下错误:


java.sql.SQLSyntaxErrorException: Unknown column 'p_word' in 'field list'

我在这里做错了什么?提前致谢。


守着一只汪
浏览 112回答 2
2回答

波斯汪

Spring框架在内部将camel case更改为snake case。这是 Spring Boot 命名策略的一部分:我们可以覆盖这些值,但默认情况下,这些将:将骆驼箱改为蛇箱将点替换为下划线小写表名您可以尝试将列名称更新为 pword 而不是 pWord 吗?@Column(name = "pword") private String pWord;如果您使用“pWord”,它将被视为 p_word。请将列名称更新为“pword”并尝试。例子:@Entitypublic class Account {    @Id    private Long id;    private String defaultEmail;}And then turn on some SQL debugging in our properties file:hibernate.show_sql: trueAt startup, we'll see the following create statement in our logs:Hibernate: create table account (id bigint not null, default_email varchar(255))

慕虎7371278

解决此问题的最简单的解决方案是将列名称设置为小写或大写。@Column(name = "pword") private String pWord;或者@Column(name = "PWORD") private String pWord;这将避免 spring 将名称转换为蛇形命名。MySql 中的列名不区分大小写,因此它可以工作。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java