Skip to content
Open
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
4 changes: 4 additions & 0 deletions .mvn/jvm.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
-Dhttp.proxyHost=oskproxy.intra.tis.co.jp
-Dhttp.proxyPort=8080
-Dhttps.proxyHost=oskproxy.intra.tis.co.jp
-Dhttps.proxyPort=8080
14 changes: 0 additions & 14 deletions src/main/java/com/example/demo/DemoApplication.java

This file was deleted.

14 changes: 14 additions & 0 deletions src/main/java/com/example/message/Message.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.example.message;

import org.seasar.doma.Entity;
import org.seasar.doma.GeneratedValue;
import org.seasar.doma.GenerationType;
import org.seasar.doma.Id;

@Entity
public class Message {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public long id;
public String content;
}
56 changes: 56 additions & 0 deletions src/main/java/com/example/message/MessageApplication.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package com.example.message;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
@RequestMapping("/message")
public class MessageApplication {

public static void main(String[] args) {
SpringApplication.run(MessageApplication.class, args);
}

@Autowired
MessageDao messageDao;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Springチームはコンストラクタインジェクションを推奨しています。
https://docs.spring.io/spring/docs/5.1.4.RELEASE/spring-framework-reference/core.html#beans-constructor-vs-setter-injection

私もコンストラクタインジェクションの方が好き。
理由は次の通り。

  • フィールドを final にできる
  • コンストラクタの引数チェックで null でないことを保証できる
  • コンストラクタで依存クラスを設定できるので、Spring管理下ではなく単なるクラスとしてテストが書ける

コード例:

final MessageDao messageDao;

public MessageApplication(MessageDao messageDao) {
    this.messageDao = Objects.requireNonNull(messageDao);
}


@GetMapping("/")
List<Message> all() {
return messageDao.selectAll();
}

@GetMapping("/{id}")
Message select(@PathVariable("id") int id) {
return messageDao.selectById(id);
}

@PostMapping("/register")
void insert(@RequestParam String content) {
Message message = new Message();
message.content = content;
messageDao.insert(message);
}

@PostMapping("/delete")
void delete(@RequestParam int id) {
Message message = messageDao.selectById(id);
messageDao.delete(message);
}

@PostMapping("/update/{id}")
void update(@PathVariable int id, @RequestParam String content) {
Message message = messageDao.selectById(id);
message.content = content;
messageDao.update(message);
}
}
31 changes: 31 additions & 0 deletions src/main/java/com/example/message/MessageDao.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.example.message;

import java.util.List;

import org.seasar.doma.Dao;
import org.seasar.doma.Delete;
import org.seasar.doma.Insert;
import org.seasar.doma.Select;
import org.seasar.doma.Update;
import org.seasar.doma.boot.ConfigAutowireable;
import org.springframework.transaction.annotation.Transactional;

@ConfigAutowireable
@Dao
public interface MessageDao {
@Select
List<Message> selectAll();

@Insert
@Transactional
int insert(Message message);

@Select
Message selectById(int id);

@Delete
int delete(Message message);

@Update
int update(Message message);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
SELECT
id,
content

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

テーブルが持つカラムをすべて取得する場合は expand が使えます。
https://doma.readthedocs.io/en/stable/sql/#expand

使え!というわけではないけれど、便利です。

FROM message
ORDER BY id ASC
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
SELECT id,content FROM message WHERE id = /* id */0
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
CREATE TABLE message (
id serial ,
content VARCHAR(100),
CONSTRAINT "PK" PRIMARY KEY (id)
);