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

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

新規登録して質問してみよう
ただいま回答率
85.48%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Q&A

解決済

1回答

3114閲覧

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

rinimaruranran

総合スコア36

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

0グッド

0クリップ

投稿2018/11/21 06:46

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

現在、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

Java

1:() 2@Autowired 3 private XXXDao XXXDao; 4@RequestMapping(value = "/sampleData/countData", method = RequestMethod.GET) 5 @CrossOrigin 6 public Optional<XXX> countData() { 7 Integer fugaId = 5447777; 8 Integer hogeId = 10156; 9 Optional<XXX> re = XXXDao.selectById(fugaId, hogeId); 10 return re; 11 } 12:()

#XXX.java

Java

1:() 2/** 3 */ 4@Entity(listener = XXXListener.class) 5@Table(name = "XXX") 6public class XXX { 7 8 /** */ 9 @Id 10 @Column(name = "fuga_id") 11 Integer fugaId; 12 13 /** */ 14 @Column(name = "count_point") 15 Integer countPoint; 16 17 /** */ 18 @Column(name = "create_time") 19 LocalDateTime createTime; 20 21 /** */ 22 @Column(name = "update_time") 23 LocalDateTime updateTime; 24 25 /** 26 * Returns the fugaId. 27 * 28 * @return the fugaId 29 */ 30 public Integer getfugaId() { 31 return fugaId; 32 } 33 34 /** 35 * Sets the fugaId. 36 * 37 * @param fugaId the fugaId 38 */ 39 public void setfugaId(Integer fugaId) { 40 this.fugaId = fugaId; 41 } 42 43 /** 44 * Returns the hogeId. 45 * 46 * @return the hogeId 47 */ 48 public Integer gethogeId() { 49 return hogeId; 50 } 51 52 /** 53 * Sets the hogeId. 54 * 55 * @param hogeId the hogeId 56 */ 57 public void sethogeId(Integer hogeId) { 58 this.hogeId = hogeId; 59 } 60 61 /** 62 * Returns the countPoint. 63 * 64 * @return the countPoint 65 */ 66 public Integer getcountPoint() { 67 return countPoint; 68 } 69 70 /** 71 * Sets the countPoint. 72 * 73 * @param countPoint the countPoint 74 */ 75 public void setcountPoint(Integer countPoint) { 76 this.countPoint = countPoint; 77 } 78 79 /** 80 * Returns the createTime. 81 * 82 * @return the createTime 83 */ 84 public LocalDateTime getCreateTime() { 85 return createTime; 86 } 87 88 /** 89 * Sets the createTime. 90 * 91 * @param createTime the createTime 92 */ 93 public void setCreateTime(LocalDateTime createTime) { 94 this.createTime = createTime; 95 } 96 97 /** 98 * Returns the updateTime. 99 * 100 * @return the updateTime 101 */ 102 public LocalDateTime getUpdateTime() { 103 return updateTime; 104 } 105 106 /** 107 * Sets the updateTime. 108 * 109 * @param updateTime the updateTime 110 */ 111 public void setUpdateTime(LocalDateTime updateTime) { 112 this.updateTime = updateTime; 113 } 114}

#XXXDao.java

Java

1:() 2/** 3 */ 4@ConfigAutowireable 5@Dao(config = DomaConfig.class) 6public interface XXXDao { 7 8 /** 9 * @param fugaId 10 * @param hogeId 11 * @return the XXX entity 12 */ 13 @Select 14 Optional<XXX> selectById(Integer fugaId, Integer hogeId); 15 16 @Select 17 Optional<XXX> selectByCount(Integer hogeId); 18 19 /** 20 * @param entity 21 * @return affected rows 22 */ 23 @Insert 24 int insert(XXX entity); 25 26 /** 27 * @param entity 28 * @return affected rows 29 */ 30 @Update 31 int update(XXX entity); 32 33 /** 34 * @param entity 35 * @return affected rows 36 */ 37 @Delete 38 int delete(XXX entity); 39}

#XXXDaoImpl.java

Java

1 2/** */ 3@org.springframework.stereotype.Repository() 4@javax.annotation.Generated(value = { "Doma", "2.16.1" }, date = "2018-11-12T11:36:24.555+0900") 5public class XXXDaoImpl extends org.seasar.doma.internal.jdbc.dao.AbstractDao implements com.example.sample.repository.db.XXXDao { 6 7 static { 8 org.seasar.doma.internal.Artifact.validateVersion("2.16.1"); 9 } 10 11 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); 12 13 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); 14 15 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); 16 17 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); 18 19 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); 20 21 22 23 /** */ 24 public XXXDaoImpl() { 25 super(new com.example.sample.config.DomaConfig()); 26 } 27 28 /** 29 * @param config the config 30 */ 31 @org.springframework.beans.factory.annotation.Autowired() 32 public XXXDaoImpl(org.seasar.doma.jdbc.Config config) { 33 super(config); 34 } 35 36 @Override 37 public java.util.Optional<com.example.sample.entity.db.XXX> selectById(java.lang.Integer fugaId, java.lang.Integer hogeId) { 38 entering("com.example.sample.repository.db.XXXDaoImpl", "selectById", fugaId, hogeId); 39 try { 40 org.seasar.doma.jdbc.query.SqlFileSelectQuery __query = getQueryImplementors().createSqlFileSelectQuery(__method0); 41 __query.setMethod(__method0); 42 __query.setConfig(__config); 43 __query.setSqlFilePath("META-INF/com/example/sample/repository/db/XXXDao/selectById.sql"); 44 __query.setEntityType(com.example.sample.entity.db._XXX.getSingletonInternal()); 45 __query.addParameter("fugaId", java.lang.Integer.class, fugaId); 46 __query.addParameter("hogeId", java.lang.Integer.class, hogeId); 47 __query.setCallerClassName("com.example.sample.repository.db.XXXDaoImpl"); 48 __query.setCallerMethodName("selectById"); 49 __query.setResultEnsured(false); 50 __query.setResultMappingEnsured(false); 51 __query.setFetchType(org.seasar.doma.FetchType.LAZY); 52 __query.setQueryTimeout(-1); 53 __query.setMaxRows(-1); 54 __query.setFetchSize(-1); 55 __query.setSqlLogType(org.seasar.doma.jdbc.SqlLogType.FORMATTED); 56 __query.prepare(); 57 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())); 58 java.util.Optional<com.example.sample.entity.db.XXX> __result = __command.execute(); 59 __query.complete(); 60 exiting("com.example.sample.repository.db.XXXDaoImpl", "selectById", __result); 61 return __result; 62 } catch (java.lang.RuntimeException __e) { 63 throwing("com.example.sample.repository.db.XXXDaoImpl", "selectById", __e); 64 throw __e; 65 } 66 } 67 68 :() 69}

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

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

投稿2018/11/21 08:37

rinimaruranran

総合スコア36

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問