投稿日: 2024年10月21日
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
// 以下を追加
runtimeOnly 'com.h2database:h2'
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.3'
}
※application.propertiesを利用している場合は適宜読み替えてください。
spring:
datasource:
# NON_KEYWORDSで個々の予約済みキーワードを無効にして、識別子として使用可能にする
# DATABASE_TO_UPPER=falseでH2のデフォルトテーブル名の大文字を無効化
# h2:memでH2をインメモリで作動させる
url: jdbc:h2:mem:test;NON_KEYWORDS=USER;DATABASE_TO_UPPER=false;
username: root
password: root
driver-class-name: org.h2.Driver
sql:
init:
# 起動時に毎回初期化SQLを実行
mode: always
encoding: UTF-8
h2:
console:
# コンソールを有効化
enabled: true
path: /h2-console
mybatis:
configuration:
# アンダースコアをキャメルケースに変換してJavaクラスにマッピング
map-underscore-to-camel-case: true
mapper-locations: classpath*:/mapper/*.xml
# UserMapper.xmlのresultTypeで以下のパッケージ名の記載を省略
type-aliases-package: com.example.demo
DROP TABLE IF EXISTS user;
CREATE TABLE user (
id INTEGER PRIMARY KEY AUTO_INCREMENT,
email VARCHAR(255),
password VARCHAR(255)
);
INSERT INTO user (email, password) VALUES ('foo@bar.com', 'foobar');
package com.example.demo;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class User {
private Long id;
private String email;
private String password;
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- UserMapper.javaとUserMapper.xmlのマッピング -->
<mapper namespace="com.example.demo.UserMapper">
<!-- select結果をUser.javaにマッピング -->
<select id="findAll" resultType="User">
select * from user
</select>
</mapper>
package com.example.demo;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper {
List<User> findAll();
}
※説明の簡略化のためserviceクラスの実装は省略しています。
package com.example.demo;
import java.util.List;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
private final UserMapper userMapper;
public UserController(UserMapper userMapper) {
this.userMapper = userMapper;
}
@GetMapping(value = "/findAll")
public List<User> findAll() throws Exception {
return userMapper.findAll();
}
}
※ここでは初期データとして以下のinsert文を発行しています。
INSERT INTO user (email, password) VALUES ('foo@bar.com', 'foobar');
$ curl http://localhost:8080/findAll
StatusCode : 200
StatusDescription :
Content : [{"id":1,"email":"foo@bar.com","password":"foobar"}]
~省略~
以上で全ての手順は完了になります