forked from NeilAlishev/SpringCourse
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPersonDAO.java
More file actions
108 lines (84 loc) · 3.67 KB
/
PersonDAO.java
File metadata and controls
108 lines (84 loc) · 3.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package ru.alishev.springcourse.dao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import ru.alishev.springcourse.models.Person;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
/**
* @author Neil Alishev
*/
@Component
public class PersonDAO {
private final JdbcTemplate jdbcTemplate;
@Autowired
public PersonDAO(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public List<Person> index() {
return jdbcTemplate.query("SELECT * FROM Person", new BeanPropertyRowMapper<>(Person.class));
}
public Optional<Person> show(String email) {
return jdbcTemplate.query("SELECT * FROM Person WHERE email=?", new Object[]{email},
new BeanPropertyRowMapper<>(Person.class)).stream().findAny();
}
public Person show(int id) {
return jdbcTemplate.query("SELECT * FROM Person WHERE id=?", new Object[]{id}, new BeanPropertyRowMapper<>(Person.class))
.stream().findAny().orElse(null);
}
public void save(Person person) {
jdbcTemplate.update("INSERT INTO Person(name, age, email, address) VALUES(?, ?, ?, ?)", person.getName(), person.getAge(),
person.getEmail(), person.getAddress());
}
public void update(int id, Person updatedPerson) {
jdbcTemplate.update("UPDATE Person SET name=?, age=?, email=?, address=? WHERE id=?", updatedPerson.getName(),
updatedPerson.getAge(), updatedPerson.getEmail(), updatedPerson.getAddress(), id);
}
public void delete(int id) {
jdbcTemplate.update("DELETE FROM Person WHERE id=?", id);
}
//////////////////////
// Тестируем производительность
//////////////////////
public void testMultipleUpdate() {
List<Person> people = create1000People();
long before = System.currentTimeMillis();
for (Person person : people) {
jdbcTemplate.update("INSERT INTO Person VALUES(?, ?, ?, ?)", person.getId(), person.getName(), person.getAge(),
person.getEmail());
}
long after = System.currentTimeMillis();
System.out.println("Time: " + (after - before));
}
public void testBatchUpdate() {
List<Person> people = create1000People();
long before = System.currentTimeMillis();
jdbcTemplate.batchUpdate("INSERT INTO Person VALUES(?, ?, ?, ?)",
new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
ps.setInt(1, people.get(i).getId());
ps.setString(2, people.get(i).getName());
ps.setInt(3, people.get(i).getAge());
ps.setString(4, people.get(i).getEmail());
}
@Override
public int getBatchSize() {
return people.size();
}
});
long after = System.currentTimeMillis();
System.out.println("Time: " + (after - before));
}
private List<Person> create1000People() {
List<Person> people = new ArrayList<>();
for (int i = 0; i < 1000; i++)
people.add(new Person(i, "Name" + i, 30, "test" + i + "@mail.ru", "some address"));
return people;
}
}