spring-boot-starter-data-redis 2.1 以上支持以repository的方式存取对象了。
1,导入依赖包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2,定义实体
@Data
public class Cat {
//在需要条件查询的字段上加上@Indexed
@Indexed
private String name;
private String color;
}
@Data
@ToString
@RedisHash(value = "user")
public class TUser {
@Id
private String id;
//在需要条件查询的字段上加上@Indexed
@Indexed
private String name;
private String password;
private Cat cat;
}
3,定义repository
支持方法名和example查询,前提查询字段必须是加了@Index注解。
public interface UserDao extends CrudRepository<TUser,String>,QueryByExampleExecutor<TUser> {
TUser findByName(String name);
}
4,新增,查询测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisDemoApplicationTests {
@Autowired
private UserDao userDao;
@Test
public void save() {
Cat cat = new Cat();
cat.setColor("hongse");
cat.setName("小狗");
TUser user = new TUser();
user.setId("2");
user.setName("haha");
user.setPassword("heiheihei");
user.setCat(cat);
userDao.save(user);
}
@Test
public void findOne(){
TUser user = userDao.findById("2").get();
System.out.println(user);
}
@Test
public void findByExample(){
TUser user = new TUser();
Cat cat = new Cat();
cat.setName("花花");
user.setCat(cat);
System.out.println(userDao.findOne(Example.of(user)));
}
@Test
public void findByName(){
System.out.println(userDao.findByName("hahaha"));
}
}
5,Example查询局限
官方文档的一段话。
The following list shows properties not supported by Query by Example:
Case-insensitive matching
Regex, prefix/contains/suffix String-matching
Querying of Associations, Collection, and Map-like properties
Inclusion of null values from the criteria
findAll with sorting
可见对于list,map里包含对象的example查询,是无效的。