W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
為了能夠更方便的維護和執(zhí)行SQL語句,JDBC模塊提供了存儲器的支持,可以通過@Repository
注解自定義SQL或自定義SQL語句或從配置文件中加載SQL并自動執(zhí)行。
@Repository注解:
參數(shù)說明:
dsName:數(shù)據(jù)源名稱,默認為空則采用默認數(shù)據(jù)源;
item:從資源文件中加載item指定的配置項,默認為空;
value:自定義SQL配置(value的優(yōu)先級高于item);
type:操作類型,默認為查詢,可選值:Type.OPT.QUERY或Type.OPT.UPDATE
存儲器示例代碼:
存儲器:
@Repository public class DemoRepository implements IRepository { /** * 注入SQL配置文件(任意配置對象均可) */ @Inject private DefaultRepoConfig _repoCfg; /** * 返回SQL配置文件對象, 若不需要配置文件請不要實現(xiàn)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
內(nèi)容:
<?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>
在控制器中調(diào)用:在瀏覽器中訪問http://localhost:8080/hello
查看執(zhí)行結(jié)果
@Controller @RequestMapping("/hello") public class HelloController { /** * 注入存儲器 */ @Inject private DemoRepository _repo; @RequestMapping("/") public IView hello() throws Exception { // 調(diào)用存儲器方法 return View.jsonView(_repo.getAttachments("44f5b005c7a94a0d42f53946f16b6bb2")); } }
說明:
- 存儲器類通過聲明
@Repository
注解被框架自動掃描并加載;- 與其它被容器管理的
@Bean
一樣支持攔截器、事務、緩存等注解;- 存儲器類方法的參數(shù)至少有一個參數(shù)(方法有多個參數(shù)時,采用最后一個參數(shù))用于接收SQL執(zhí)行結(jié)果;
- 查詢類型SQL的執(zhí)行結(jié)果數(shù)據(jù)類型為
IResultSet<Object[]>
,更新類型SQL的執(zhí)行結(jié)果數(shù)據(jù)類型為int
;- 用于接收SQL執(zhí)行結(jié)果的方法參數(shù)支持變長類型,如:
IResultSet<Object[]> results
和IResultSet<Object[]>... results
是一樣的;
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: