Skip to content

Commit cae346b

Browse files
authored
Merge pull request #3 from AdamZink/part_2
Part 2
2 parents b9dd0a1 + 23e9196 commit cae346b

File tree

12 files changed

+337
-0
lines changed

12 files changed

+337
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@ Tutorials are available to explain the steps on [Medium](https://medium.com/@cel
88

99
##### Getting Started with Spring Boot, Hibernate, Jersey, and MySQL
1010
* [Part 1 - Getting Spring Initializr project to run](https://medium.com/@cellularcinema/getting-started-with-spring-boot-hibernate-jersey-and-mysql-part-1-9aea23a9a32d)
11+
* [Part 2 - POST a User](https://medium.com/@adamzink/getting-started-with-spring-boot-hibernate-jersey-and-mysql-part-2-b9f98a1bbbae)
1112

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.github.adamzink.springbootmysqldemo;
2+
3+
import com.github.adamzink.springbootmysqldemo.resource.UserResource;
4+
import org.glassfish.jersey.server.ResourceConfig;
5+
import org.springframework.stereotype.Component;
6+
7+
@Component
8+
public class JerseyConfiguration extends ResourceConfig {
9+
10+
public JerseyConfiguration() {
11+
register(UserResource.class);
12+
}
13+
14+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.github.adamzink.springbootmysqldemo.converter;
2+
3+
import com.github.adamzink.springbootmysqldemo.converter.common.ModelConverter;
4+
import com.github.adamzink.springbootmysqldemo.model.client.User;
5+
import com.github.adamzink.springbootmysqldemo.model.db.UserModel;
6+
import com.github.adamzink.springbootmysqldemo.model.client.UserRequest;
7+
import org.springframework.stereotype.Component;
8+
9+
import java.text.SimpleDateFormat;
10+
11+
@Component
12+
public class UserConverter implements ModelConverter<UserRequest, UserModel, User> {
13+
14+
@Override
15+
public UserModel requestToModel(UserRequest request) {
16+
UserModel model = new UserModel();
17+
model.setFirstName(request.getFirstName());
18+
model.setLastName(request.getLastName());
19+
return model;
20+
}
21+
22+
@Override
23+
public User modelToResponse(UserModel model) {
24+
User response = new User();
25+
response.setId(model.getId());
26+
response.setFirstName(model.getFirstName());
27+
response.setLastName(model.getLastName());
28+
response.setAddDate(new SimpleDateFormat("MMM d, yyyy").format(model.getAddTs()));
29+
return response;
30+
}
31+
32+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.github.adamzink.springbootmysqldemo.converter.common;
2+
3+
public interface ModelConverter<Q, M, S> {
4+
5+
M requestToModel(Q request);
6+
7+
S modelToResponse (M model);
8+
9+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.github.adamzink.springbootmysqldemo.facade;
2+
3+
import com.github.adamzink.springbootmysqldemo.converter.UserConverter;
4+
import com.github.adamzink.springbootmysqldemo.model.client.User;
5+
import com.github.adamzink.springbootmysqldemo.model.client.UserRequest;
6+
import com.github.adamzink.springbootmysqldemo.service.UserService;
7+
import org.springframework.beans.factory.annotation.Autowired;
8+
import org.springframework.stereotype.Service;
9+
import org.springframework.transaction.annotation.Transactional;
10+
11+
@Service
12+
@Transactional
13+
public class UserFacade {
14+
15+
@Autowired
16+
UserConverter userConverter;
17+
18+
@Autowired
19+
UserService userService;
20+
21+
public User save(UserRequest userRequest) {
22+
return userConverter.modelToResponse(
23+
userService.save(userConverter.requestToModel(userRequest))
24+
);
25+
}
26+
27+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package com.github.adamzink.springbootmysqldemo.model.client;
2+
3+
public class User {
4+
5+
private Long id;
6+
private String firstName;
7+
private String lastName;
8+
private String addDate;
9+
10+
public User() {
11+
}
12+
13+
public Long getId() {
14+
return id;
15+
}
16+
17+
public void setId(Long id) {
18+
this.id = id;
19+
}
20+
21+
public String getFirstName() {
22+
return firstName;
23+
}
24+
25+
public void setFirstName(String firstName) {
26+
this.firstName = firstName;
27+
}
28+
29+
public String getLastName() {
30+
return lastName;
31+
}
32+
33+
public void setLastName(String lastName) {
34+
this.lastName = lastName;
35+
}
36+
37+
public String getAddDate() {
38+
return addDate;
39+
}
40+
41+
public void setAddDate(String addDate) {
42+
this.addDate = addDate;
43+
}
44+
45+
@Override
46+
public boolean equals(Object o) {
47+
if (this == o) return true;
48+
if (o == null || getClass() != o.getClass()) return false;
49+
50+
User user = (User) o;
51+
52+
if (id != null ? !id.equals(user.id) : user.id != null) return false;
53+
if (firstName != null ? !firstName.equals(user.firstName) : user.firstName != null) return false;
54+
if (lastName != null ? !lastName.equals(user.lastName) : user.lastName != null) return false;
55+
return addDate != null ? addDate.equals(user.addDate) : user.addDate == null;
56+
57+
}
58+
59+
@Override
60+
public int hashCode() {
61+
int result = id != null ? id.hashCode() : 0;
62+
result = 31 * result + (firstName != null ? firstName.hashCode() : 0);
63+
result = 31 * result + (lastName != null ? lastName.hashCode() : 0);
64+
result = 31 * result + (addDate != null ? addDate.hashCode() : 0);
65+
return result;
66+
}
67+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.github.adamzink.springbootmysqldemo.model.client;
2+
3+
public class UserRequest {
4+
5+
private String firstName;
6+
private String lastName;
7+
8+
public UserRequest() {
9+
}
10+
11+
public String getFirstName() {
12+
return firstName;
13+
}
14+
15+
public void setFirstName(String firstName) {
16+
this.firstName = firstName;
17+
}
18+
19+
public String getLastName() {
20+
return lastName;
21+
}
22+
23+
public void setLastName(String lastName) {
24+
this.lastName = lastName;
25+
}
26+
27+
@Override
28+
public boolean equals(Object o) {
29+
if (this == o) return true;
30+
if (o == null || getClass() != o.getClass()) return false;
31+
32+
UserRequest that = (UserRequest) o;
33+
34+
if (firstName != null ? !firstName.equals(that.firstName) : that.firstName != null) return false;
35+
return lastName != null ? lastName.equals(that.lastName) : that.lastName == null;
36+
}
37+
38+
@Override
39+
public int hashCode() {
40+
int result = firstName != null ? firstName.hashCode() : 0;
41+
result = 31 * result + (lastName != null ? lastName.hashCode() : 0);
42+
return result;
43+
}
44+
}
45+
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package com.github.adamzink.springbootmysqldemo.model.db;
2+
3+
import javax.persistence.*;
4+
import java.util.Date;
5+
6+
@Entity
7+
@Table(name="USER")
8+
public class UserModel {
9+
@Id
10+
@GeneratedValue(strategy=GenerationType.IDENTITY)
11+
@Column
12+
private Long id;
13+
14+
@Column
15+
private String firstName;
16+
17+
@Column
18+
private String lastName;
19+
20+
@Column
21+
private Date addTs;
22+
23+
public UserModel() {
24+
}
25+
26+
public Long getId() {
27+
return id;
28+
}
29+
30+
public void setId(Long id) {
31+
this.id = id;
32+
}
33+
34+
public String getFirstName() {
35+
return firstName;
36+
}
37+
38+
public void setFirstName(String firstName) {
39+
this.firstName = firstName;
40+
}
41+
42+
public String getLastName() {
43+
return lastName;
44+
}
45+
46+
public void setLastName(String lastName) {
47+
this.lastName = lastName;
48+
}
49+
50+
public Date getAddTs() {
51+
return addTs;
52+
}
53+
54+
public void setAddTs(Date addTs) {
55+
this.addTs = addTs;
56+
}
57+
58+
@Override
59+
public boolean equals(Object o) {
60+
if (this == o) return true;
61+
if (o == null || getClass() != o.getClass()) return false;
62+
63+
UserModel userModel = (UserModel) o;
64+
65+
if (id != null ? !id.equals(userModel.id) : userModel.id != null) return false;
66+
if (firstName != null ? !firstName.equals(userModel.firstName) : userModel.firstName != null) return false;
67+
if (lastName != null ? !lastName.equals(userModel.lastName) : userModel.lastName != null) return false;
68+
return addTs != null ? addTs.equals(userModel.addTs) : userModel.addTs == null;
69+
}
70+
71+
@Override
72+
public int hashCode() {
73+
int result = id != null ? id.hashCode() : 0;
74+
result = 31 * result + (firstName != null ? firstName.hashCode() : 0);
75+
result = 31 * result + (lastName != null ? lastName.hashCode() : 0);
76+
result = 31 * result + (addTs != null ? addTs.hashCode() : 0);
77+
return result;
78+
}
79+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.github.adamzink.springbootmysqldemo.repository;
2+
3+
import com.github.adamzink.springbootmysqldemo.model.db.UserModel;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
import org.springframework.stereotype.Repository;
6+
7+
@Repository
8+
public interface UserRepository extends JpaRepository<UserModel, Long> {
9+
10+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.github.adamzink.springbootmysqldemo.resource;
2+
3+
import com.github.adamzink.springbootmysqldemo.facade.UserFacade;
4+
import com.github.adamzink.springbootmysqldemo.model.client.User;
5+
import com.github.adamzink.springbootmysqldemo.model.client.UserRequest;
6+
import org.springframework.beans.factory.annotation.Autowired;
7+
import org.springframework.stereotype.Component;
8+
9+
import javax.ws.rs.*;
10+
import javax.ws.rs.core.MediaType;
11+
12+
@Path("/users")
13+
@Component
14+
public class UserResource {
15+
16+
@Autowired
17+
UserFacade userFacade;
18+
19+
@POST
20+
@Consumes(MediaType.APPLICATION_JSON)
21+
@Produces(MediaType.APPLICATION_JSON)
22+
public User save(final UserRequest userRequest) {
23+
return userFacade.save(userRequest);
24+
}
25+
26+
}
27+

0 commit comments

Comments
 (0)