Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
SpringBootでAPI開発
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Naka Sho
October 17, 2023
180
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
SpringBootでAPI開発
SpringBootでAPI開発
Naka Sho
October 17, 2023
More Decks by Naka Sho
See All by Naka Sho
claudeをサブドライバーに<br>システム移行した体験
shogonakao
0
140
ローカルLLMで自動レビューの仕組み
shogonakao
0
42
無料で使える「LM Studio」でローカルLLM入門
shogonakao
0
160
単体テストの精度を高めるための guideline
shogonakao
0
330
Javaはレガシーではない!
shogonakao
0
450
型安全性で考えること
shogonakao
0
37
アプリケーションログをs3に転送するとき個人情報気をつけてますか?
shogonakao
0
54
コーディングエージェントと 筋トレ
shogonakao
0
93
エキサイトブログ刷新に向けて
shogonakao
0
150
Featured
See All Featured
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.6k
The Limits of Empathy - UXLibs8
cassininazir
1
650
Embracing the Ebb and Flow
colly
88
5.2k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
410
Designing for Performance
lara
611
70k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
590
Facilitating Awesome Meetings
lara
57
7.1k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
300
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
540
Are puppies a ranking factor?
jonoalderson
2
3.9k
Product Roadmaps are Hard
iamctodd
55
13k
Transcript
Spring Boot でAPI 開発
本日の プレゼンテーション 主要トピック 環境構築(JDK,IntelliJ,Docker) Spring Bootの設定 hello worldを出してみよう docker でimage作ってみよう
docker でSpring Bootを起動させてみよ う データベースに接続してみよう データベースにデータを登録してみよう データベースのデータを削除してみよう
環境構築
Mac,Linux 向け sdkman から DL(windows な らwsl でも可) https://sdkman.io/ sdk
list java sdk install java 17.0.1-open sdk default java 17.0.1-open
Windows 向け ( 公式からDL) https://www.oracle.com/jav a/technologies/javase/jdk17 -archive-downloads.html Windows x64 Installer
https://download.oracle.com/java/17/a rchive/jdk-17.0.1_windows-x64_bin.exe (sha256)
IntelliJ IDEA Community Edition メモ帳、テキストエディタは使わない 大学の授業ではメモ帳とかでJavaを使うと思いますが、実際業務でそんなことはあり ません。本質的に、全く意味のないことだからです。 vscodeもjavaのプラグインを入れたら色々使えるのかもしれませんが、逆にいうと入 れないと使えません。 IntelliJ
IDEA Community Edition はJava用のIDEであり、なにもしなくても強力なツ ールで実際に業務で使っている会社も多いため、今の段階で使うことを進めます。
IntelliJ IDEA Community Edition https://www.jetbrains.com/j a-jp/idea/download/ 事前にダウンロードしておいてください
Docker https://www.docker.com/ge t-started/ 事前にインストールしておいてください
Spring Boot の設定 https://start.spring.io/ ProjectをGradle Groovy、Dependenciesに spring web を追加して GENERATEを押してください、
https://start.spring.io/#!type=gradle- project&language=java&platformVersion=3.0. 1&packaging=jar&jvmVersion=17&groupId=co m.example&artifactId=demo&name=demo&d escription=Demo%20project%20for%20Sprin g%20Boot&packageName=com.example.dem o&dependencies=web
Spring Boot の設定 IntelliJ IDEAでプロジェクトを開く 自動で依存関係がダウンロードされます。 しばらく待ってください。 今は設定だけなので、エンドポイントはありま せん。 なのでhello
worldのエンドポイントを作りまし ょう。
hello world を出してみよう コントローラーを作成する demo配下にcontrollerのパッケージを切り、 HrllpControllerを作成します。 @RestController public class HelloContoller
{ @GetMapping("hello") public String hello(){ return "hello"; } }
hello world を出してみよう Spring Bootを起動させる 右上のトンカチマークの横のセレクトボックス をクリックして、Editを出してください。 そこから Applicationを開いてください。
hello world を出してみよう Spring Bootを起動させる Nameをdemo、pathをdemo.mainにしてください。 Java 17が入っていれば自動でJava 17が選択されると思います。選択されなければ手動で設定してく ださい。起動するメインのアプリケーションはcom.example.demo.DemoApplicationにしてくださ
い。
hello world を出してみよう Spring Bootを起動させる 設定したら、先ほどのセレクトボックスの隣の再生ボタンをクリックしてください。 ブラウザでhttp://localhost:8080/hello にアクセスすると、helloがレスポンスされます。
docker でimage 作ってみよう build gradleにjibのプラグインを追加します id 'com.google.cloud.tools.jib' version '3.3.1' ※画像は旧バージョン使っています。
docker でimage 作ってみよう demo配下で以下を実行する、 するとdocker imageにdemo/demo v0.0.1が追加されています。 -Djib.from.image で imageの元、-Djib.to.imageで作成するイメージを指定します。
./gradlew jibDockerBuild -Djib.from.image=gcr.io/distroless/java17-debian11 - Djib.to.image=demo/demo:v0.0.1
docker でSpring Boot を起動させ てみよう docker でSpring Bootを起動させてみよう。 intelliJで起動してるSpring bootを止めて、以下のコマンドでdockerでspring
bootを立ち上げてください。 同様に http://localhost:8080/hello にアクセスするとhello がレスポンスされ ます。 docker run -it --rm -p 8080:8080 demo/demo:v0.0.1
データベースに接続してみよう build.gradleのdependenciesに以下を追加して、gradleを読み込み直します implementation 'org.springframework.boot:spring-boot-starter-jdbc' implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.0' implementation "org.mybatis.scripting:mybatis-freemarker:1.2.2" runtimeOnly 'com.h2database:h2'
application.propertiesに以下を記載して、アプリケーションを再起動します spring.datasource.driver-class-name=org.h2.Driver spring.datasource.url=jdbc:h2:~/demo spring.datasource.username=demo spring.datasource.password=demo123 spring.h2.console.enabled=true データベースに接続してみよう
データベースに接続してみよう データベースの管理画面にアクセスする http://localhost:8080/h2-console にアクセスする application.propertiesの設定と同じ記載をして接続してください。
データベースに接続してみよう helpにあるデータベースを作成しましょう CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR(255));
INSERT INTO TEST VALUES(1, 'Hello'); INSERT INTO TEST VALUES(2, 'World');
データベースに接続してみよう データベースができたので、javaからアクセスしてみましょう build.gradleのdependenciesに以下を追加して、gradleを読み込み直します compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.projectlombok:lombok' testAnnotationProcessor
'org.projectlombok:lombok'
データベースに接続してみよう persistenseというパッケージを新規で作成し、二つのファイルを作成します コードは次に記載します
データベースに接続してみよう persistenseというパッケージを新規で作成し、二つのファイルを作成します package com.example.demo.persistense; import lombok.Data; @Data public class Test
{ private Integer id; private String name; }
データベースに接続してみよう persistenseというパッケージを新規で作成し、二つのファイルを作成します package com.example.demo.persistense; import org.apache.ibatis.annotations.Lang; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select;
import org.mybatis.scripting.freemarker.FreeMarkerLanguageDriver; import java.util.List; @Mapper public interface TestMapper { @Lang(FreeMarkerLanguageDriver.class) @Select(""" select id, name from TEST """) List<Test> getAll(); }
データベースに接続してみよう HelloControllerに test/list というエンドポイントを追加してみましょう。 追加してアクセスするとDBの一覧が取得できます。 @GetMapping("test/list") public List<Test> testList(){ return
testMapper.getAll(); }
TestMapperに insertメソッドを追加してみましょう。 @Lang(FreeMarkerLanguageDriver.class) @Insert(""" insert into TEST values (<@p name="id"/>,
<@p name="name"/>) """) void insert(@Param("id") Integer id, @Param("name") String name); データベースにデータを登録して みよう
HelloControllerに test/create というエンドポイントを追加してみましょう。 追加してアクセスするとDBの登録ができます。登録後の確認は http://localhost:8080/test/list にアクセスして確認しましょう @PostMapping("test/create") public String testCreate(@RequestParam
Integer id, @RequestParam String name) { testMapper.insert(id, name); return "OK"; } データベースにデータを登録して みよう