Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@ Tutorials are available to explain the steps on [Medium](https://medium.com/@cel

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

Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.github.adamzink.springbootmysqldemo;

import com.github.adamzink.springbootmysqldemo.resource.UserResource;
import org.glassfish.jersey.server.ResourceConfig;
import org.springframework.stereotype.Component;

@Component
public class JerseyConfiguration extends ResourceConfig {

public JerseyConfiguration() {
register(UserResource.class);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.github.adamzink.springbootmysqldemo.converter;

import com.github.adamzink.springbootmysqldemo.converter.common.ModelConverter;
import com.github.adamzink.springbootmysqldemo.model.client.User;
import com.github.adamzink.springbootmysqldemo.model.db.UserModel;
import com.github.adamzink.springbootmysqldemo.model.client.UserRequest;
import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;

@Component
public class UserConverter implements ModelConverter<UserRequest, UserModel, User> {

@Override
public UserModel requestToModel(UserRequest request) {
UserModel model = new UserModel();
model.setFirstName(request.getFirstName());
model.setLastName(request.getLastName());
return model;
}

@Override
public User modelToResponse(UserModel model) {
User response = new User();
response.setId(model.getId());
response.setFirstName(model.getFirstName());
response.setLastName(model.getLastName());
response.setAddDate(new SimpleDateFormat("MMM d, yyyy").format(model.getAddTs()));
return response;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.github.adamzink.springbootmysqldemo.converter.common;

public interface ModelConverter<Q, M, S> {

M requestToModel(Q request);

S modelToResponse (M model);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.github.adamzink.springbootmysqldemo.facade;

import com.github.adamzink.springbootmysqldemo.converter.UserConverter;
import com.github.adamzink.springbootmysqldemo.model.client.User;
import com.github.adamzink.springbootmysqldemo.model.client.UserRequest;
import com.github.adamzink.springbootmysqldemo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@Transactional
public class UserFacade {

@Autowired
UserConverter userConverter;

@Autowired
UserService userService;

public User save(UserRequest userRequest) {
return userConverter.modelToResponse(
userService.save(userConverter.requestToModel(userRequest))
);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package com.github.adamzink.springbootmysqldemo.model.client;

public class User {

private Long id;
private String firstName;
private String lastName;
private String addDate;

public User() {
}

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}

public String getLastName() {
return lastName;
}

public void setLastName(String lastName) {
this.lastName = lastName;
}

public String getAddDate() {
return addDate;
}

public void setAddDate(String addDate) {
this.addDate = addDate;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;

User user = (User) o;

if (id != null ? !id.equals(user.id) : user.id != null) return false;
if (firstName != null ? !firstName.equals(user.firstName) : user.firstName != null) return false;
if (lastName != null ? !lastName.equals(user.lastName) : user.lastName != null) return false;
return addDate != null ? addDate.equals(user.addDate) : user.addDate == null;

}

@Override
public int hashCode() {
int result = id != null ? id.hashCode() : 0;
result = 31 * result + (firstName != null ? firstName.hashCode() : 0);
result = 31 * result + (lastName != null ? lastName.hashCode() : 0);
result = 31 * result + (addDate != null ? addDate.hashCode() : 0);
return result;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.github.adamzink.springbootmysqldemo.model.client;

public class UserRequest {

private String firstName;
private String lastName;

public UserRequest() {
}

public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}

public String getLastName() {
return lastName;
}

public void setLastName(String lastName) {
this.lastName = lastName;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;

UserRequest that = (UserRequest) o;

if (firstName != null ? !firstName.equals(that.firstName) : that.firstName != null) return false;
return lastName != null ? lastName.equals(that.lastName) : that.lastName == null;
}

@Override
public int hashCode() {
int result = firstName != null ? firstName.hashCode() : 0;
result = 31 * result + (lastName != null ? lastName.hashCode() : 0);
return result;
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
package com.github.adamzink.springbootmysqldemo.model.db;

import javax.persistence.*;
import java.util.Date;

@Entity
@Table(name="USER")
public class UserModel {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column
private Long id;

@Column
private String firstName;

@Column
private String lastName;

@Column
private Date addTs;

public UserModel() {
}

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}

public String getLastName() {
return lastName;
}

public void setLastName(String lastName) {
this.lastName = lastName;
}

public Date getAddTs() {
return addTs;
}

public void setAddTs(Date addTs) {
this.addTs = addTs;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;

UserModel userModel = (UserModel) o;

if (id != null ? !id.equals(userModel.id) : userModel.id != null) return false;
if (firstName != null ? !firstName.equals(userModel.firstName) : userModel.firstName != null) return false;
if (lastName != null ? !lastName.equals(userModel.lastName) : userModel.lastName != null) return false;
return addTs != null ? addTs.equals(userModel.addTs) : userModel.addTs == null;
}

@Override
public int hashCode() {
int result = id != null ? id.hashCode() : 0;
result = 31 * result + (firstName != null ? firstName.hashCode() : 0);
result = 31 * result + (lastName != null ? lastName.hashCode() : 0);
result = 31 * result + (addTs != null ? addTs.hashCode() : 0);
return result;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.github.adamzink.springbootmysqldemo.repository;

import com.github.adamzink.springbootmysqldemo.model.db.UserModel;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends JpaRepository<UserModel, Long> {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.github.adamzink.springbootmysqldemo.resource;

import com.github.adamzink.springbootmysqldemo.facade.UserFacade;
import com.github.adamzink.springbootmysqldemo.model.client.User;
import com.github.adamzink.springbootmysqldemo.model.client.UserRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;

@Path("/users")
@Component
public class UserResource {

@Autowired
UserFacade userFacade;

@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public User save(final UserRequest userRequest) {
return userFacade.save(userRequest);
}

}

Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.github.adamzink.springbootmysqldemo.service;

import com.github.adamzink.springbootmysqldemo.model.db.UserModel;
import com.github.adamzink.springbootmysqldemo.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;

@Service
public class UserService {

@Autowired
UserRepository userRepository;

public UserModel save(final UserModel userModel) {
userModel.setAddTs(new Date());

return userRepository.save(userModel);
}

}

3 changes: 3 additions & 0 deletions src/main/resources/application.properties
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,6 @@ spring.datasource.driver-class-name=com.mysql.jdbc.Driver

# Flyway properties
spring.flyway.locations=classpath:db/mysql/migration

# Path properties
server.servlet.contextPath=/api