使用Spring Boot创建应用程序2

上次的延续。

https://qiita.com/YJ2222/items/8c29fc7fc2d886a9b35e

建立文件

1.png

– 每个文件的说明。
gè de .)

    • SpringApp1/src/main/java/com.ex1/dao

UserDAO.java → DBアクセス用のオブジェクト

SpringApp1/src/main/java/com.ex1/model

User.java → ユーザ情報のインスタンスを生成するオブジェクト
UserFindLogic.java → DAOが取得した情報を受け取り、インスタンス化。その後controllerへ渡す。

SpringApp1/src/main/resources/

data.sql → schema.sqlが作ったテーブルにデータをinsertするファイル。
schema.sql → プロジェクト起動時にDBへアクセスしテーブルを作成するファイル。

templates/userResult.html → postの処理が成功したときにフォワードされるview

将代码写入已创建的文件中。


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8"></meta>
    <title>User</title>
</head>
<body>
    <h1>UserResult</h1>
    <table>
        <tr>
            <!-- th:textはthymeleafの機能を使用しgetAttributeできる。 -->>
            <td>ID:</td><td th:text="${id}"></td>
        </tr>
        <tr>
            <td>ニックネーム:</td><td th:text="${nickname}"></td>
        </tr>
    </table>
<body>
</html>


package com.ex1.Controller;

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 org.springframework.web.bind.annotation.RequestParam;

import com.ex1.model.User;
import com.ex1.model.UserFindLogic;

@Controller
public class UserController {

    @Autowired // 依存性の注入。
    private UserFindLogic userFindLogic;

    @GetMapping("/")
        public String getUser() {
            return "user";
    }
    // user.htmlからのpostの処理。@RequestParamでnameの値を取得。
    @PostMapping("/user/db")
    public String postDbRequest(@RequestParam("text") String str, Model model) {

        int id = Integer.parseInt(str); // 文字列変換。
        // UserFindLogicをnewしなくても@Autowiredで依存性を注入しているため、User型としてUserFindLogicを実行することができる。
        User user = userFindLogic.findUser(id); // UserFindLogic.javaのfindUserメソッドを実行。
        // UserFindLogic.javaから戻り値を受け取ったら以下を実行。
        model.addAttribute("id", user.getUserId()); // ユーザ情報をsetAttributeする。
        model.addAttribute("nickname", user.getNickName());

        return "userResult"; // userResult.htmlにフォワード。
    }

}



package com.ex1.model;

import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ex1.dao.UserDAO;

@Service // ビジネスロジックに付与するアノテーション。
public class UserFindLogic {

    @Autowired
    private UserDAO userDAO;

    public User findUser(int id) { // controllerからの指示によりメソッドを実行。

        Map<String, Object> map = userDAO.findUser(id); // UserDAOのfindUserを実行。
        // DAOからuser変数を受け取る。
        int userId = (Integer) map.get("user_id"); // 受け取った変数をmapで分解し.getで情報取得。
        String nickName = (String) map.get("nickname");

        User user = new User(); // userインスタンスを生成(User.java)
        user.setUserId(userId); // setterを実行。
        user.setNickName(nickName);

        return user; // controllerにuserインスタンスを戻り値として返す。
    }
}



package com.ex1.model;

public class User {
    private int userId;
    private String nickName;    

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public void setNickName(String nickName) {
        this.nickName = nickName;
    }

    public int getUserId() {
        return userId;
    }

    public String getNickName() {
        return nickName;
    }
}


package com.ex1.dao;

import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

@Repository // DAOクラスに付与するアノテーション。
public class UserDAO {
    @Autowired 
    private JdbcTemplate jdbcTemplate; // DB接続できるインスタンス。

    public Map<String, Object> findUser(int id) { // UserFindLogic.javaの指示によりメソッドを実行。

        // SELECT文を生成
        String query = "SELECT "
                + " * "
                + "FROM account "
                + "WHERE user_id=?";

        // jdbcTemplateの機能によってDBに対しSQLを実行。
        Map<String, Object> user = jdbcTemplate.queryForMap(query, id);

        return user; // 上記の処理結果をUserFindLogic.javaに戻り値として返す。
    }
}


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8"></meta>
    <title>User</title>
</head>
<body>
    <h1>UserResult</h1>
    <table>
        <tr>
            <td>ID</td><td th:text="${id}"></td>
        </tr>
        <tr>
            <td>ニックネーム</td><td th:text="${nickname}"></td>
        </tr>
    </table>
<body>
</html>


spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driver-class-name=org.h2.Driver
spring.datasouce.username=sa
spring.datasouce.password=
spring.datasource.sql-script-encoding=UTF-8
spring.h2.console.enabled=true
spring.datasource.initialize=true
spring.datasource.schema=classpath:schema.sql
spring.datasource.data=classpath:data.sql


INSERT INTO account (user_id, nickname, password) VALUES (1, 'user1', 'user1+');


CREATE TABLE IF NOT EXISTS account (
    user_id INT PRIMARY KEY,
    nickname VARCHAR(50),
    password VARCHAR(50)
);

3.png

以上是对的。使用本地环境已经成功连接到数据库了。

bannerAds