SpringBoot MyBatis
今回はSpringBootでMyBatisにアクセスします。環境設定等はこちらを参照下さい。事前準備
アクセスするテーブルを作成します。DBがない場合、こちらを参考に構築して下さい。
CREATE TABLE m_user
(
id character varying(8) NOT NULL,
name character varying(16),
CONSTRAINT pk_m_user PRIMARY KEY (id)
)
設定ファイル
pom.xml
<?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.3.1.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>demo</name>
<description>Demo 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.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
mybatis-spring-boot-starter、postgresqlを追加しています。
別のDBで行う場合、postgresqlをDBにあったものに変更してください。
application.properties
spring.thymeleaf.cache=false
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
spring.datasource.username=postgres
spring.datasource.password=ps
DBの接続情報を設定しています。
Java
Java側の処理は、Spring MVCと同様になります。UserModel.java
package spring.test;
public class UserModel {
String id;
String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
UserDao.java
package spring.test;
import java.util.List;
public interface UserDao {
public List<UserModel> getUser(String id);
}
UserDaoImpl.java
package spring.test.dao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import spring.test.UserDao;
import spring.test.UserModel;
@Repository
public class UserDaoImpl implements UserDao {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public List<UserModel> getUser(String id) {
List<UserModel> list = jdbcTemplate.query("select * from m_user where id= ?", new Object[] { id },
new RowMapper<UserModel>() {
public UserModel mapRow(ResultSet rs, int rowNum) throws SQLException {
UserModel user = new UserModel();
user.setId(rs.getString("id"));
user.setName(rs.getString("name"));
return user;
}
});
return list;
}
}
LoginService.java
package spring.test;
public interface LoginService {
public boolean checkLogin(UserModel lm);
}
LoginServiceImpl.java
package spring.test.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import spring.test.LoginService;
import spring.test.UserDao;
import spring.test.UserModel;
@Service
public class LoginServiceImpl implements LoginService {
@Autowired
private UserDao userDao;
@Override
public boolean checkLogin(UserModel lm) {
List<UserModel> list = userDao.getUser(lm.getId());
return list.size() > 0;
}
}
LoginControler.java
package spring.test.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import spring.test.LoginService;
import spring.test.UserModel;
@Controller
@RequestMapping(value = "/login")
public class LoginControler {
@Autowired
private LoginService loginService;
@ModelAttribute("UM")
public UserModel init() {
return new UserModel();
}
@RequestMapping(method = RequestMethod.GET)
public String loginGet() {
return "login";
}
@RequestMapping(method = RequestMethod.POST)
public ModelAndView loginPost(@ModelAttribute("UM") UserModel userModel) {
ModelAndView mv = new ModelAndView("login");
if (loginService.checkLogin(userModel)) {
mv.addObject("msg", "ログイン成功");
} else {
mv.addObject("msg", "ログイン失敗");
}
return mv;
}
}
Html
Thymeleaf①と同様になります。login.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>ログイン</title>
</head>
<body>
<form th:action="@{/login}" method="post" th:object="${UM}">
ID: <input type="text" th:field="*{id}" />
<input type="text" th:field="*{name}" disabled />
<BR />
<input type="submit" value="ログイン" />
<BR />
</form>
<span th:text="${msg}"></span>
</body>
</html>
実行
ファイル構成は以下のようになります。
http://localhost:8080/loginにアクセスすると動作確認できます。
実行イメージは以下のようになります。

トランザクション
@Transactionalアノテーションをつけるとトランザクション処理が行えるようになります。使い方はこちらを参照ください。
SpringBootではtransactionManagerや<tx:annotation-driven />の設定を行う必要はありません。
SpringBootが自動でやってくれるので、@Transactionalアノテーションをつけるだけで使えます。
ページのトップへ戻る