Repository 接口是 Spring Data JPA 中为我我们提供的所有接口中的顶层接口 Repository 提供了两种查询方式的支持
1)基于方法名称命名规则查询
2)基于@Query 注解查询
方法名称命名规则查询
语法格式:
规则:findBy(关键字)+属性名称(属性名称的首字母大写)+查询条件(首字母大写)
And 并且
Or 或
Is,Equals 等于
Between 两者之间
LessThan 小于
LessThanEqual 小于等于
GreaterThan 大于
GreaterThanEqual 大于等于
After 之后(时间)>
Before 之前(时间)<
IsNull 等于Null
IsNotNull,NotNull 不等于Null
Like 模糊查询。查询件中需要自己加%
NotLike 不在模糊范围内。查询件中需要自己加%
StartingWith 以某开头
EndingWith 以某结束
Containing 包含某
OrderBy 排序
Not 不等于
In 某范围内
NotIn 某范围外
TRUE 真
FALSE 假
IgnoreCase 忽略大小写
实例演示
1.首先配置文件内要配置JPA的命名空间,配置dao扫描的包
2.方法的命名规范
方法关键字+属性名称+差选的规则
SpringData 会根据方法的命名解析出来这个的方法是干什么的,并生成对象的SQL语句
优点:
对于简单的查询只要根据一定的命名规则即可实现
缺点:
对于复杂的条件查询,则方法名字的命名过长
解决:
使用@Query注解解决
/**
* @project_name:hibernate02
* @date:2019/8/20:11:01
* @author:shinelon
* @Describe:
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:ApplicationContext-hib.xml")
public class ReponitoryTest {
@Autowired
private UsersDao userDao;
/**
* 大于
*/
@Test
public void test3(){
List<Users> list = this.userDao.findByUseridGreaterThanEqual(2);
for (Users u :
list) {
System.out.println(u);
}
}
/**
* 模糊查询
*/
@Test
public void test2(){
List<Users> list = this.userDao.findByUsernameLike("1%");
for (Users u :
list) {
System.out.println(u);
}
}
/**
* 多个条件查询
*/
@Test
public void test1(){
List<Users> list = this.userDao.findByUsernameIsAndPasswordIs("123", "1234");
for (Users u :
list) {
System.out.println(u);
}
}
/**
* 查询名字等于
*/
@Test
public void test(){
List<Users> list = this.userDao.findByUsernameIs("123");
for (Users u :
list) {
System.out.println(u);
}
}
}
dao接口
/**
* @project_name:hibernate02
* @date:2019/8/20:10:56
* @author:shinelon
* @Describe:
* Users:代表操作的表实体对象
* Integer:主键的类型
*/
public interface UsersDao extends Repository<Users,Integer> {
List<Users> findByUsernameIs(String s);
List<Users> findByUsernameIsAndPasswordIs(String s, String s1);
List<Users> findByUsernameLike(String s);
List<Users> findByUseridGreaterThanEqual(Integer i);
}
大于