トッカンソフトウェア

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アノテーションをつけるだけで使えます。

ページのトップへ戻る