Spring BootでDoma-Gen2を使う方法 ホームページ制作 | 墨田区

Spring BootでDoma-Gen2を使う方法

LINEで送る
Pocket

SpringbootでDoma-Gen2を使う方法のご紹介です。
SpringbootでDoma-Gen2を使う方法

Doma-Gen は Doma2 のためのコードジェネレーターです。エンティティ、DAO、SQL ファイルを自動生成してくれます。Ant タスクとして作成されているため、Ant はもちろん、Gradle などのビルドツールから実行できます。利用には Doma-genの他に、FreeMarker が必要です。
Welcome to Doma-Gen — Doma-Gen 2.0 ドキュメント

Spring Boot で 2 Way SQL をやりたい って方のお役に立てるとうれしいです。




【PR】マジか?!「アレ」してるLINEスタンプっていったい・・・


環境

Spring Boot 1.4.1
Thymeleaf 3.0.2
Windows7
Java8
Eclipse 4.6 Neon
ORACLE 11g
Doma2
Doma Gen 2.13.0
FreeMarker 2.3.20

ここではゼロからアプリを作っていますが、こちらも参考にしてみてください。
Spring Bootを使ってWebアプリを作る方法
Spring BootとDoma2を連携してORACLE接続する方法

pom.xmlを準備

Eclipse から Maven プロジェクトを追加し、pom.xml を編集します。
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>jp.doma2.gen.spb</groupId>
  <artifactId>spring-boot-doma2</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.1.RELEASE</version>
  </parent>
  <properties>
    <java.version>1.8</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <thymeleaf.version>3.0.2.RELEASE</thymeleaf.version>
    <thymeleaf-layout-dialect.version>2.0.5</thymeleaf-layout-dialect.version>
    <thymeleaf-extras-springsecurity4.version>3.0.2.RELEASE</thymeleaf-extras-springsecurity4.version>
    <thymeleaf-extras-data-attribute.version>2.0.5</thymeleaf-extras-data-attribute.version>
    <thymeleaf-extras-java8time.version>3.0.2.RELEASE</thymeleaf-extras-java8time.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-devtools</artifactId>
    </dependency>
    <dependency>
      <groupId>com.oracle</groupId>
      <artifactId>ojdbc7</artifactId>
      <version>12.1.0</version>
    </dependency>
    <dependency>
      <groupId>org.seasar.doma.boot</groupId>
      <artifactId>doma-spring-boot-starter</artifactId>
      <version>1.1.0</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
          <source>${java.version}</source>
          <target>${java.version}</target>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-install-plugin</artifactId>
        <executions>
          <execution>
            <id>install-external</id>
            <phase>clean</phase>
            <configuration>
              <file>${basedir}/lib/ojdbc7.jar</file>
              <repositoryLayout>default</repositoryLayout>
              <groupId>com.oracle</groupId>
              <artifactId>ojdbc7</artifactId>
              <version>12.1.0</version>
              <packaging>jar</packaging>
              <generatePom>true</generatePom>
            </configuration>
            <goals>
                <goal>install-file</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

Spring Bootセットアップ

エントリポイントとなる Application クラスと、コントローラークラス、トップページを作ります。

・Application クラス
package jp.doma2.gen.spb;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
  public static void main(String[] args) {
      SpringApplication.run(Application.class);
  }
}

・Doma2Controller
package jp.doma2.gen.spb;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import jp.doma2.gen.spb.dao.ReservationDao;
import jp.doma2.gen.spb.entity.Reservation;

@Controller
public class Doma2Controller {

  @Autowired
  private ReservationDao reservationDao;

  @RequestMapping(value = "/", method = RequestMethod.GET)
  public String main(Model model) {
    Reservation re = reservationDao.selectById(1);
    model.addAttribute("userName", re.getName());
    return "index";
  }
}


・index.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Spring Boot de Doma2</title>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<body>
<span th:text="${userName}">userName</span>
</body>
</html>

・application.yml
spring:
  profiles:
    active: dev
  datasource:
    url: jdbc:oracle:thin:@localhost:1521:oracle
    username: scott
    password: tiger
    driverClassName: oracle.jdbc.driver.OracleDriver
  thymeleaf:
    cache: false
thymeleaf:
  mode: HTML

application.yml の datasource は環境によって変更してください。

ここまで作るとこんな感じになります。
Spring Bootのサンプルアプリ作成

AppConfigクラスを用意する。

AppConfig クラス作り、下記のソースをコピペします。
package jp.doma2.gen.spb;

import javax.sql.DataSource;
import org.seasar.doma.jdbc.Config;
import org.seasar.doma.jdbc.dialect.Dialect;

public class AppConfig implements Config {

  private Dialect dialect;

  private DataSource dataSource;

  @Override
  public Dialect getDialect() {
      return dialect;
  }

  public void setDialect(Dialect dialect) {
      this.dialect = dialect;
  }

  @Override
  public DataSource getDataSource() {
      return dataSource;
  }

  public void setDataSource(DataSource dataSource) {
      this.dataSource = dataSource;
  }
}

詳しくはこちらのページを参照ください。
設定 — Doma 2.0 ドキュメント

Doma GenとFree Makerを準備する

Doma Gen と Free Maker を準備します。

下記サイトから jar ファイルをダウンロードします。
Maven Repository org.seasar.doma » doma-gen » 2.13.0
Maven Repository org.freemarker » freemarker » 2.3.20
Oracle Database 12c Release 1 JDBC Driver Downloads

プロジェクトのルートに lib フォルダーを作成して、ダウンロードした jar を配置します。
※ojdbc7.jar は ORACLE 用の jdbc ドライバです。利用するデータベースに合わせて変更してください。

Doma GenとFree Makerを準備する

テーブルとデータを用意する

下記の SQL を実行してデータとテーブルを用意します。
CREATE TABLE RESERVATION
(
  ID    NUMBER(5,0) NOT NULL,
  NAME  NVARCHAR2(255) NOT NULL,
  CONSTRAINT PK_RESERVATION PRIMARY KEY (ID) USING INDEX
)
/
INSERT INTO RESERVATION VALUES(1,'hoge')
/
INSERT INTO RESERVATION VALUES(2,'piyo')
/
INSERT INTO RESERVATION VALUES(3,'fuga')
/
INSERT INTO RESERVATION VALUES(4,'foo')
/
INSERT INTO RESERVATION VALUES(5,'bar')
/
INSERT INTO RESERVATION VALUES(6,'baz')
/
INSERT INTO RESERVATION VALUES(7,'saka')
/

doma-gen-build.xmlを作成する

次に、プロジェクトのルートに doma-gen-build.xml を作成します。

下記の xml を貼り付けてください。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration>
<project name="doma-gen-example" default="gen" basedir=".">

  <property name="javaDestDir" value="src/main/java/"/><!-- エンティティ、DAOが作成されるルート -->
  <property name="sqlDestDir" value="src/main/resources/"/><!-- SQLファイルが作成されるルート -->
  <property name="dialectName" value="oracle"/><!-- 利用するデータベース -->
  <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/><!-- jdbcドライバ -->
  <property name="url" value="jdbc:oracle:thin:@localhost:1521:oracle"/><!-- 接続先 -->
  <property name="user" value="scott"/><!-- ユーザー -->
  <property name="password" value="tiger"/><!-- パスワード -->
  <property name="entityPackageName" value="jp.doma2.gen.spb.entity"/><!-- エンティティが作成されるパッケージ -->
  <property name="daoPackageName" value="jp.doma2.gen.spb.dao"/><!-- DAOが作成されるパッケージ -->
  <property name="configClassName" value="jp.doma2.gen.spb.AppConfig"/><!-- AppConfigの場所 -->
  <property name="sqlFilePattern" value="META-INF/**/*.sql"/><!-- SQLファイルが作成されるフォルダ -->

  <path id="classpath">
    <fileset dir="lib"/>
  </path>

  <taskdef name="gen" classname="org.seasar.doma.extension.gen.task.Gen" classpathref="classpath" loaderref="loader"/>
  <typedef name="entityConfig" classname="org.seasar.doma.extension.gen.task.EntityConfig" loaderref="loader"/>
  <typedef name="daoConfig" classname="org.seasar.doma.extension.gen.task.DaoConfig" loaderref="loader"/>
  <typedef name="sqlConfig" classname="org.seasar.doma.extension.gen.task.SqlConfig" loaderref="loader"/>

  <target name="gen">
    <gen
      dialectName="${dialectName}"
      driverClassName="${driverClassName}"
      url="${url}"
      user="${user}"
      password="${password}">
      <entityConfig
        destdir="${javaDestDir}"
        packageName="${entityPackageName}"
      />
      <daoConfig
        destdir="${javaDestDir}"
        packageName="${daoPackageName}"
        configClassName="${configClassName}"
      />
      <sqlConfig
        destdir="${sqlDestDir}"
      />
    </gen>
  </target>

</project>

doma-gen-build.xml を右クリックし、[実行]-[外部ツールの構成]をクリックします。
doma-gen-build.xmlを実行

[Ant ビルド]を右クリックして「新規」をクリックします。
[Ant ビルド]を右クリックして「新規」をクリック

[リフレッシュ]タブを開き、[完了時にリソースをリフレッシュ。]にチェックを入れ、[選択されたリソースを含むプロジェクト]を選択します。これで Ant 実行後、エンティティ、DAO クラスが自動生成されてもリフレッシュせずにクラスが表示されます。
完了時にリソースをリフレッシュ

次に[クラスパス]タブを開き、右側の[JARの追加]から、lib フォルダに入れた3つの jar ファイルを選択します。
クラスパスタブから3つのJARを追加

右下の[実行]ボタンを押下すれば、おしまいです。下記のようなログが出れば成功です。
Buildfile: C:\Eclipse\4.6\workspace\spring-boot-doma2\doma-gen-build.xml
gen:
      [gen] [DOMAGEN0017] 方言にはクラス[org.seasar.doma.extension.gen.dialect.OracleGenDialect]が使用されます。
      [gen] select comments from all_tab_comments where owner = 'SCOTT' and table_name = 'RESERVATION' and table_type in ('TABLE', 'VIEW')
      [gen] select column_name, comments from all_col_comments where owner = 'SCOTT' and table_name = 'RESERVATION'
      [gen] [DOMAGEN0019] ファイルを作成しました。C:\Eclipse\4.6\workspace\spring-boot-doma2\src\main\java\jp\doma2\gen\spb\entity\Reservation.java
      [gen] [DOMAGEN0019] ファイルを作成しました。C:\Eclipse\4.6\workspace\spring-boot-doma2\src\main\java\jp\doma2\gen\spb\entity\ReservationListener.java
      [gen] [DOMAGEN0019] ファイルを作成しました。C:\Eclipse\4.6\workspace\spring-boot-doma2\src\main\java\jp\doma2\gen\spb\dao\ReservationDao.java
      [gen] [DOMAGEN0019] ファイルを作成しました。C:\Eclipse\4.6\workspace\spring-boot-doma2\src\main\resources\META-INF\jp\doma2\gen\spb\dao\ReservationDao\selectById.sql
BUILD SUCCESSFUL
Total time: 4 seconds

おおお、自動生成されたーー^^
Doma Genにより自動生成された

DAOにConfigAutowireableアノテーション付与

自動生成された DAO に ConfigAutowireable のアノテーションを付与します。
これをしないと「No qualifying bean of type・・・」のエラーが出てデータアクセスできません。
@Dao(config = AppConfig.class)
@ConfigAutowireable
public interface ReservationDao {
・・・
}

コントローラークラスを変更

早速データアクセスしてみましょう。コントローラークラスを下記のように変更します。
・Doma2Controller
package jp.doma2.gen.spb;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import jp.doma2.gen.spb.dao.ReservationDao;
import jp.doma2.gen.spb.entity.Reservation;

@Controller
public class Doma2Controller {
  @Autowired
  private ReservationDao reservationDao;
  @RequestMapping(value = "/", method = RequestMethod.GET)
  public String main(Model model) {
    Reservation re = reservationDao.selectById(1);
    model.addAttribute("userName", re.getName());
    return "index";
  }
}

検証

pom.xml を右クリックして、[実行]-[Maven clean]と[Maven test]を実行し、Application クラスを[実行]します。
Spring Boot が起動したら、http://localhost:8080/ へアクセスします。

画面に hoge って出れば完了です^^
Spring BootでDoma Gen検証

まとめ

正直、DAO に ConfigAutowireable アノテーションを付与しなければならないというところで、だいぶハマりました^^;

テーブル数が多い場合には、ちょっとめんどくさいなーなんて思ったりもしますが、仕方ないのかなー・・・。自動付与してくれれば楽ちんなんですけど、やり方がわかりません・・。どなたかご存知の方がいらっしゃいましたら、コメントお待ちしております。

ともあれ、2 Way SQL の環境はこれでできますので、後は粛々と作るのみですね。

ちなみにアノテーション付与した後に、再度 Ant 実行しても上書きされるわけではありませんのでご安心を。

おすすめ書籍 – 私はこの書籍1冊で Spring Boot を習得できました^^

SpringBootプログラミング入門

新品価格
¥3,024から



おつかれさまでした。

LINEで送る
Pocket

この記事がお役に立ちましたら シェア をお願いいたします。

Javaの勉強が思うように進まないときは!

Javaの勉強が思うように進まないのであれば、プロに直接質問ができる プログラミングスクール を検討してみてはいかがでしょうか?プログラミングスクールに申し込めば、短期間で一定のスキルを身に着けることができます!

Javaコースあり!オンライン完結型 テックアカデミー TechAcademy [テックアカデミー]

どこかに通う必要なく、自宅でプログラミングやアプリ開発を学ぶことができるのが特徴のスクールです。未経験からプロになるまで最短4週間という、超短期集中型の学習ができます。年齢層は10代〜40代の男女が中心で、学引があり多くの学生が受講しているそうですよ。オンラインで受講ができるスクールですので、全国どこからでも学習ができますね。

更にさらに、パーソナルメンターにチャット質問できちゃうんです!!

これは素晴らしいことですよ!ハマったり困ったことが起こるのがプログラミングの世界。知っている誰かに聞けば数分で解決することが、自分だけだと何時間もかかったりしますから!いや、これホントですよ。

しかし、便利な世の中になりましたよねー。一昔前ではオンラインで学習できるなんて、思いもよりませんでしたから。講師もバリバリのエンジニアですので、現場で使えるスキルを教えてもらえます。なんとも素晴らしいスクールがあったものですね。学割を使えば社会人より半額以下で受講できますから、学生さんには超おすすめです。

これから Java プログラミングを勉強して、将来はプログラマーとして活躍したいと思っている方には、就職保証付きJavaエンジニアコース というのがおすすめです。就職先まで保証してくれるとなれば、もう安心して学習に専念できますね。夢への第一歩はここから始まるのかも。あ、将来はライバルですね^^

オンラインスクールですから営業エリアは全国です。
気になる方は一度チェックしてみてください。無料の動画説明会も常時開催していますよ。


Javaコースあり!未経験者にウケてる KENスクール パソコンスクール・パソコン教室 【KENスクール】個別指導のWeb-DTP・OA・IT PCスクール

理解度や学習ペースに合わせて、一人ひとりが納得して前進できる授業を提供してくれるのが特徴です。特に課題製作は現場さながらで、実務に即したものとなっていますので短期でのスキルアップが望めます。自宅学習のサポートも充実していて、授業内容をいつでもビデオで振り返ることができるのもうれしいですね。好きな時間に好きな場所で、無理なくスケジューリングできるので、仕事の忙しい方でも柔軟に学ぶことができますよ。

更にさらに、なんと 就職サポート をしてくれるというのですから驚きです!!

履歴書の書き方から面接指導、求人の紹介など、具体的な就職先まで提案してくれるんです!私も「もっと早く出会いたかったなぁー、こんなスクール」・・・って思っちゃいました^^

東京・神奈川・愛知・大阪を営業エリアとされています。
まずは気軽に 無料体験予約 に申し込んでみるのもアリですよ。


コメントを残す

コメント(必須)

お名前 (必須)
メールアドレス
(アドレスは公開されません)

Trackback URL