Dépôt


Afin de maintenir et d'exécuter les instructions SQL plus facilement, le module JDBC fournit une prise en charge de la mémoire. Vous pouvez annoter du SQL personnalisé ou des instructions SQL personnalisées via @Repository ou charger SQL à partir du fichier de configuration et l'implémenter automatiquement.

  • @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@Annotation du référentiel :

        • Description du paramètre :

        dsName : Nom de la source de données, s'il est vide par défaut, les données par défaut seront utilisées Source ;

      item : charge l'élément de configuration spécifié par élément à partir du fichier de ressources, la valeur par défaut est vide ;

    • valeur : configuration SQL personnalisée (la valeur a une priorité plus élevée que l'élément );

    type : type d'opération, la valeur par défaut est requête, valeur facultative : Type.OPT.QUERY ou Type.OPT.UPDATE

🎜🎜🎜
  • 🎜Exemple de code mémoire :

    • 🎜Stockage :

      rrreee🎜🎜🎜
    • 🎜Objet de profil SQL :

      rrreee🎜🎜🎜
    • 🎜SQL Profil default.repo.xmlContenu :

      rrreee🎜🎜🎜
    • 🎜Appel dans le contrôleur : visitez http://localhost:8080 dans le navigateur /bonjourAfficher les résultats d'exécution

      rrreee🎜🎜🎜🎜🎜
    • 🎜Description :

      • La classe mémoire est déclarées via @Repository, les annotations sont automatiquement analysées et chargées par le framework 🎜
      • Comme les autres @Bean gérés par des conteneurs, il prend en charge les intercepteurs, les transactions, le cache et d'autres annotations ; ; 🎜
      • Stockage Les paramètres de la méthode de classe ont au moins un paramètre (lorsque la méthode a plusieurs paramètres, le dernier paramètre est utilisé) pour recevoir le résultat de l'exécution SQL 🎜
      • Le type de données du résultat de l'exécution du type de requête ; SQL est IResultSet<Object[]> ;, le type de données de résultat d'exécution du type de mise à jour SQL est int ; 🎜
      • Les paramètres de méthode utilisés pour recevoir la prise en charge des résultats d'exécution SQL ; les types de longueur variable, tels que : les résultats IResultSet<Object []> et IResultSet<Object[]>... sont les mêmes ; 🎜