リポジトリ


SQL ステートメントをより便利に保守および実行するために、JDBC モジュールは、@Repository を介してカスタム SQL またはカスタム SQL ステートメントに注釈を付けるか、構成ファイルから SQL をロードして自動的に実装することができます。

  • @Repository注解自定义SQL或自定义SQL语句或从配置文件中加载SQL并自动执行。

    • @Repository注解:

      • 参数说明:

        dsName:数据源名称,默认为空则采用默认数据源;

        item:从资源文件中加载item指定的配置项,默认为空;

        value:自定义SQL配置(value的优先级高于item);

        type:操作类型,默认为查询,可选值:Type.OPT.QUERY或Type.OPT.UPDATE

    • 存储器示例代码:

      • 存储器:

        @Repository
        public class DemoRepository implements IRepository {
        
            /**
             * 注入SQL配置文件(任意配置对象均可)
             */
            @Inject
            private DefaultRepoConfig _repoCfg;
        
            /**
             * 返回SQL配置文件对象, 若不需要配置文件请不要实现IRepository接口
             */
            public IConfiguration getConfig() {
                return _repoCfg;
            }
        
            /**
             * 自定义SQL
             */
            @Repository("select * from ymcms_attachment where hash = ${hash}")
            public IResultSet<Object[]> getSQLResults(String hash, IResultSet<Object[]> results) throws Exception {
                return results;
            }
        
            /**
             * 读取配置文件中的SQL
             */
            @Repository(item = "demo_query")
            public List<Attachment> getAttachments(String hash, IResultSet<Object[]>... results) throws Exception {
                final List<Attachment> _returnValues = new ArrayList<Attachment>();
                if (results != null && results.length > 0) {
                    ResultSetHelper _help = ResultSetHelper.bind(results[0]);
                    if (_help != null)
                        _help.forEach(new ResultSetHelper.ItemHandler() {
                            @Override
                            public boolean handle(ResultSetHelper.ItemWrapper wrapper, int row) throws Exception {
                                _returnValues.add(wrapper.toEntity(new Attachment()));
                                return true;
                            }
                        });
                }
                return _returnValues;
            }
        }
      • SQL配置文件对象:

        @Configuration("cfgs/default.repo.xml")
        public class DefaultRepoConfig extends DefaultConfiguration {
        }
      • SQL配置文件default.repo.xml内容:

        <?xml version="1.0" encoding="UTF-8"?>
        <properties>
            <category name="default">
                <property name="demo_query">
                    <value><![CDATA[select * from ymcms_attachment where hash = ${hash}]]></value>
                </property>
            </category>
        </properties>
      • 在控制器中调用:在浏览器中访问http://localhost:8080/hello查看执行结果

        @Controller
        @RequestMapping("/hello")
        public class HelloController {
        
            /**
             * 注入存储器
             */
            @Inject
            private DemoRepository _repo;
        
            @RequestMapping("/")
            public IView hello() throws Exception {
                // 调用存储器方法
                return View.jsonView(_repo.getAttachments("44f5b005c7a94a0d42f53946f16b6bb2"));
            }
        }
    • 说明:

      • 存储器类通过声明@Repository注解被框架自动扫描并加载;
      • 与其它被容器管理的@Bean一样支持拦截器、事务、缓存等注解;
      • 存储器类方法的参数至少有一个参数(方法有多个参数时,采用最后一个参数)用于接收SQL执行结果;
      • 查询类型SQL的执行结果数据类型为IResultSet<Object[]>,更新类型SQL的执行结果数据类型为int
      • 用于接收SQL执行结果的方法参数支持变长类型,如:IResultSet<Object[]> resultsIResultSet<Object[]>... results@Repository アノテーション:

        • パラメータの説明:

        dsName: データ ソース名 (デフォルトで空の場合)デフォルトのデータが使用されます。 ソース;

      item: item で指定された構成アイテムをリソース ファイルからロードします。デフォルトは空です。

    • value: カスタム SQL 構成 (値は item よりも優先されます) );

    タイプ: 操作タイプ、デフォルトはクエリ、オプションの値: Type.OPT.QUERY または Type.OPT.UPDATE

🎜🎜🎜
  • 🎜メモリ サンプル コード:

    • 🎜ストレージ:

      rrreee🎜🎜🎜
    • 🎜SQL プロファイル オブジェクト:

      rrreee🎜🎜🎜
    • 🎜SQL Profiledefault.repo.xmlContent:

      rrreee🎜🎜🎜
    • 🎜コントローラーでの呼び出し: http://localhost:8080 にアクセスしてくださいブラウザ /hello実行結果の表示

      rrreee🎜🎜🎜🎜🎜
    • 🎜説明:

      • メモリ クラスは@Repository アノテーションを通じて宣言されたものは、フレームワークによって自動的にスキャンされロードされます。🎜
      • 他のコンテナ管理の @Bean と同様に、インターセプタ、トランザクション、キャッシュ、その他のアノテーションをサポートします。 ; 🎜
      • ストレージ クラスメソッドのパラメータには、SQL 実行結果を受け取るためのパラメータが少なくとも 1 つあります (メソッドに複数のパラメータがある場合は、最後のパラメータが使用されます) 🎜
      • クエリ型の実行結果のデータ型。 SQL は IResultSet<Object[]> ;、更新型 SQL の実行結果のデータ型は int です 🎜
      • SQL 実行結果のサポートに使用されるメソッド パラメータIResultSet<Object []> 結果IResultSet<Object[]>... 結果 などの可変長タイプは同じです。 🎜