SQLは、Mapセットまたはオブジェクトの操作に戻ります。
必要:
下のsqlでsum関数とcount関数を返したいです。二つの戻り値は表のフィールドではないので、ここで考慮したいのは私のsql戻り値のタイプは何ですか?
日常の開発において、このような問題に遭遇した場合、まず二つの戻り値タイプを考えます。一つはtotalとnumをkeyに設定して、mapにカプセル化します。
もう一つは一つのオブジェクトをカプセル化して、totalとnumをこのオブジェクトの2つのメンバー変数に設定します。以下では、この2つの方法を使って階層開発における各層の使い方を説明します。
方法1:戻り値タイプとしてオブジェクトを使用する
1.まず一つのオブジェクトをパッケージ化する
このオブジェクトのnumとtotalの2つのメンバー変数が私達sql文の中の2つの戻り値です。(totalはsum関数の別名で、numはcount関数の別名です。)
2.controller層
controller層では、この行のコードは最終的に上のsql文を使ってデータベースとインタラクションしています。彼の戻り値のタイプはRedPackCountBoで、つまり私達がカプセル化した対象です。
3.service層
service層の戻り値もこの対象ですので、詳細には説明しません。
4.serviceImpl層
5.mapper.java層
6.mapper.xml層(重点)
この方法を使えば、私達はtotalとNumを対象としてcontroller層に戻ります。この二つの値を使うところで直接に対象を使って値を取る方式で取得すればいいです。
ここでもう一つお願いします。
以上のパラメータをsql文に渡す必要がある場合は、@param()を使ってmapセットに注釈またはパッケージしてsqlに送ることができます。ここで三つのパラメータを渡しましたが、mapを使ってパラメータをパッケージ化しますので、sql文のparameterTypeはjava.util.Mapです。
方法2:戻り値タイプとしてMapを使う
1.co.ntroller層
2.service層
3.serviceImpl層
4.mapper.java層
5.mapper.xml層
この方法で需要も実現できますが、一つの対象(つまり方法一)を封じ込めて使うほうがより快適だと思います。パッケージのmapはあなたの最終需要のデータの種類によって一連のデータのタイプが変わるかもしれません。java.lang.classCastException(タイプ変換異常)が現れるかもしれません。
私はmapを戻り値タイプとして使う時、データベースから戻ってきたcount関数値(つまりnum)のデータタイプはLong型、sum関数(つまりtotal)の戻り値タイプはBigDecimalタイプ(Objectのget Classを使ってデータタイプを見ることができます)で、また自分でタイプ転換をしました。
以上は個人の経験ですので、参考にしていただければと思います。
下のsqlでsum関数とcount関数を返したいです。二つの戻り値は表のフィールドではないので、ここで考慮したいのは私のsql戻り値のタイプは何ですか?
日常の開発において、このような問題に遭遇した場合、まず二つの戻り値タイプを考えます。一つはtotalとnumをkeyに設定して、mapにカプセル化します。
もう一つは一つのオブジェクトをカプセル化して、totalとnumをこのオブジェクトの2つのメンバー変数に設定します。以下では、この2つの方法を使って階層開発における各層の使い方を説明します。
方法1:戻り値タイプとしてオブジェクトを使用する
1.まず一つのオブジェクトをパッケージ化する
このオブジェクトのnumとtotalの2つのメンバー変数が私達sql文の中の2つの戻り値です。(totalはsum関数の別名で、numはcount関数の別名です。)
2.controller層
controller層では、この行のコードは最終的に上のsql文を使ってデータベースとインタラクションしています。彼の戻り値のタイプはRedPackCountBoで、つまり私達がカプセル化した対象です。
3.service層
service層の戻り値もこの対象ですので、詳細には説明しません。
4.serviceImpl層
5.mapper.java層
6.mapper.xml層(重点)
この方法を使えば、私達はtotalとNumを対象としてcontroller層に戻ります。この二つの値を使うところで直接に対象を使って値を取る方式で取得すればいいです。
ここでもう一つお願いします。
以上のパラメータをsql文に渡す必要がある場合は、@param()を使ってmapセットに注釈またはパッケージしてsqlに送ることができます。ここで三つのパラメータを渡しましたが、mapを使ってパラメータをパッケージ化しますので、sql文のparameterTypeはjava.util.Mapです。
方法2:戻り値タイプとしてMapを使う
1.co.ntroller層
2.service層
3.serviceImpl層
4.mapper.java層
5.mapper.xml層
この方法で需要も実現できますが、一つの対象(つまり方法一)を封じ込めて使うほうがより快適だと思います。パッケージのmapはあなたの最終需要のデータの種類によって一連のデータのタイプが変わるかもしれません。java.lang.classCastException(タイプ変換異常)が現れるかもしれません。
私はmapを戻り値タイプとして使う時、データベースから戻ってきたcount関数値(つまりnum)のデータタイプはLong型、sum関数(つまりtotal)の戻り値タイプはBigDecimalタイプ(Objectのget Classを使ってデータタイプを見ることができます)で、また自分でタイプ転換をしました。
以上は個人の経験ですので、参考にしていただければと思います。