fastmybatis 2.8.1 发布,本次更新内如下:
/** * … where x.lastname = ?1 and x.firstname = ?2 * @param lastname * @param firstname * @return */ List<Student> findByLastnameAndFirstname(String lastname, String firstname);
@Test public void findByLastnameAndFirstname() { List<Student> users = mapper.findByLastnameAndFirstname("张", "三"); Assert.assertEquals(1, users.size()); users.forEach(System.out::println); }
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
Null
findByAge(Is)Null
… 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%'
EndingWith
findByFirstnameEndingWith
… where x.firstname like '%?1'
Containing
findByFirstnameContaining
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> ages)
… where x.age not in ?1
True
findByActiveTrue()
… where x.active = true
False
findByActiveFalse()
… where x.active = false
IgnoreCase
findByFirstnameIgnoreCase
… where UPPER(x.firstname) = UPPER(?1)
完整测试用例:
/** * 演示JPA findBy查询,根据方法名称自动生成查询语句,无需编写SQL * @author tanghc */ public interface StudentMapper extends CrudMapper<Student, Integer> { /** * … where x.lastname = ?1 and x.firstname = ?2 * @param lastname * @param firstname * @return */ List<Student> findByLastnameAndFirstname(String lastname, String firstname); /** * * … where x.lastname = ?1 or x.firstname = ?2 * @param lastname * @param firstname * @return */ List<Student> findByLastnameOrFirstname(String lastname, String firstname); /** * where x.firstname = ? * @param firstname * @return */ List<Student> findByFirstname(String firstname); List<Student> findByFirstnameIs(String firstname); List<Student> findByFirstnameEquals(String firstname); /** * … where x.startDate between ?1 and ?2 * @param begin * @param end * @return */ List<Student> findByStartDateBetween(Date begin, Date end); /** * … where x.age < ?1 * @param age * @return */ List<Student> findByAgeLessThan(int age); /** * … where x.age <= ?1 * @param age * @return */ List<Student> findByAgeLessThanEqual(int age); /** * … where x.age > ?1 * @param age * @return */ List<Student> findByAgeGreaterThan(int age); /** * … where x.age >= ?1 * @param age * @return */ List<Student> findByAgeGreaterThanEqual(int age); /** * … where x.startDate > ?1 * @param date * @return */ List<Student> findByStartDateAfter(Date date); /** * … where x.startDate < ?1 * @param date * @return */ List<Student> findByStartDateBefore(Date date); /** * … where x.age is null * @return */ List<Student> findByAgeNull(); List<Student> findByAgeIsNull(); /** * … where x.firstname like ?1 * @param firstname * @return * @see #findByFirstnameContaining(String) */ List<Student> findByFirstnameLike(String firstname); /** * … where x.firstname not like ?1 * @param firstname * @return */ List<Student> findByFirstnameNotLike(String firstname); /** * … where x.firstname like 'xx%' * @param firstname * @return */ List<Student> findByFirstnameStartingWith(String firstname); /** * … where x.firstname like '%xx' * @param firstname * @return */ List<Student> findByFirstnameEndingWith(String firstname); /** * 等同于like * … where x.firstname like '%xx%' * @param firstname * @return */ List<Student> findByFirstnameContaining(String firstname); /** * … where x.age = ?1 order by x.lastname desc * @param age * @return */ List<Student> findByAgeOrderByLastnameDesc(int age); /** * … where x.lastname <> ?1 * @param lastname * @return */ List<Student> findByLastnameNot(String lastname); /** * … where x.age in ?1 * * @param ages * @return */ List<Student> findByAgeIn(Collection<Integer> ages); /** * … where x.age not in ?1 * * @param ages * @return */ List<Student> findByAgeNotIn(Collection<Integer> ages); List<Student> findByAgeNotInAndIdIn(Collection<Integer> ages, List<Integer> ids); /** * … where x.active = 1 * @return */ List<Student> findByActiveTrue(); /** * … where x.active = 0 * @return */ List<Student> findByActiveFalse(); /** * … where UPPER(x.firstname) = UPPER(?1) * @param firstname * @return */ List<Student> findByFirstnameIgnoreCase(String firstname); // 复杂的例子 List<Student> findByLastnameOrFirstnameAndIdBetweenOrderByAgeDescIdAsc(String lastname, String firstname, int id1, int id2); }
JPA查询使用注意事项:
关于fastmybatis
fastmybatis是一个mybatis开发框架,其宗旨为:简单、快速、有效。
评论删除后,数据将无法恢复
fastmybatis 2.8.1 发布,支持JPA Query Method查询
fastmybatis 2.8.1 发布,本次更新内如下:
原理:根据方法名称中的关键字自动推导出SQL语
目前实现了大部分功能,参考: JPA Query Method 除了Distinct不支持,其它已全部支持
在Mapper中定义一个方法,以 findBy 开头
使用:
AndfindByLastnameAndFirstname… where x.lastname = ?1 and x.firstname = ?2OrfindByLastnameOrFirstname… where x.lastname = ?1 or x.firstname = ?2Is,EqualsfindByFirstname,findByFirstnameIs,findByFirstnameEquals… where x.firstname = ?1BetweenfindByStartDateBetween… where x.startDate between ?1 and ?2LessThanfindByAgeLessThan… where x.age < ?1LessThanEqualfindByAgeLessThanEqual… where x.age <= ?1GreaterThanfindByAgeGreaterThan… where x.age > ?1GreaterThanEqualfindByAgeGreaterThanEqual… where x.age >= ?1AfterfindByStartDateAfter… where x.startDate > ?1BeforefindByStartDateBefore… where x.startDate < ?1IsNull,NullfindByAge(Is)Null… where x.age is nullIsNotNull,NotNullfindByAge(Is)NotNull… where x.age not nullLikefindByFirstnameLike… where x.firstname like '%?1%'NotLikefindByFirstnameNotLike… where x.firstname not like '%?1%'StartingWithfindByFirstnameStartingWith… where x.firstname like '?1%'EndingWithfindByFirstnameEndingWith… where x.firstname like '%?1'ContainingfindByFirstnameContaining… where x.firstname like '%?1%'OrderByfindByAgeOrderByLastnameDesc… where x.age = ?1 order by x.lastname descNotfindByLastnameNot… where x.lastname <> ?1InfindByAgeIn(Collection<Age> ages)… where x.age in ?1NotInfindByAgeNotIn(Collection<Age> ages)… where x.age not in ?1TruefindByActiveTrue()… where x.active = trueFalsefindByActiveFalse()… where x.active = falseIgnoreCasefindByFirstnameIgnoreCase… where UPPER(x.firstname) = UPPER(?1)完整测试用例:
JPA查询使用注意事项:
关于fastmybatis
fastmybatis是一个mybatis开发框架,其宗旨为:简单、快速、有效。