From: Kai Moritz Date: Fri, 10 Jul 2020 12:54:21 +0000 (+0200) Subject: Simple web-app example for spring-boot-data-jdbc X-Git-Url: https://juplo.de/gitweb/?a=commitdiff_plain;h=ec8e83ec01ee3ac203619f675b696a758351ca72;p=demos%2Fkafka%2Foutbox Simple web-app example for spring-boot-data-jdbc --- ec8e83ec01ee3ac203619f675b696a758351ca72 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f686482 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +target +.idea +outbox.iml diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..10293a1 --- /dev/null +++ b/pom.xml @@ -0,0 +1,82 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.1.5.RELEASE + + + de.juplo.boot.data + jdbc + 0.0.1-SNAPSHOT + data-jdbc + Simple web-app example for spring-boot-data-jdbc + + + 1.8 + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-starter-data-jdbc + + + org.springframework.boot + spring-boot-starter-json + + + org.projectlombok + lombok + + + + com.h2database + h2 + runtime + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + io.fabric8 + docker-maven-plugin + 0.33.0 + + + + %a:%l + + + + + + build + package + + build + + + + + + + + diff --git a/src/main/java/de/juplo/boot/data/jdbc/Application.java b/src/main/java/de/juplo/boot/data/jdbc/Application.java new file mode 100644 index 0000000..d7301e1 --- /dev/null +++ b/src/main/java/de/juplo/boot/data/jdbc/Application.java @@ -0,0 +1,17 @@ +package de.juplo.boot.data.jdbc; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class Application { + + private final static Logger LOG = LoggerFactory.getLogger(Application.class); + + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } +} diff --git a/src/main/java/de/juplo/boot/data/jdbc/User.java b/src/main/java/de/juplo/boot/data/jdbc/User.java new file mode 100644 index 0000000..6d4d552 --- /dev/null +++ b/src/main/java/de/juplo/boot/data/jdbc/User.java @@ -0,0 +1,26 @@ +package de.juplo.boot.data.jdbc; + +import lombok.*; +import org.springframework.data.annotation.Id; + +import java.time.LocalDateTime; + +public class User { + @Id + Long id; + @Getter + @Setter + String username; + @Getter + @Setter + LocalDateTime created; + @Getter + @Setter + boolean loggedIn; + + public User(String username, LocalDateTime created, boolean loggedIn) { + this.username = username; + this.created = created; + this.loggedIn = loggedIn; + } +} diff --git a/src/main/java/de/juplo/boot/data/jdbc/UserController.java b/src/main/java/de/juplo/boot/data/jdbc/UserController.java new file mode 100644 index 0000000..4eb1094 --- /dev/null +++ b/src/main/java/de/juplo/boot/data/jdbc/UserController.java @@ -0,0 +1,78 @@ +package de.juplo.boot.data.jdbc; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.ResponseEntity; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.support.ServletUriComponentsBuilder; +import org.springframework.web.util.UriComponents; + +import java.time.LocalDateTime; + +@RestController +@Transactional +@RequestMapping("/users") +public class UserController { + + private static final Logger LOG = LoggerFactory.getLogger(UserController.class); + + + private final UserRepository repository; + + + public UserController(UserRepository repository) { + this.repository = repository; + } + + + @PostMapping + public ResponseEntity createUser( + ServletUriComponentsBuilder builder, + @RequestBody String username) { + String sanitizedUsername = UserController.sanitize(username); + User user = new User(sanitizedUsername, LocalDateTime.now(), false); + repository.save(user); + UriComponents uri = + builder + .fromCurrentRequest() + .pathSegment("{username}") + .buildAndExpand(sanitizedUsername); + return ResponseEntity.created(uri.toUri()).build(); + } + + @GetMapping("{username}") + public ResponseEntity getUser(@PathVariable String username) { + User user = repository.findByUsername(UserController.sanitize(username)); + + if (user == null) + return ResponseEntity.notFound().build(); + + return ResponseEntity.ok(user); + } + + @DeleteMapping("{username}") + public ResponseEntity removeUser(@PathVariable String username) { + User user = repository.findByUsername(UserController.sanitize(username)); + + if (user == null) + return ResponseEntity.notFound().build(); + + repository.delete(user); + + return ResponseEntity.ok(user); + } + + @GetMapping() + public ResponseEntity> getUsers() { + return ResponseEntity.ok(repository.findAll()); + } + + + private static String sanitize(String string) { + if (string == null) + return ""; + + return string.trim().toLowerCase(); + } +} diff --git a/src/main/java/de/juplo/boot/data/jdbc/UserRepository.java b/src/main/java/de/juplo/boot/data/jdbc/UserRepository.java new file mode 100644 index 0000000..1d07359 --- /dev/null +++ b/src/main/java/de/juplo/boot/data/jdbc/UserRepository.java @@ -0,0 +1,10 @@ +package de.juplo.boot.data.jdbc; + +import org.springframework.data.jdbc.repository.query.Query; +import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.query.Param; + +public interface UserRepository extends CrudRepository { + @Query("select * from User u where u.username = :username") + User findByUsername(@Param("username") String username); +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..821da09 --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1 @@ +management.endpoints.web.exposure.include=* diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql new file mode 100644 index 0000000..353c36b --- /dev/null +++ b/src/main/resources/schema.sql @@ -0,0 +1 @@ +CREATE TABLE user(id BIGINT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(255), created TIMESTAMP, logged_in BIT) diff --git a/src/test/java/de/juplo/boot/data/jdbc/ApplicationTests.java b/src/test/java/de/juplo/boot/data/jdbc/ApplicationTests.java new file mode 100644 index 0000000..c77d5b7 --- /dev/null +++ b/src/test/java/de/juplo/boot/data/jdbc/ApplicationTests.java @@ -0,0 +1,16 @@ +package de.juplo.boot.data.jdbc; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class ApplicationTests { + + @Test + public void contextLoads() { + } + +}