spring jpa data 原理

http://my.oschina.net/xdev/blog/126049非常好
http://wenku.baidu.com/link?url=oHcFoWe1rzconY2i9fYiyL6kypHA6EgJh56FQ6gBT7xPezSzJfb6axmufqnhMRIAO3I9N2o7uSW0XXz0fb-W79XrgYd4X22irVT0rylJHsu
http://wenku.baidu.com/link?url=oHcFoWe1rzconY2i9fYiyL6kypHA6EgJh56FQ6gBT7xPezSzJfb6axmufqnhMRIAO3I9N2o7uSW0XXz0fb-W79XrgYd4X22irVT0rylJHsu
http://blog.csdn.net/itpinpai/article/details/8247728
http://www.cnblogs.com/xiaoluo501395377/p/3383130.html
http://bbs.csdn.net/topics/390346645
http://bbs.csdn.net/topics/390346645


http://www.ibm.com/developerworks/cn/opensource/os-cn-spring-jpa/
通过解析方法名创建查询
通过前面的例子,读者基本上对解析方法名创建查询的方式有了一个大致的了解,这也是 Spring Data JPA 吸引开发者的一个很重要的因素。该功能其实并非 Spring Data JPA 首创,而是源自一个开源的 JPA 框架 Hades,该框架的作者 Oliver Gierke 本身又是 Spring Data JPA 项目的 Leader,所以把 Hades 的优势引入到 Spring Data JPA 也就是顺理成章的了。
框架在进行方法名解析时,会先把方法名多余的前缀截取掉,比如 find、findBy、read、readBy、get、getBy,然后对剩下部分进行解析。并且如果方法的最后一个参数是 Sort 或者 Pageable 类型,也会提取相关的信息,以便按规则进行排序或者分页查询。
在创建查询时,我们通过在方法名中使用属性名称来表达,比如 findByUserAddressZip ()。框架在解析该方法时,首先剔除 findBy,然后对剩下的属性进行解析,详细规则如下(此处假设该方法针对的域对象为 AccountInfo 类型):
先判断 userAddressZip (根据 POJO 规范,首字母变为小写,下同)是否为 AccountInfo 的一个属性,如果是,则表示根据该属性进行查询;如果没有该属性,继续第二步;
从右往左截取第一个大写字母开头的字符串(此处为 Zip),然后检查剩下的字符串是否为 AccountInfo 的一个属性,如果是,则表示根据该属性进行查询;如果没有该属性,则重复第二步,继续从右往左截取;最后假设 user 为 AccountInfo 的一个属性;
接着处理剩下部分( AddressZip ),先判断 user 所对应的类型是否有 addressZip 属性,如果有,则表示该方法最终是根据 "AccountInfo.user.addressZip" 的取值进行查询;否则继续按照步骤 2 的规则从右往左截取,最终表示根据 "AccountInfo.user.address.zip" 的值进行查询。
可能会存在一种特殊情况,比如 AccountInfo 包含一个 user 的属性,也有一个 userAddress 属性,此时会存在混淆。读者可以明确在属性之间加上 "_" 以显式表达意图,比如 "findByUser_AddressZip()" 或者 "findByUserAddress_Zip()"。





http://www.tuicool.com/articles/uyYZraF

猜你喜欢

转载自jackleechina.iteye.com/blog/2297889