-
Hello 各位大佬们 问一个弱鸡的小问题: 问题描述:com.ctrip.framework.apollo.biz.repository.ReleaseMessageRepository#findFirst500ByIdGreaterThanOrderByIdAsc这个方法在没有实例类的情况下,是怎么抓取到数据库中的值的? 背景:在阅读ReleaseMessage的相关实现的源码的时候,com.ctrip.framework.apollo.biz.message.ReleaseMessageScanner#scanAndSendMessages /**
* scan messages and send
*
* @return whether there are more messages
*/
private boolean scanAndSendMessages() {
//current batch is 500
List<ReleaseMessage> releaseMessages =
releaseMessageRepository.findFirst500ByIdGreaterThanOrderByIdAsc(maxIdScanned);
if (CollectionUtils.isEmpty(releaseMessages)) {
return false;
}
fireMessageScanned(releaseMessages);
int messageScanned = releaseMessages.size();
maxIdScanned = releaseMessages.get(messageScanned - 1).getId();
return messageScanned == 500;
} 系统运行一切正常,但是 releaseMessageRepository.findFirst500ByIdGreaterThanOrderByIdAsc(maxIdScanned)我没有找到对应的实现类。这个方法是怎么实现从数据库获取数据的? 个人推测经过调查,大概推测是使用了AOP技术,利用方法名findFirst500ByIdGreaterThanOrderByIdAsc的字符串,进行相应的断句,自动拼接到SQL中。 但是没有找到支持上述推测的具体实现代码。 我想问的还请各位大佬们指点一二,这个从数据库中获取数据方法的方式在Apollo中挺常见的。 如果我猜测正确,可否指点小弟一下,这个解析方法名字符串的类在哪里?是在初始化时候解析,还是在调用的时候利用反射解析?如果小弟猜测不正确,也麻烦大佬们指点一下这个接口是如何实现的? |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 2 replies
-
这是 对象关系映射(Object-Relational Mapping,简称ORM)技术 https://hibernate.org/ 是其中的一种实现 简单来说,可以理解成有个地方的代码,根据方法名,动态生成了SQL,涉及到运行时代码生成等技术 不知道这样是否可以解答你的疑惑? |
Beta Was this translation helpful? Give feedback.
这是 对象关系映射(Object-Relational Mapping,简称ORM)技术
https://hibernate.org/ 是其中的一种实现
简单来说,可以理解成有个地方的代码,根据方法名,动态生成了SQL,涉及到运行时代码生成等技术
不知道这样是否可以解答你的疑惑?