저장소
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")); } }
说明:
item: 리소스 파일에서 항목으로 지정된 구성 항목을 로드합니다. 기본값은 비어 있습니다.- 存储器类通过声明
@Repository
注解被框架自动扫描并加载; - 与其它被容器管理的
@Bean
一样支持拦截器、事务、缓存等注解; - 存储器类方法的参数至少有一个参数(方法有多个参数时,采用最后一个参数)用于接收SQL执行结果;
- 查询类型SQL的执行结果数据类型为
IResultSet<Object[]>
,更新类型SQL的执行结果数据类型为int
; - 用于接收SQL执行结果的方法参数支持变长类型,如:
IResultSet<Object[]> results
和IResultSet<Object[]>... results
@Repository 주석:- 매개변수 설명:
value: 사용자 정의 SQL 구성(값이 항목보다 우선순위가 높습니다. );- 存储器类通过声明
- 🎜저장소:rrreee🎜🎜🎜
- 🎜SQL 프로필 개체:
rrreee🎜🎜🎜- 🎜SQL 프로필
default.repo.xml
콘텐츠:rrreee🎜🎜🎜- 🎜컨트롤러에서 호출:
http://localhost:8080을 방문하세요. 브라우저 /hello
실행 결과 보기rrreee🎜🎜🎜🎜🎜- 🎜설명:
- 메모리 클래스는 다음과 같습니다.
@Repository
를 통해 선언된 주석은 프레임워크에 의해 자동으로 스캔되고 로드됩니다. 🎜 - 다른 컨테이너 관리
@Bean
과 마찬가지로 인터셉터, 트랜잭션, 캐시 및 기타 주석을 지원합니다. ; 🎜 - 저장 클래스 메소드의 매개변수에는 SQL 실행 결과를 받기 위한 매개변수가 하나 이상(메서드에 매개변수가 여러 개 있는 경우 마지막 매개변수 사용)이 있습니다. 🎜
- 쿼리 유형의 실행 결과 데이터 유형입니다. SQL은
IResultSet
이고, 업데이트 유형 SQL의 실행 결과 데이터 유형은int
입니다. 🎜 - SQL 실행 결과 지원을 받는 데 사용되는 메소드 매개변수입니다.
IResultSet
및IResultSet
- 🎜SQL 프로필 개체: