Я работаю над новым простым приложением, которое будет хранить пользователей и их транзакции с категориями.Я пытаюсь ввести новую транзакцию в моей базе данных MySQL, но я не уверен, как это сделать.Я думал о выборе пользователя и категории из списка для каждой новой транзакции, затем вы указали сумму, дату и описание транзакции и сохранили их в базе данных.Я застрял в момент, когда у меня есть список категорий и пользователей в базе данных.Я также немного переживаю, если мой проанализированный формат даты правильно конвертирован и готов для помещения в базу данных mysql.
Вот мой объект транзакции:
@Entity
@Table(name = "transaction")
@NamedQueries({
@NamedQuery(name="get_all_transactions", query = "select transaction
from Transaction transaction")
})
public class Transaction {
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "id_category")
private Category category;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "id_user")
private User user;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_transaction")
private int transactionId;
@Column(name = "amount")
private BigDecimal moneyAmount;
@Column(name = "flow_date")
@Temporal(TemporalType.DATE)
@DateTimeFormat(pattern="dd.MM.yyyy")
private Date transactionDate;
@Column(name = "description")
private String description;
public Transaction(){}
public Transaction(BigDecimal moneyAmount, Date transactionDate, String
description) {
this.moneyAmount = moneyAmount;
this.transactionDate = transactionDate;
this.description = description;
}
Контроллер транзакций:
@Controller
@RequestMapping("/transaction")
public class TransactionController {
@Autowired
DatabaseService databaseService;
@PersistenceContext
EntityManager em;
@GetMapping("/addTransaction")
public String transactionsList(Model theModel){
Transaction transaction = new Transaction();
List<Category> categories =
em.createNamedQuery("get_all_categories").getResultList();
List<User> users =
em.createNamedQuery("get_all_users").getResultList();
theModel.addAttribute("transaction", transaction);
theModel.addAttribute("categoriesList",categories);
theModel.addAttribute("usersList",users);
return "addTransaction";
}
@PostMapping("/saveTransaction")
public String saveTransaction(@ModelAttribute("transaction") Transaction
newTransaction, BindingResult theBindingResult){
databaseService.saveTransaction(newTransaction);
return "transactionProcessForm";
}
@InitBinder
public void initBinder(WebDataBinder binder) {
SimpleDateFormat formattedDate = new SimpleDateFormat("yyyy-MM-dd");
formattedDate.setLenient(true);
binder.registerCustomEditor(Date.class, new
CustomDateEditor(formattedDate, true));
}
}
addTransaction.jsp:
<%@ taglib prefix="mvc" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>
<%--
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Add Transaction Form</title>
</head>
<body>
<h1>Add transaction to database:</h1>
<form:form action="saveTransaction" modelAttribute="transaction"
method="post">
<table>
<tr>
<td><label>Choose user:</label></td>
<td><select>
<c:forEach items="${usersList}" var="user">
<option name="id" value="${user.id}">${user.login}
</option>
</c:forEach>
</select>
</tr>
<tr>
<td><label>Choose category:</label></td>
<td><select>
<c:forEach items="${categoriesList}" var="category">
<option name="id"
value="${category.id}">${category.categoryName}</option>
</c:forEach>
</select>
</tr>
<tr>
<td><label>Amount:</label></td>
<td><form:input path="moneyAmount" />
</td>
</tr>
<tr>
<td><label>Transaction date:</label></td>
<td><form:input type = "date" path="transactionDate"/> <%--
pattern="dd-MM-yyyy"--%>
</td>
</tr>
<tr>
<td><label>Description:</label></td>
<td><form:input path="description" />
</td>
</tr>
<tr>
<label></label>
<td><input type="submit" value="Submit" class="save"/>
</td>
</tr>
</table>
</form:form>
</body>
</html>
Было бы здорово, если бы вы могли проверить мой TransactionDAO, я думаю, что это нормально, но могут быть некоторые ошибки:
@Repository
public class TransactionRepository {
@PersistenceContext
private EntityManager entityManager;
public List<Transaction> getTransactionsList(){
return
entityManager.createNamedQuery("get_all_transactions").getResultList();
}
public Transaction getSingleTransactionById(int transactionIdToFind){
return entityManager.find(Transaction.class, transactionIdToFind);
}
public Transaction getTransactionByDate(Date dateToFind){
return entityManager.createQuery(
"select t from Transaction t where
t.transactionDate=:date",Transaction.class)
.setParameter("date",dateToFind).getSingleResult();
}
public void deleteTransactionById(int transactionToDeleteId){
Transaction transactionToDelete =
getSingleTransactionById(transactionToDeleteId);
entityManager.remove(transactionToDelete);
}
public void saveTransaction(Transaction transactionToSave){
if(transactionToSave.getTransactionId() == 0){
entityManager.persist(transactionToSave);
}else {
entityManager.merge(transactionToSave);
}
}
}
Вот ссылка для моего скриншота отношений sql: https://imgur.com/a/d9XMOKa
А вот для вывода localhost (как выглядит страница): https://imgur.com/a/Sqge0ZQ