zoukankan      html  css  js  c++  java
  • S2JDBCタイプセーフAPI

    概要

    SQL自動生成による操作 の 検索条件 や 結合条件 では, SimpleWhereによる指定 や Mapによる指定 ができますが, これらはプロパティ名を文字列で扱うため, 実行するまで名前の間違いに気づきにくくなります. また, プロパティの型と異なる型をパラメータに指定した場合も実行するまで気づきにくくなります.

    S2JDBC のタイプセーフ API を利用すると, プロパティの名前や型の間違いをコンパイル時にチェックできるようになります. タイプセーフ API は, S2JDBC-Gen の Gen-Names タスクで生成される Names クラス と, S2JDBC が提供する Operations クラス によって構成されます. S2JDBC-Gen の Gen-Service タスクによって生成される Service クラス クラスを使うと, タイプセーフ API を容易に利用することができます.

    Names クラス

    Names クラスは, S2JDBC-Gen の Gen-Names タスクによって生成されるクラスで, エンティティのプロパティに対応した static メソッドが定義されます.

    Names クラスのメソッドを static import して使うと, SimpleWhere を使った次の例は,

    jdbcManager.from(Employee.class)
       
    .innerJoin("department")
       
    .where(newSimpleWhere()
           
    .eq("name", name)
           
    .eq("department.name", deptName)
       
    .getResultList();

    次のようになります.

    jdbcManager.from(Employee.class)
       
    .innerJoin(department())
       
    .where(newSimpleWhere()
           
    .eq(name(), name)
           
    .eq(department().name(), deptName))
       
    .getResultList();

    name() や department() が static import された Names クラスのメソッドです. メソッド名が間違っているとコンパイルでエラーとなるため,実行する前に間違いを見つけることができます. また,IDE で補完できるため, 入力も容易になります ( Eclipse で static import を使う場合の設定について ).

    関連先のプロパティは department().name() のように指定します. ネストは何段階でも無制限に指定可能です.

    注意事項

    SimpleWhere クラスを使った場合,プロパティの型とパラメータの値の整合性はチェックされません. タイプセーフに使うには, SimpleWhere クラスではなく, 後述の Operations クラス を使用してください.

    Operations クラス

    Operations クラスは S2JDBC が提供するクラスで,FQNは次のとおりです.

    • org.seasar.extension.jdbc.operation.Operations

    Operations クラスは SimpleWhere クラスと同じようなメソッドを static メソッドとして提供します. Operations クラスのメソッドを static import し, Names クラスと組み合わせて使用することで, プロパティの型とパラメータの型が適合していることをコンパイル時にチェックすることができます ( Eclipse で static import を使う場合の設定について ).

    SimpleWhere クラスを使った次の例は,

    jdbcManager.from(Employee.class)
       
    .where(newSimpleWhere()
           
    .eq("name", name)
           
    .gt("salary", salary))
       
    .getResultList();

    Operations クラスのメソッドを static import して使うと次のようになります.

    jdbcManager.from(Employee.class)
       
    .where(
            eq
    (name(), name),
            gt
    (salary(), salary))
       
    .getResultList();

    eq() メソッドや gt() メソッドが Operations クラスのメソッドです. eq() メソッドなどは次のように定義されています.

    • public static <PropType, ParamType extends PropType>
      SingleValueOperator eq(PropertyName<PropType> propertyName, ParamType param)

    Names クラスのメソッドは, プロパティの型を型引数とする PropertyName 型を返すように定義されているため, プロパティの型にパラメータの型が代入可能でないとコンパイルでエラーとなります.

    Operations クラスには次のメソッドが定義されています.

    メソッド説明
    eq(PropertyName<PropType> propertyName, ParamType param) propertyName = ? の条件を追加します. param が null の時は追加されません.
    ne(PropertyName<PropType> propertyName, ParamType param) propertyName <> ? の条件を追加します. param が null の時は追加されません.
    lt(PropertyName<PropType> propertyName, ParamType param) propertyName < ? の条件を追加します. param が null の時は追加されません.
    le(PropertyName<PropType> propertyName, ParamType param) propertyName <= ? の条件を追加します. param が null の時は追加されません.
    gt(PropertyName<PropType> propertyName, ParamType param) propertyName > ? の条件を追加します. param が null の時は追加されません.
    ge(PropertyName<PropType> propertyName, ParamType param) propertyName >= ? の条件を追加します. param が null の時は追加されません.
    in(PropertyName<PropType> propertyName, ParamType... params) propertyName in (?, ...) の条件を追加します. param の配列の長さが 0 の時は追加されません.
    not in(PropertyName<PropType> propertyName, ParamType... params) propertyName not in (?, ...) の条件を追加します. param の配列の長さが 0 の時は追加されません.
    like(PropertyName<String> propertyName, String param) propertyName like ? の条件を追加します. param が null の時は追加されません.
    like(PropertyName<String> propertyName, String param, char escape) propertyName like ? escape ? の条件を追加します. param が null の時は追加されません.
    starts(PropertyName<String> propertyName, String param) propertyName like ? の条件を追加します. param が null の時は追加されません. paramの末尾に自動的に % が追加されます. param に半角の '%', '_' や全角の '%', '_' が含まれる場合はエスケープされます.
    ends(PropertyName<String> propertyName, String param) propertyName like ? の条件を追加します. param が null の時は追加されません. paramの先頭に自動的に % が追加されます. param に半角の '%', '_' や全角の '%', '_' が含まれる場合はエスケープされます.
    contains(PropertyName<String> propertyName, String param) propertyName like ? の条件を追加します. param が null の時は追加されません. paramの先頭と末尾に自動的に % が追加されます. param に半角の '%', '_' や全角の '%', '_'が含まれる場合はエスケープされます.
    isNull(PropertyName<?> propertyName) propertyName is null の条件を追加します.
    isNull(PropertyName<?> propertyName, Boolean param) propertyName is null の条件を追加します. param が null あるいは Boolean.FALSE の時は追加されません。
    isNotNull(PropertyName<?> propertyName) propertyName is not null の条件を追加します.
    isNotNull(PropertyName<?> propertyName, Boolan param) propertyName is not null の条件を追加します. param が null あるいは Boolean.FALSE の時は追加されません。
    and(Where... children) 子供の検索条件を AND で結合した条件を追加します.
    or(Where... children) 子供の検索条件を OR で結合した条件を追加します.

    ソート順 で利用するために,以下のメソッドも定義されています.

    メソッド説明
    asc(CharSequence propertyName) 昇順のソート順を返します.
    desc(CharSequence propertyName) 降順のソート順を返します.

    これらのメソッドを使うと,次の例は,

    jdbcManager.from(Employee.class)
       
    .leftOuterJoin("department")
       
    .orderBy("department.name DESC, name")
       
    .getResultList();

    次のようになります.

    jdbcManager.from(Employee.class)
       
    .leftOuterJoin(department())
       
    .orderBy(desc(department().name()), asc(name()))
       
    .getResultList();

    Service クラス

    Service クラスは, S2JDBC-Gen の Gen-Service タスクによって生成されるクラスです. 対応するエンティティの names クラスおよび Operations の static メソッドがあらかじめ static import されているため, タイプセーフ API をすぐに利用することができます. Service クラスにあらかじめ生成されている findAllOrderById() メソッドの実装には, タイプセーフ API が使われています.

        publicList<Emp> findAllOrderById(){
           
    returnselect().orderBy(asc(id())).getResultList();
       
    }
  • 相关阅读:
    WordPress fonts.useso.com加载慢解决办法
    ecshop 需要修改权限的文件夹及文件
    手机前端框架UI库(Frozen UI、WeUI、SUI Mobile)
    apache2配置rewrite_module
    wordpress htaccess伪静态设置
    linux whereis 快速查找命令
    Linux下的PS和grep的使用
    [转]group by 后使用 rollup 子句总结
    Maven配置国内镜像仓库
    清除电脑垃圾.bat
  • 原文地址:https://www.cnblogs.com/aggavara/p/2726428.html
Copyright © 2011-2022 走看看