J'étais accro à Spring Data JDBC, que je révisais d'une manière ou d'une autre, alors j'ai pris une note. (La botte Spring de base est un peu vieille, mais ...)
J'ai juste essayé d'insérer un objet dans une table avec Spring Data JDBC
Apparemment, Spring Data JDBC émet SQL lorsque le champ avec @ID est un type d'objet, Insérer lorsqu'il est nul et se mettre à jour lorsqu'il n'est pas nul. Le PK de la table doit être généré automatiquement.
référence https://stackoverflow.com/questions/50371775/why-does-spring-data-jdbc-not-save-my-car-object
objet
Users.java
public class Users {
@Id
private Integer user_id;
private String password;
private String notes;
un service
SampleService.java
@Transactional
@Service
public class SampleService {
@Autowired
private UserRepository dao;
//Abréviation
//C'est un code très grossier ...
public void add(Integer id) {
LocalDateTime time = LocalDateTime.now();
Users user = new Users(id, "password", time.toString());
logger.info(user.toString());
Users inserted = dao.save(user);
}
Pour l'exécution des tests
SampleServiceTest.java
@RunWith(SpringRunner.class)
@SpringBootTest
public class SampleServiceTest {
@Autowired
private SampleService service;
//Mettre à jour lorsque vous exécutez ceci
@Test
public void test1() {
service.add(3);
}
//Lorsque vous exécutez ceci, insérez
@Test
public void test2() {
service.add(null);
}
}
Lorsque test1 () est exécuté
2019-11-19 18:41:47.275 INFO 37316 --- [ main] org.example.test.service.SampleService : userid: 3, note: 2019-11-19T18:41:47.274
Trace SQL Postgre à ce moment
2019-11-19 09:41:47.326 UTC [167] LOG: execute <unnamed>: BEGIN
2019-11-19 09:41:47.334 UTC [167] LOG: execute <unnamed>: UPDATE users SET user_id = $1, password = $2, notes = $3 WHERE user_id = $4
2019-11-19 09:41:47.334 UTC [167] DETAIL: parameters: $1 = '3', $2 = 'password', $3 = '2019-11-19T18:41:47.274', $4 = '3'
Lorsque test2 () est exécuté
2019-11-19 18:41:47.355 INFO 37316 --- [ main] org.example.test.service.SampleService : userid: null, note: 2019-11-19T18:41:47.355
Trace SQL Postgre à ce moment
2019-11-19 09:41:47.368 UTC [167] LOG: execute <unnamed>: BEGIN
2019-11-19 09:41:47.368 UTC [167] LOG: execute <unnamed>: INSERT INTO users (password, notes) VALUES ($1, $2)
RETURNING *
2019-11-19 09:41:47.368 UTC [167] DETAIL: parameters: $1 = 'password', $2 = '2019-11-19T18:41:47.355'
Pour le moment, changeons le DDL et augmentons la version de Spring Boot. Avec Postgres 10, vous pouvez le créer automatiquement. https://qiita.com/nuko_yokohama/items/7d0d5525bcefaa3332ce
Oh, je me suis référé ici pour les paramètres de trace SQL de PostgreSQL. https://www.kakiro-web.com/postgresql/postgresql-sql-log-system.html
Recommended Posts