cassandra數據庫使用(三)–使用java進行數據基本操作
文章目錄
一、簡介
在這節,將介紹使用cassandra的java客戶端 datastax 進行數據操作。
二、開發步驟
2.1 添加maven依賴
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.32</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.6</version>
</dependency>
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-core</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-mapping</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-extras</artifactId>
<version>3.5.0</version>
</dependency>
2.2 定義示例對象SchoolCas.java 和StuObj.java
SchoolCas.java對象如下:
public class SchoolCas {
private String schoolId;
private String schoolName;
public SchoolCas() {
}
public SchoolCas(String schoolId, String schoolName) {
this.schoolId = schoolId;
this.schoolName = schoolName;
}
public String getSchoolId() {
return schoolId;
}
public void setSchoolId(String schoolId) {
this.schoolId = schoolId;
}
public String getSchoolName() {
return schoolName;
}
public void setSchoolName(String schoolName) {
this.schoolName = schoolName;
}
}
StuObj.java對象如下:
import com.alibaba.fastjson.annotation.JSONField;
import org.apache.commons.lang3.builder.ToStringBuilder;
import java.util.Date;
import java.util.List;
import java.util.Set;
public class StuObj {
private Integer stuId;
private String stuName;
private List<String> teacherList;
private Set<String> courseSet;
private SchoolCas school;
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
public StuObj() {
}
public Integer getStuId() {
return stuId;
}
public void setStuId(Integer stuId) {
this.stuId = stuId;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public List<String> getTeacherList() {
return teacherList;
}
public void setTeacherList(List<String> teacherList) {
this.teacherList = teacherList;
}
public Set<String> getCourseSet() {
return courseSet;
}
public void setCourseSet(Set<String> courseSet) {
this.courseSet = courseSet;
}
public SchoolCas getSchool() {
return school;
}
public void setSchool(SchoolCas school) {
this.school = school;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
}
2.3 數據的增刪改查操作,具體如下(解釋請看註釋):
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.datastax.driver.core.*;
import com.datastax.driver.core.querybuilder.*;
import com.dragon.study.cassandra.bean.StuObj;
import com.google.common.reflect.TypeToken;
import org.apache.commons.lang3.time.DateFormatUtils;
import java.util.*;
public class CassandraPaperMain {
public static void main(String[] args) {
//機器地址
String[] hosts = new String[]{"192.168.0.1"};
//端口
int port = 9042;
//keyspace
String keyspace = "key_space_1";
//table
String table = "stu";
Cluster cluster = Cluster.builder().addContactPoints(hosts).withPort(port).build();
//創建會話
Session session = cluster.connect(keyspace);
/////////////////// 操作方式一 直接執行cql語句 (在此僅以查詢爲例) /////////////
//查詢
String queryCql = "select * from stu where stu_id=?";
BoundStatement boundStatement = session.prepare(queryCql).bind(1);
ResultSet rs = session.execute(boundStatement);
rs.forEach(row -> {
System.out.println(row);
});
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////// 操作方式二 使用datastax的工具類 /////////////
Map<String, String> school = new HashMap<>();
school.put("schoolId", "001");
school.put("schoolName", "第一中學");
List<String> teacherList = Arrays.asList("張教師", "李教師");
Set<String> courseSet = new HashSet<>(Arrays.asList("語文", "英語"));
//插入
Insert insert = QueryBuilder.insertInto(keyspace, table)
.value("stu_id", 24)
.value("stu_name", "orange23")
.value("school", school)
.value("teacher_list", teacherList)
.value("course_set", courseSet)
.value("create_time", new Date());
session.execute(insert);
//更新
Update update = QueryBuilder.update(keyspace, table);
update.with(QueryBuilder.set("stu_name", "orange22"));
update.with(QueryBuilder.set("stu_age", 22));
update.where(QueryBuilder.eq("stu_id", 22));
session.execute(update);
//查詢所有
Select select = QueryBuilder.select().from(keyspace, table);
ResultSet selectRs = session.execute(select);
List<StuObj> list = new ArrayList<>(); //將查詢結果轉爲對象
selectRs.forEach(r -> {
list.add(rowToObj(r, StuObj.class));
});
System.out.println(list);
List<ColumnDefinitions.Definition> colDefList = rs.getColumnDefinitions().asList(); //獲取列字段定義
colDefList.forEach(d -> {
System.out.println(d.getType());
System.out.println(d.getName());
System.out.println(d.getClass());
System.out.println(d.getType());
});
rs.forEach(System.out::println);
rs.forEach(row -> {
//獲取單個屬性值
String stuName = row.get("stu_name", String.class);
System.out.println(stuName);
//獲取list類型
List<String> tList = row.getList("teacher_list", String.class);
System.out.println(JSON.toJSONString(tList));
//獲取set類型
Set<String> cSet = row.getSet("course_set", String.class);
System.out.println(JSON.toJSONString(cSet));
//獲取map類型
Map<String, String> map = row.getMap("school", TypeToken.of(String.class), TypeToken.of(String.class));
System.out.println(JSON.toJSONString(map));
});
//刪除
Delete delete = QueryBuilder.delete().from(keyspace, table);
delete.where(QueryBuilder.eq("stu_id", 1));
session.execute(delete);
//指量操作
BatchStatement batchStatement = new BatchStatement();
batchStatement.add(insert);
batchStatement.add(delete);
session.execute(batchStatement);
cluster.close();
}
//row轉對java對象(藉助json)
public static <T> T rowToObj(Row row, Class<T> clazz) {
JSONObject obj = new JSONObject();
row.getColumnDefinitions().forEach(d -> {
Object o = row.getObject(d.getName());
//時間類型特殊處理
o = o instanceof Date ? DateFormatUtils.format((Date) o, "yyyy-MM-dd HH:mm:ss") : o;
obj.put(d.getName(), o);
});
return obj.toJavaObject(clazz);
}
}