Open9

質問、希望、指摘等あればやさしくお願いします

honamihonami

はじめまして。
次のプロジェクトでORM(MyBatis)を使用しそうであったことを契機に、貴著「Javaの基礎を学び終えたアナタに贈る, SpringBoot/SpringSecurityによる掲示板開発ハンズオン」を触らせていただきました(多少わかる系なので、gradle使用&VSC上のコンテナから動かしたりでやるくらいの応用は利かせたりしつつ)。
全体的によくまとまっており、いいハンズオンだったと思っております。
公開していただいてありがとうございます。

ただ一点、IDE準備中の「lombok」のプラグインについては、IntelliJのプラグインとして手動で導入の記述がありますが、現行のIntelliJ Commumityではデフォルトで含まれているため、逆にプラグインでの検索では見つからないことご指摘しておこうかと思います(2020.3.1以降。現行2021.1.1の直近でもこの状態であることを、5/25にCentOS8仮想マシン上から確認済)。

参考:https://www.fixes.pub/program/295606.html

あしたばあしたば

はじめまして。お読みいただきありがとうございます。

ご指摘ありがとうございました。全く存じませんでした。
ご指摘感謝いたします!

sysy

はじめまして。
Chapter5 Mybatisを使ったデータの保存、につきましてapplication.ymlのDDLファイルパスの記述が変わっていたみたいなので報告させていただきます。
spring initializrでプロジェクトを作成するときに、Spring Bootのバージョンがデフォルトだと今現在2.7.2、あしたば様の執筆当時は2.4.3です。
調べたところ2.5.0以降、記述の方法が変わってたみたいです。

---変更前---

spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:develop;MODE=Oracle;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
    hikari:
      pool-name: ConnectionPool
      leakDetectionThreshold: 5000
      maximum-pool-size: 20
      minimum-idle: 10
      username: sa
      password:
      driver-class-name: org.h2.Driver
    schema: classpath:h2/schema.sql
    initialization-mode: embedded 

---変更後---

spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:develop;MODE=Oracle;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
    hikari:
      pool-name: ConnectionPool
      leakDetectionThreshold: 5000
      maximum-pool-size: 20
      minimum-idle: 10
      username: sa
      password:
      driver-class-name: org.h2.Driver
  sql:
    init:
      mode: embedded
      schema-locations: classpath:h2/schema.sql

変更しないと、USER_COMMENTテーブルが作れなく進めなかったので報告させてもらいました。

あしたばあしたば

初めまして。
読んでいただきありがとうございます。

また、詳細にご報告ありがとうございます。助かりました。近日中に内容に反映したいと思います。

sysy

Chapter06 MyBatisを使ったデータの取得、その表示、について報告させていただきます。
この章を一通り実装し終え、実行してみると下記のエラーが出てきてしまいました。

推測になりますが、UserCommentReadDtoでデータを受け取る際にカラム名から順番に受け取るため
用意している変数の型に合ってないんじゃないかと思いました。
以下、UserCommentReadDtoのコードですが上からid, name, mailAddress, craetedAt, commentとなっています。

package chalkboard.me.bulletinboard.application.dto;

import lombok.AccessLevel;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

import java.time.LocalDateTime;

@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
@Getter
public class UserCommentReadDto {
  private final int id;
  private final String name;
  private final String mailAddress;
  private final LocalDateTime createdAt;
  private final String comment;
}

次にschema.sqlで定義したカラム順ですがid, name, mailAddress, comment, createdAtとなっているためエラーがでているものだと思いました。(commentをtimestamp型で受け取れない。)

UserCommentReadDtoでcreatedAtとcommentを逆にしたら問題なく表示されたのでここに報告いたします。

package chalkboard.me.bulletinboard.application.dto;

import lombok.AccessLevel;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

import java.time.LocalDateTime;

@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
@Getter
public class UserCommentReadDto {
  private final int id;
  private final String name;
  private final String mailAddress;
  //以下二つを入れかえ
  private final String comment;
  private final LocalDateTime createdAt;

}
あしたばあしたば

ご指摘ありがとうございます。コードの方ではおっしゃるとおりになっていたので、修正が漏れてしまったようでした。

MyBatisとDTOの間はsetter/getterをつかって名前基準のMappingを作ることもできますが、紹介している方法では設定が非常に簡易なかわりにDBカラムの順序の影響を受けたように思います。

riku_smileriku_smile

はじめまして。
来春よりエンジニアとしてのキャリアが始まるため、実務前の教材として大変参考にさせていただいております。
公開していただいてとても感謝しております。

chapter-08のSecurityConfig実装部分について質問させていただきます。

SpringSecurity5.7以降からWebSecurityConfigurerAdapterがdepricatedになった影響で、configure関数の書き方が変更されたようです。(ドキュメント

SpringSecurity5.7以降のSecurityConfigについて、configure(AuthenticationManagerBuilder auth)の関数をどのようにコーディングすべきかわからず、学習が停滞しております。

teratailのスレッドでも同様の質問を詳しく掲載させていただきました。

著者様または本コメントをご覧になった有識者が居りましたら、解決方法を教えていただきたいです。

あしたばあしたば

はじめまして。ご参考いただきありがとうございます。

この本もspring boot 2.4を基準としているので随分古くなってしまいました。
nodeなどは一瞬で陳腐化しますが、javaでもこれほど変わるものかと少し驚いています。

さて、下記にSpringBoot2.7に準じて書き直したコードを置いておきます。
本の修正は少々かかりますが、、。

https://github.com/ange-k/spring-sample/pull/14/files

SpringSecurityについても修正していますのでご参考にしてください。