之前的开发中,数据库操作中间件一直都是在使用myBatis,在使用它之前,其实也一直在使用JPA,Hibernate之流,但是自从用了myBatis后,就彻底进入myBatis的怀抱了,它的高效、灵活更是让我一直欲罢不能,当然,其肯定也存在一些不足,比如不支持自动表创建,需要自己写大量的SQL等等,不过这些也都可以克服,得,闲话少叙,还是赶紧进入正题吧。
最近接了个项目(有源代码,在源码基础上进行二次开发),项目的数据库中间件采用过的便是 spring-data-jpa,经过几天时间的研究,发现用起来的确很方便,熟悉JPA的人应该很快就能上手,其实它就是在JPA的上层,又做了一下深入的封装,比如:findByUsernameAndPassword(String username,String password),,jpa会直接解析你的方法名,find ==》select * , ByUsernameAndPassword ==》where username= :username and password=:password ,更是大大降低了开发难度,提高了开发效率。
关键字 | 示例 | JPQL 片段 |
---|---|---|
And | findByLastnameAndFirstname | … where x.lastname = ?1 and x.firstname = ?2 |
Or | findByLastnameOrFirstname | … where x.lastname = ?1 or x.firstname = ?2 |
Is,Equals | findByFirstname,findByFirstnameIs,findByFirstnameEquals | … where x.firstname = 1? |
Between | findByStartDateBetween | … where x.startDate between 1? and ?2 |
LessThan | findByAgeLessThan | … where x.age < ?1 |
LessThanEqual | findByAgeLessThanEqual | … where x.age <= ?1 |
GreaterThan | findByAgeGreaterThan | … where x.age > ?1 |
GreaterThanEqual | findByAgeGreaterThanEqual | … where x.age >= ?1 |
After | findByStartDateAfter | … where x.startDate > ?1 |
Before | findByStartDateBefore | … where x.startDate < ?1 |
IsNull | findByAgeIsNull | … where x.age is null |
IsNotNull,NotNull | findByAge(Is)NotNull | … where x.age not null |
Like | findByFirstnameLike | … where x.firstname like ?1 |
NotLike | findByFirstnameNotLike | … where x.firstname not like ?1 |
StartingWith | findByFirstnameStartingWith | … where x.firstname like ?1 (parameter bound with appended % ) |
EndingWith | findByFirstnameEndingWith | … where x.firstname like ?1 (parameter bound with prepended % ) |
Containing | findByFirstnameContaining | … where x.firstname like ?1 (parameter bound wrapped in % ) |
OrderBy | findByAgeOrderByLastnameDesc | … where x.age = ?1 order by x.lastname desc |
Not | findByLastnameNot | … where x.lastname <> ?1 |
In | findByAgeIn(Collection<Age> ages) | … where x.age in ?1 |
NotIn | findByAgeNotIn(Collection<Age> age) | … where x.age not in ?1 |
True | findByActiveTrue() | … where x.active = true |
False | findByActiveFalse() | … where x.active = false |
IgnoreCase | findByFirstnameIgnoreCase | … where UPPER(x.firstame) |