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")); } }
说明:
item : charge l'élément de configuration spécifié par élément à partir du fichier de ressources, la valeur par défaut est vide ;- 存储器类通过声明
@Repository
注解被框架自动扫描并加载; - 与其它被容器管理的
@Bean
一样支持拦截器、事务、缓存等注解; - 存储器类方法的参数至少有一个参数(方法有多个参数时,采用最后一个参数)用于接收SQL执行结果;
- 查询类型SQL的执行结果数据类型为
IResultSet<Object[]>
,更新类型SQL的执行结果数据类型为int
; - 用于接收SQL执行结果的方法参数支持变长类型,如:
IResultSet<Object[]> results
和IResultSet<Object[]>... results
@Annotation du référentiel :- Description du paramètre :
valeur : configuration SQL personnalisée (la valeur a une priorité plus élevée que l'élément );- 存储器类通过声明
- 🎜Stockage :rrreee🎜🎜🎜
- 🎜Objet de profil SQL :
rrreee🎜🎜🎜- 🎜SQL Profil
default.repo.xml
Contenu :rrreee🎜🎜🎜- 🎜Appel dans le contrôleur : visitez
http://localhost:8080 dans le navigateur /bonjour
Afficher les résultats d'exécutionrrreee🎜🎜🎜🎜🎜- 🎜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 estint
; 🎜 - 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 []>
etIResultSet<Object[]>...
sont les mêmes ; 🎜
- 🎜Objet de profil SQL :