質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.62%

【spring】doma-gen-build後のSQLファイルの作成

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,028

rinimaruranran

score 32

プログラミングを初めて数ヶ月ほどなので、分かりにくい部分がありましたら申し訳ございません。

現在、Angularで作成したHTML上のフォームにIDを入力すると、SpringにIDが渡り、それに紐付くデータをDBから抽出してJSON形式にして、再びAngular側のHTMLで必要な要素だけ抜き取って表示させています。
Spring側ではdoma-gen-buildを行い、既存のDBからデータを引き出せるSQlファイルや〇〇Dao.java、〇〇DaoImpl.java等のファイルが自動で生成されるようになっています。

単純(単一)な情報はdoma-gen-buildで生成されたSQLファイルを使えば表示までできるようになったのですが、複数のカラムの指定の列にある数値を合計した結果を表示させたい(1つのテーブルで1つのIDを指定しても、複数行が該当している)場合に、どう対応したら良いか分かりません。

今表示できているのは、下記のような「一つのIDに対応する行が一行だけのもの」で、
id  name  age
1   taro  14
2   jiro  12
3   sabu  10

今考えあぐねているのは、下記のような「一つのIDに対応する行が複数あるもの」です。
このテーブルだと、「id=1と指定すると、pointを合計した「120」という答えが指定のURLに表示される」という想定です。
point  id
10     1
100    2
30     3
200    2
150    1

このような場合、doma-gen-buildで作成されたSQLファイル等は全く別に新規でSQLファイルや〇〇Dao.java、〇〇DaoImpl.java等のファイルを自作しなければならないのでしょうか。それとも、現在すでに作成されているSQLファイルを編集しても良いのでしょうか。はたまた、同一のDaoファイルに紐付く形でSQLファイルを複製すると良いのでしょうか。

どの方法を試してもうまく行かなかったので、方針だけでもご教示いただけると幸いです。

以下に、参考のファイルを記載します。
SampleDataController.java
XXX.java
XXXDao.java
XXXDaoImpl.java

(補足)
下記の参考ファイルの中では、hogeIdを指定して、countPointの合計値をローカルの/sampleData/countDataで表示させたいです。

SampleDataController.java

:(略)
@Autowired
        private XXXDao XXXDao;
@RequestMapping(value = "/sampleData/countData", method = RequestMethod.GET)
        @CrossOrigin
        public Optional<XXX> countData() {
            Integer fugaId = 5447777;
            Integer hogeId = 10156;
            Optional<XXX> re = XXXDao.selectById(fugaId, hogeId);
                    return re;
        }
:(略)

XXX.java

:(略)
/**
 */
@Entity(listener = XXXListener.class)
@Table(name = "XXX")
public class XXX {

    /** */
    @Id
    @Column(name = "fuga_id")
    Integer fugaId;

    /** */
    @Column(name = "count_point")
    Integer countPoint;

    /** */
    @Column(name = "create_time")
    LocalDateTime createTime;

    /** */
    @Column(name = "update_time")
    LocalDateTime updateTime;

    /** 
     * Returns the fugaId.
     * 
     * @return the fugaId
     */
    public Integer getfugaId() {
        return fugaId;
    }

    /** 
     * Sets the fugaId.
     * 
     * @param fugaId the fugaId
     */
    public void setfugaId(Integer fugaId) {
        this.fugaId = fugaId;
    }

    /** 
     * Returns the hogeId.
     * 
     * @return the hogeId
     */
    public Integer gethogeId() {
        return hogeId;
    }

    /** 
     * Sets the hogeId.
     * 
     * @param hogeId the hogeId
     */
    public void sethogeId(Integer hogeId) {
        this.hogeId = hogeId;
    }

    /** 
     * Returns the countPoint.
     * 
     * @return the countPoint
     */
    public Integer getcountPoint() {
        return countPoint;
    }

    /** 
     * Sets the countPoint.
     * 
     * @param countPoint the countPoint
     */
    public void setcountPoint(Integer countPoint) {
        this.countPoint = countPoint;
    }

    /** 
     * Returns the createTime.
     * 
     * @return the createTime
     */
    public LocalDateTime getCreateTime() {
        return createTime;
    }

    /** 
     * Sets the createTime.
     * 
     * @param createTime the createTime
     */
    public void setCreateTime(LocalDateTime createTime) {
        this.createTime = createTime;
    }

    /** 
     * Returns the updateTime.
     * 
     * @return the updateTime
     */
    public LocalDateTime getUpdateTime() {
        return updateTime;
    }

    /** 
     * Sets the updateTime.
     * 
     * @param updateTime the updateTime
     */
    public void setUpdateTime(LocalDateTime updateTime) {
        this.updateTime = updateTime;
    }
}

XXXDao.java

:(略)
/**
 */
@ConfigAutowireable
@Dao(config = DomaConfig.class)
public interface XXXDao {

    /**
     * @param fugaId
     * @param hogeId
     * @return the XXX entity
     */
    @Select
    Optional<XXX> selectById(Integer fugaId, Integer hogeId);

    @Select
    Optional<XXX> selectByCount(Integer hogeId);

    /**
     * @param entity
     * @return affected rows
     */
    @Insert
    int insert(XXX entity);

    /**
     * @param entity
     * @return affected rows
     */
    @Update
    int update(XXX entity);

    /**
     * @param entity
     * @return affected rows
     */
    @Delete
    int delete(XXX entity);
}

XXXDaoImpl.java

/** */
@org.springframework.stereotype.Repository()
@javax.annotation.Generated(value = { "Doma", "2.16.1" }, date = "2018-11-12T11:36:24.555+0900")
public class XXXDaoImpl extends org.seasar.doma.internal.jdbc.dao.AbstractDao implements com.example.sample.repository.db.XXXDao {

    static {
        org.seasar.doma.internal.Artifact.validateVersion("2.16.1");
    }

    private static final java.lang.reflect.Method __method0 = org.seasar.doma.internal.jdbc.dao.AbstractDao.getDeclaredMethod(com.example.sample.repository.db.XXXDao.class, "selectById", java.lang.Integer.class, java.lang.Integer.class);

    private static final java.lang.reflect.Method __method1 = org.seasar.doma.internal.jdbc.dao.AbstractDao.getDeclaredMethod(com.example.sample.repository.db.XXXDao.class, "insert", com.example.sample.entity.db.XXX.class);

    private static final java.lang.reflect.Method __method2 = org.seasar.doma.internal.jdbc.dao.AbstractDao.getDeclaredMethod(com.example.sample.repository.db.XXXDao.class, "update", com.example.sample.entity.db.XXX.class);

    private static final java.lang.reflect.Method __method3 = org.seasar.doma.internal.jdbc.dao.AbstractDao.getDeclaredMethod(com.example.sample.repository.db.XXXDao.class, "delete", com.example.sample.entity.db.XXX.class);

    private static final java.lang.reflect.Method __method4 = org.seasar.doma.internal.jdbc.dao.AbstractDao.getDeclaredMethod(com.example.sample.repository.db.XXXDao.class, "selectByCount", java.lang.Integer.class);



    /** */
    public XXXDaoImpl() {
        super(new com.example.sample.config.DomaConfig());
    }

    /**
     * @param config the config
     */
    @org.springframework.beans.factory.annotation.Autowired()
    public XXXDaoImpl(org.seasar.doma.jdbc.Config config) {
        super(config);
    }

    @Override
    public java.util.Optional<com.example.sample.entity.db.XXX> selectById(java.lang.Integer fugaId, java.lang.Integer hogeId) {
        entering("com.example.sample.repository.db.XXXDaoImpl", "selectById", fugaId, hogeId);
        try {
            org.seasar.doma.jdbc.query.SqlFileSelectQuery __query = getQueryImplementors().createSqlFileSelectQuery(__method0);
            __query.setMethod(__method0);
            __query.setConfig(__config);
            __query.setSqlFilePath("META-INF/com/example/sample/repository/db/XXXDao/selectById.sql");
            __query.setEntityType(com.example.sample.entity.db._XXX.getSingletonInternal());
            __query.addParameter("fugaId", java.lang.Integer.class, fugaId);
            __query.addParameter("hogeId", java.lang.Integer.class, hogeId);
            __query.setCallerClassName("com.example.sample.repository.db.XXXDaoImpl");
            __query.setCallerMethodName("selectById");
            __query.setResultEnsured(false);
            __query.setResultMappingEnsured(false);
            __query.setFetchType(org.seasar.doma.FetchType.LAZY);
            __query.setQueryTimeout(-1);
            __query.setMaxRows(-1);
            __query.setFetchSize(-1);
            __query.setSqlLogType(org.seasar.doma.jdbc.SqlLogType.FORMATTED);
            __query.prepare();
            org.seasar.doma.jdbc.command.SelectCommand<java.util.Optional<com.example.sample.entity.db.XXX>> __command = getCommandImplementors().createSelectCommand(__method0, __query, new org.seasar.doma.internal.jdbc.command.OptionalEntitySingleResultHandler<com.example.sample.entity.db.XXX>(com.example.sample.entity.db._XXX.getSingletonInternal()));
            java.util.Optional<com.example.sample.entity.db.XXX> __result = __command.execute();
            __query.complete();
            exiting("com.example.sample.repository.db.XXXDaoImpl", "selectById", __result);
            return __result;
        } catch (java.lang.RuntimeException __e) {
            throwing("com.example.sample.repository.db.XXXDaoImpl", "selectById", __e);
            throw __e;
        }
    }

    :(略)
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

Daoファイル等にSQLの住所等を追記していくことで解消されました。おさわがせしました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る