Spring BootでMybatisを使ってみる
GitHub:https://github.com/n-yata/mybatis-sample.git
pom.xml
pom.xmlは下のような感じ。
mybatis-spring-boot-starterを入れる。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.5</version> <relativePath /> <!-- lookup parent from repository --> </parent> <groupId>example</groupId> <artifactId>Mybatis-sample</artifactId> <version>0.0.1-SNAPSHOT</version> <name>Mybatis-sample</name> <description>Spring sample project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
application.properties
DBの接続情報とmybatisの設定を書く。
spring.datasource.url=jdbc:postgresql://localhost:5432/postgres spring.datasource.username=postgres spring.datasource.password=postgres spring.datasource.driver-class-name=org.postgresql.Driver # MybatisマッピングJavaクラスのパッケージ mybatis.type-aliases-package=example.mapper # xmlマッピングファイルの場所 mybatis.mapper-locations=classpath:mapper/*.xml # アンスコ→キャメルケースに変換 mybatis.configuration.map-underscore-to-camel-case=true
propertiesに書いたJavaファイルとxmlファイルのパスは下のような感じ。
Modelクラス
User.java
Lombok便利。フィールドだけ書いて簡単実装。
package example.model; import lombok.Data; @Data public class User { private String userId; private String firstName; private String lastName; private String password; private String roleName; }
対応するテーブルのcreate文(PostgreSQLを使用)
CREATE TABLE IF NOT EXISTS usr( user_id VARCHAR(255) NOT NULL, first_name VARCHAR(255) NOT NULL, last_name VARCHAR(255) NOT NULL, password VARCHAR(255) NOT NULL, role_name VARCHAR(255) NOT NULL, PRIMARY KEY (user_id) );
適当にインサート
INSERT INTO usr (user_id, first_name, last_name, role_name, password) VALUES ('test01', '太郎', '山田', 'USER', 'password'); INSERT INTO usr (user_id, first_name, last_name, role_name, password) VALUES ('test02', '花子', '田中', 'USER', 'password'); INSERT INTO usr (user_id, first_name, last_name, role_name, password) VALUES ('test03', '次郎', '佐藤', 'USER', 'password');
JavaとxmlファイルのMapper
SampleMybatis.java
インタフェースを書く。@Mapperアノテーション忘れずに。
package example.mapper; import java.util.List; import org.apache.ibatis.annotations.Mapper; import example.model.User; @Mapper public interface SampleMybatis { List<User> selectAll(); }
SampleMybatis.xml
Javaに書いたメソッドに対応するSQLを書く。
mapperタグのnamespace属性はパッケージ名.クラス名
selectタグ内のresultType属性でモデルクラス指定はパッケージ名.クラス名
<?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"> <mapper namespace="example.mapper.SampleMybatis"> <select id="selectAll" resultType="example.model.User"> select * from usr </select> </mapper>
HomeController
Mapperインタフェース呼び出してSQL実行、画面に表示する。
package example.controller; import java.util.ArrayList; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import example.mapper.SampleMybatis; import example.model.User; @Controller public class HomeController { @Autowired SampleMybatis mapper; @GetMapping(value = "/") public String get() { return "index"; } @PostMapping(value = "/") public String post(Model model) { List<User> userList = mapper.selectAll(); List<String> lines = new ArrayList<>(); for(User user : userList) { lines.add(user.getLastName() + " " + user.getFirstName() + ", " + user.getRoleName()); } model.addAttribute("file_contents", lines); return "index"; } }
index.html
ボタン押したらSQLの結果を表示
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="https://www.thymeleaf.org" xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity3"> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <form method="post" action="/"> <input type="submit" value="selectAll"> </form> <table> <tr th:each="line:${file_contents}"> <td th:text=${line}></td> </tr> </table> </body> </html>
参考文献
https://mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/