Je travaille avec une application de démarrage de printemps et c'est la classe d'entité je travaille,Créer et persister correctement dans la base de données MySQL
@Entity
public class User {
// form:hidden - hidden value
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// form:input - textbox
@Column(name = "name", columnDefinition = "VARCHAR(30)", nullable = false)
String name;
// form:input - textbox
@Column(name = "email", columnDefinition = "VARCHAR(50)", nullable = false)
String email;
// form:input - password
@Column(name = "password", columnDefinition = "VARCHAR(20)", nullable = false)
String password;
// form:textarea - textarea
@Column(name = "address", columnDefinition = "VARCHAR(255)")
String address;
// form:input - password
String confirmPassword;
// form:checkbox - single checkbox
@Column(name = "newsletter")
boolean newsletter;
// form:radiobutton - radio button
@Column(name = "sex", columnDefinition = "VARCHAR(1)")
String sex;
// form:radiobuttons - radio button
@Column(name = "number")
Integer number;
// form:select - form:option - dropdown - single select
@Column(name = "country", columnDefinition = "VARCHAR(10)")
String country;
// form:checkboxes - multiple checkboxes
@ElementCollection
@NotNull
List<String> framework;
// form:select - multiple=true - dropdown - multiple select
@ElementCollection
List<String> skill;
}
Je compte créer uniquement les colonnes suivantes dans le tableau user
,
id,
name,
email,
address,
password,
newsletter,
framework,
sex,
Number,
Country,
Skill
Par exemple, le SQL correspondant sera comme (bien que je ne veux pas écrire explicitement),
CREATE TABLE user (
id LONG GENERATED BY DEFAULT AS IDENTITY(START WITH 1, INCREMENT BY 1) PRIMARY KEY,
name VARCHAR(30),
email VARCHAR(50),
address VARCHAR(255),
password VARCHAR(20),
newsletter BOOLEAN,
framework VARCHAR(500),
sex VARCHAR(1),
Number INTEGER,
Country VARCHAR(10),
Skill VARCHAR(500)
);
La classe contrôleur à partir,
@Controller
public class UserController {
private final Logger logger = LoggerFactory.getLogger(UserController.class);
@Autowired
private UserService userService;
private static List<User> populateDefaultUserValues() {
List<User> users = new ArrayList<>();
User user = new User();
user.setName("Ella");
user.setEmail("[email protected]");
user.setPassword("df32d343H");
user.setFramework(Arrays.asList("Spring MVC, GWT".split("\\s*,\\s*")));
users.add(user);
user = new User();
user.setName("Alex");
user.setEmail("[email protected]");
user.setPassword("12HH2d343H");
user.setFramework(Arrays.asList("Spring MVC, GWT".split("\\s*,\\s*")));
users.add(user);
user = new User();
user.setName("Romanna");
user.setEmail("[email protected]");
user.setPassword("Rommann343");
user.setFramework(Arrays.asList("Spring MVC, GWT".split("\\s*,\\s*")));
users.add(user);
return users;
}
@GetMapping(value = "/")
public String index() {
return "redirect:/users";
}
@GetMapping(value = "/users")
public String showAllUsers(Model model) {
List<User> users = populateDefaultUserValues();
users.forEach(user -> {
userService.save(user);
});
model.addAttribute("users", userService.findAll());
return "list";
}
}
Quand je lance l'application, je vois que cela a créé dans la base de données MYSQL
,
Comment puis-je omettez le champ confirmed_password
et ajoutez les colonnes de skill
et framework
? Je m'attends à ce qu'ils soient VARCHAR
?
Si vous le savez, cela vous dérangerait d'écrire peu quelle est la bonne façon de travailler avec 'Collection' dans les classes' @ Entity'? Et, oui, j'ai 2 autres tables dans le 'MySQL', j'ai besoin de savoir que leurs valeurs sont toujours dans la partie de l'entité' User' – Arefe
J'ai étendu ma réponse avec quelques liens et une petite explication sur ces tables de collection. –
Ce casse dans le fichier JSP correspondant '