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