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
170
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
ローカルLLMで自動レビューの仕組み
shogonakao
0
11
無料で使える「LM Studio」でローカルLLM入門
shogonakao
0
120
単体テストの精度を高めるための guideline
shogonakao
0
290
Javaはレガシーではない!
shogonakao
0
230
型安全性で考えること
shogonakao
0
27
アプリケーションログをs3に転送するとき個人情報気をつけてますか?
shogonakao
0
50
コーディングエージェントと 筋トレ
shogonakao
0
85
エキサイトブログ刷新に向けて
shogonakao
0
140
【エキサイトブログリビルド】Spring Boot × MyBatis × FreeMarker を使って、データベースの接続先を安全に変更します。
shogonakao
1
890
Featured
See All Featured
Believing is Seeing
oripsolob
1
150
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
160
BBQ
matthewcrist
89
10k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
180
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
210
AI: The stuff that nobody shows you
jnunemaker
PRO
8
720
Un-Boring Meetings
codingconduct
0
320
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.7k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
430
A Soul's Torment
seathinner
6
3k
Ruling the World: When Life Gets Gamed
codingconduct
0
260
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"; } データベースにデータを登録して みよう