Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
SpringBootでAPI開発
Search
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
69
ローカルLLMで自動レビューの仕組み
shogonakao
0
32
無料で使える「LM Studio」でローカルLLM入門
shogonakao
0
150
単体テストの精度を高めるための guideline
shogonakao
0
320
Javaはレガシーではない!
shogonakao
0
440
型安全性で考えること
shogonakao
0
33
アプリケーションログをs3に転送するとき個人情報気をつけてますか?
shogonakao
0
52
コーディングエージェントと 筋トレ
shogonakao
0
91
エキサイトブログ刷新に向けて
shogonakao
0
150
Featured
See All Featured
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Exploring anti-patterns in Rails
aemeredith
3
470
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.8k
Color Theory Basics | Prateek | Gurzu
gurzu
0
440
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
900
How to Talk to Developers About Accessibility
jct
2
520
Building an army of robots
kneath
306
46k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
480
Making the Leap to Tech Lead
cromwellryan
135
10k
Designing Powerful Visuals for Engaging Learning
tmiket
1
510
Tell your own story through comics
letsgokoyo
1
1k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
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"; } データベースにデータを登録して みよう