Idea建立Maven多模組+Spring-boot cassandra-CassandraTemplate的使用
1、建立多模組的專案請參考https://blog.csdn.net/sunxiaoju/article/details/84343002
2、建立一個cassandra模組,並建立好相應的目錄包以及對應的檔案,如下圖所示:
3、然後配置pom.xml,需要新增對應的依賴包,如下程式碼所示:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>Spring-root</artifactId> <groupId>Spring-root</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>cassandra</artifactId> <dependencies> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-cassandra</artifactId> <version>2.1.2.RELEASE</version> </dependency> <dependency> <groupId>com.datastax.cassandra</groupId> <artifactId>cassandra-driver-core</artifactId> <version>3.6.0</version> </dependency> </dependencies> </project>
4、然後開啟cassandra資料庫建立user表,cql語句為:
create table user (id bigint primary key,username text,age int);
如下圖所示:
5、向user表中插入資料,cql語句為:
insert into user (id,username,age) values (1,'zs',23); insert into user (id,username,age) values (2,'ls',24); insert into user (id,username,age) values (3,'ww',25);
如下圖所示:
6、根據資料庫表建立User.java實體類,如下程式碼:
package com.win.cas.bean; import org.springframework.data.cassandra.core.mapping.PrimaryKey; import org.springframework.data.cassandra.core.mapping.Table; @Table(value = "user") public class User { @PrimaryKey("id") private int id; private String username; private int age; public User() { } public User(String username, int age) { this.username = username; this.age = age; } public void setUsername(String username){ this.username=username; } public void setAge(int age){ this.age=age; } public int getId(){ return this.id; } public void setId(int id){ this.id=id; } public String getUsername(){ return this.username; } public int getAge(){ return this.age; } }
7、建立返回json物件類:JsonResult.java,如下程式碼:
package com.win.cas.bean;
public class JsonResult {
private String status = null;
private Object result = null;
public JsonResult status(String status) {
this.status = status;
return this;
}
public void setResult(Object user){
this.result=user;
}
public Object getResult(){
return this.result;
}
public void setStatus(String status){
this.status=status;
}
public String getStatus(){
return this.status;
}
}
8、建立dao介面類:UserDao.java,如下程式碼所示:
package com.win.cas.dao;
import com.win.cas.bean.User;
import java.util.List;
public interface UserDao {
public User getUserById(Integer id);
public User getUserById1(Integer id);
public List<User> getUserList();
public List<User> getUserList1();
public boolean add(User user);
public boolean update(Integer id, User user);
public boolean delete(Integer id);
}
9、實現dao介面類:UserDaoImpl.java,如下程式碼所示:
package com.win.cas.dao.impl;
import com.win.cas.bean.User;
import com.win.cas.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.cassandra.core.CassandraTemplate;
import org.springframework.data.cassandra.core.query.Query;
import org.springframework.data.cassandra.core.query.Update;
import org.springframework.stereotype.Repository;
import java.util.List;
import static org.springframework.data.cassandra.core.query.Criteria.where;
@Repository
public class UserDaoImpl implements UserDao {
@Autowired
private CassandraTemplate cassandraTemplate;
@Override
public User getUserById(Integer id){
String cql=String.format("select * from user where id = %d",id.intValue());
List<User> list = cassandraTemplate.select(cql,User.class);
if(list!=null && list.size()>0){
return list.get(0);
}else{
return null;
}
}
@Override
public User getUserById1(Integer id){
User usero = cassandraTemplate.selectOne(Query.query(where("id").is(id)),User.class );
if(usero!=null){
return usero;
}
return null;
}
@Override
public List<User> getUserList(){
String cql=String.format("select * from user");
List<User> list = cassandraTemplate.select(cql,User.class);
if(list!=null && list.size()>0){
return list;
}else{
return null;
}
}
@Override
public List<User> getUserList1(){
return null;
}
@Override
public boolean add(User user){
String cql=String.format("insert into user (id,username,age) values (%d,'%s',%d)",user.getId(),user.getUsername(),user.getAge());
return cassandraTemplate.getCqlOperations().execute(cql);
}
@Override
public boolean update(Integer id, User user){
return cassandraTemplate.update(Query.query(where("id").is(id.intValue())),Update.empty().set("username",user.getUsername()).set("age",user.getAge()), User.class);
}
@Override
public boolean delete(Integer id){
return cassandraTemplate.delete(Query.query(where("id").is(id.intValue())),User.class);
}
}
10、service介面類:UserService.java,如下程式碼所示:
package com.win.cas.service;
import com.win.cas.bean.User;
import java.util.List;
public interface UserService {
public User getUserById(Integer id);
public List<User> getUserList();
public User getUserById1(Integer id);
public List<User> getUserList1();
public boolean add(User user);
public boolean update(Integer id, User user);
public boolean delete(Integer id);
}
11、實現service介面類:UserServiceImpl.java,如下程式碼所示:
package com.win.cas.service.impl;
import com.win.cas.bean.User;
import com.win.cas.dao.UserDao;
import com.win.cas.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public User getUserById(Integer id){
return userDao.getUserById(id);
}
@Override
public User getUserById1(Integer id){
return userDao.getUserById1(id);
}
@Override
public List<User> getUserList(){
return userDao.getUserList();
}
@Override
public List<User> getUserList1(){
return userDao.getUserList1();
}
@Override
public boolean add(User user){
return userDao.add(user);
}
@Override
public boolean update(Integer id, User user){
return userDao.update(id, user);
}
@Override
public boolean delete(Integer id){
return userDao.delete(id);
}
}
12、控制層程式碼UserController.java類,如下程式碼:
package com.win.cas.web;
import com.win.cas.bean.JsonResult;
import com.win.cas.bean.User;
import com.win.cas.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
public class UserController {
@Autowired
private UserService userService;
/**
* 根據ID查詢使用者
* @param id
* @return
*/
@RequestMapping(value = "user/{id}", method = RequestMethod.GET)
public ResponseEntity<JsonResult> getUserById (@PathVariable(value = "id") Integer id){
JsonResult r = new JsonResult();
try {
User user = userService.getUserById(id);
r.setResult(user);
r.setStatus("ok");
} catch (Exception e) {
r.setResult(e.getClass().getName() + ":" + e.getMessage());
r.setStatus("error");
e.printStackTrace();
}
return ResponseEntity.ok(r);
}
/**
* 根據ID查詢使用者
* @param id
* @return
*/
@RequestMapping(value = "user1/{id}", method = RequestMethod.GET)
public ResponseEntity<JsonResult> getUserById1 (@PathVariable(value = "id") Integer id){
JsonResult r = new JsonResult();
try {
User user = userService.getUserById1(id);
r.setResult(user);
r.setStatus("ok");
} catch (Exception e) {
r.setResult(e.getClass().getName() + ":" + e.getMessage());
r.setStatus("error");
e.printStackTrace();
}
return ResponseEntity.ok(r);
}
/**
* 查詢使用者列表
* @return
*/
@RequestMapping(value = "users", method = RequestMethod.GET)
public ResponseEntity<JsonResult> getUserList (){
JsonResult r = new JsonResult();
try {
List<User> users = userService.getUserList();
r.setResult(users);
r.setStatus("ok");
} catch (Exception e) {
r.setResult(e.getClass().getName() + ":" + e.getMessage());
r.setStatus("error");
e.printStackTrace();
}
return ResponseEntity.ok(r);
}
/**
* 查詢使用者列表
* @return
*/
@RequestMapping(value = "users1", method = RequestMethod.GET)
public ResponseEntity<JsonResult> getUserList1 (){
JsonResult r = new JsonResult();
try {
List<User> users = userService.getUserList1();
r.setResult(users);
r.setStatus("ok");
} catch (Exception e) {
r.setResult(e.getClass().getName() + ":" + e.getMessage());
r.setStatus("error");
e.printStackTrace();
}
return ResponseEntity.ok(r);
}
/**
* 新增使用者
* @param user
* @return
*/
@RequestMapping(value = "user", method = RequestMethod.POST)
public ResponseEntity<JsonResult> add (@RequestBody User user){
JsonResult r = new JsonResult();
try {
boolean orderId = userService.add(user);
if (!orderId) {
r.setResult(orderId);
r.setStatus("fail");
} else {
r.setResult(orderId);
r.setStatus("ok");
}
} catch (Exception e) {
r.setResult(e.getClass().getName() + ":" + e.getMessage());
r.setStatus("error");
e.printStackTrace();
}
return ResponseEntity.ok(r);
}
/**
* 根據id刪除使用者
* @param id
* @return
*/
@RequestMapping(value = "user/{id}", method = RequestMethod.DELETE)
public ResponseEntity<JsonResult> delete (@PathVariable(value = "id") Integer id){
JsonResult r = new JsonResult();
try {
boolean orderId = userService.delete(id);
if (!orderId) {
r.setResult(orderId);
r.setStatus("fail");
} else {
r.setResult(orderId);
r.setStatus("ok");
}
} catch (Exception e) {
r.setResult(e.getClass().getName() + ":" + e.getMessage());
r.setStatus("error");
e.printStackTrace();
}
return ResponseEntity.ok(r);
}
/**
* 根據id修改使用者資訊
* @param user
* @return
*/
@RequestMapping(value = "user/{id}", method = RequestMethod.PUT)
public ResponseEntity<JsonResult> update (@PathVariable("id") Integer id, @RequestBody User user){
JsonResult r = new JsonResult();
try {
boolean ret = userService.update(id, user);
if (!ret) {
r.setResult(ret);
r.setStatus("fail");
} else {
r.setResult(ret);
r.setStatus("ok");
}
} catch (Exception e) {
r.setResult(e.getClass().getName() + ":" + e.getMessage());
r.setStatus("error");
e.printStackTrace();
}
return ResponseEntity.ok(r);
}
}
13、啟動類程式碼:Application.java類,如下程式碼:
package com.win.cas;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnableAutoConfiguration
@SpringBootApplication
public class Application {
public static void main( String[] args )
{
System.out.println( "start....." );
SpringApplication.run(Application.class, args);
}
}
14、application.yml配置檔案:
spring:
data:
cassandra:
keyspace-name: mycasdb
contact-points: 127.0.0.1
port: 9042
username: cassandra
password: cassandra
15、通過Debug啟動程式,然後在瀏覽器中輸入:http://127.0.0.1:8080/user/1或http://127.0.0.1:8080/user1/2,即可查詢cassandra資料表中的內容,此兩個地址所實現的程式碼是略有不同的,如下圖所示:
16、輸入:http://127.0.0.1:8080/users,即可查詢user表中的所有記錄,如下圖所示:
17、新增使用者,開啟火狐瀏覽器的RESTClient除錯工具,然後新增http頭,如下圖所示:
18、請求方法選擇Post,然後輸入:,在正文中輸入:{"id":4,"username":"zl","age":26},如下圖所示:
19、點擊發送請求之後可通過http://127.0.0.1:8080/users進行檢視,如下圖所示:
20、修改使用者資訊,選擇put請求,然後輸入:http://127.0.0.1:8080/user/4,輸入要修改的內容:{"id":4,"username":"hahazl23423","age":80},表示修改指定ID的資訊,點擊發送即可修改,並且有返回狀態,如下圖所示:
21、再次重新整理獲取使用者列表,如下圖所示:
22、刪除使用者資訊,選擇DELETE請求,然後輸入:http://127.0.0.1:8080/user/2,不需要輸入內容,點擊發送即可刪除,並且有返回狀態,如下圖所示:
23、重新重新整理即可刪除,如下圖所示: