-
pom依赖
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-cassandra --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-cassandra</artifactId> </dependency> -
yml配置
spring: data: cassandra: contact-points: xxxxx port: xxxx keyspaceName: xxxx local-datacenter: datacenter1 -
实现类代码
import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.cassandra.core.CassandraTemplate; import org.springframework.data.cassandra.core.query.CassandraPageRequest; import org.springframework.data.cassandra.core.query.Criteria; import org.springframework.data.cassandra.core.query.Query; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Slice; import org.springframework.stereotype.Service; import java.nio.ByteBuffer; import java.util.List; import java.util.Objects; @Service @Slf4j public class UserServiceImpl implements UserService { @Autowired private CassandraTemplate cassandraTemplate; @Override public List<User> getAll() { return cassandraTemplate.select(Query.query(), User.class); } @Override public Slice<User> getByPage(ByteBuffer pageable, Integer pageSize) { //不支持查询时候排序,想对聚簇列做 ORDER BY,就必须在 WHERE 子句里把“整个分区键”用 = 或 IN 限定死。 //Cassandra 不支持跨分区全局排序。 Query query = Query.query(); PageRequest pageRequest; if (Objects.isNull(pageable)) { pageRequest = CassandraPageRequest.first(pageSize); } else { pageRequest = CassandraPageRequest.of(CassandraPageRequest.first(pageSize), pageable); } Query criteriaDefinitions = query.pageRequest(pageRequest); return cassandraTemplate.slice(criteriaDefinitions, User.class); } @Override public User getById(int id) { return cassandraTemplate.selectOne(Query.query(Criteria.where("id").is(id)), User.class); } @Override public List<User> getByName(String name) { //查询必须是索引字段才行,必须是精准查询 //如果要模糊查询等等,需要建立sai索引,需要在cassandra中配置sai索引开启 return cassandraTemplate.select(Query.query(Criteria.where("name").is(name)), User.class); } /** * 添加用户 * * @param user * @return */ @Override public User addUser(User user) { return cassandraTemplate.insert(user); } /** * 删除用户 * * @param id * @return */ @Override public boolean deleteUser(int id) { return cassandraTemplate.delete(Query.query(Criteria.where("id").is(id)), User.class); } /** * 修改用户 * * @param user * @return */ @Override public User updateUser(User user) { return cassandraTemplate.update(user); } -
调用
@Autowired private UserService userService; @Autowired private ObjectMapper objectMapper; @SneakyThrows @Test void contextLoads() { List<User> all = userService.getAll(); log.info("all: {}", objectMapper.writeValueAsString(all)); log.info("size: {}", all.size()); } @SneakyThrows @Test void test1(){ User user = userService.getById(1); log.info("user: {}", objectMapper.writeValueAsString(user)); } @SneakyThrows @Test void test2(){ List<User> user = userService.getByName("z5"); log.info("user: {}", objectMapper.writeValueAsString(user)); log.info("size: {}", user.size()); } @SneakyThrows @Test void test3(){ Slice<User> users = userService.getByPage( null,2); List<User> content = users.getContent(); log.info("users: {}", objectMapper.writeValueAsString(content)); log.info("size: {}", content.size()); Pageable pageable = users.getPageable(); CassandraPageRequest pageable1 = (CassandraPageRequest) pageable; ByteBuffer pagingState = pageable1.getPagingState(); Slice<User> byPage = userService.getByPage(pagingState, 3); log.info("byPage: {}", objectMapper.writeValueAsString(byPage.getContent())); log.info("size: {}", byPage.getContent().size()); } @SneakyThrows @Test void test4(){ User user = new User(); user.setId(16); user.setName("zzzz2"); User user1 = userService.addUser(user); log.info("user: {}", objectMapper.writeValueAsString(user1)); } @SneakyThrows @Test void test5(){ User user = new User(); user.setId(16); user.setAge(18); user.setName("12344"); User user1 = userService.updateUser(user); log.info("user: {}", objectMapper.writeValueAsString(user1)); } @SneakyThrows @Test void test6(){ boolean b = userService.deleteUser(123); log.info("b: {}", b); }