Wednesday, May 23, 2018

CouchBase CRUD Operations Using JAVA SDK


CRUD Operations on CouchBase Database


We have connection with cluster and opened our bucket to push the documents
Lets start inserting some documents.

If you look at it,Couch operates on JSON,serializing and deserializing java Objects into JSON leads to a lot of boilerplate code,
So we are going to use something called EntityDocument provided by couch client itself.

EntityDocument<@Valid Employee> employeeEntity = EntityDocument.create(employee);

Using the EntityDocument as shown above we can insert the java object "employee" directly, EntityDocument will do the conversion for us.

CRUD operations is posted below.


package com.couch.demo.CouchDemo;

import javax.xml.bind.annotation.XmlRootElement;

import org.hibernate.validator.constraints.NotBlank;

@XmlRootElement
public class Employee {
  
  
 @NotBlank
 private String empId;
 @NotBlank
 private String empName;
 @NotBlank
 private String empDesignation;
 
 public Employee() {
  // TODO Auto-generated constructor stub
 }
 
 public Employee(String empId, String empName,
   String empDesignation) {
  super();
  this.empId = empId;
  this.empName = empName;
  this.empDesignation = empDesignation;
 }
 public String getEmpId() {
  return empId;
 }
 public void setEmpId(String empId) {
  this.empId = empId;
 }
 public String getEmpName() {
  return empName;
 }
 public void setEmpName(String empName) {
  this.empName = empName;
 }
 public String getEmpDesignation() {
  return empDesignation;
 }
 public void setEmpDesignation(String empDesignation) {
  this.empDesignation = empDesignation;
 }
 
}



import com.couchbase.client.java.Bucket;
import com.couchbase.client.java.CouchbaseCluster;
import com.couchbase.client.java.document.EntityDocument;
import com.couchbase.client.java.document.JsonDocument;
import com.couchbase.client.java.document.json.JsonObject;
import com.couchbase.client.java.repository.Repository;
import javax.validation.Valid;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.xml.stream.events.EntityDeclaration;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("web")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class Controller {
 static CouchbaseCluster couchbasecluster = null;
 static Bucket bucket = null;
 
 

 static{
   couchbasecluster = CouchbaseCluster.create("localhost");
   bucket = couchbasecluster.openBucket("Test");
 }
 
 static  Repository repository = bucket.repository();


@RequestMapping("/saveemployee")
@POST
public @Valid Employee saveEmployee(@Valid @RequestBody Employee employee){
 
 
 EntityDocument<@Valid Employee> insert = repository.insert(EntityDocument.create(employee.getEmpId(),employee));
 return insert.content();
}

@GET
@RequestMapping("/getEmployee/{id}")
public Employee getEmployee(@PathVariable("id") String id){
 System.out.println("ID "+id);
 return repository.get(id,Employee.class).content();
 

}


@POST
@RequestMapping("/updateemployee")
public Employee updateEmployee(@Valid @RequestBody Employee employee){
 return repository.upsert(EntityDocument.create(employee.getEmpId(),employee)).content();
}

@POST
@RequestMapping("/deleteemployee/{id}")
public String deleteEmployee(@PathVariable("id") String id,@Valid @RequestBody Employee employee){
 return bucket.remove(id).id();

}
}


As you can see, the above code snippet works on the document not on the fields or the columns of a document,
If your requirement is to get certain fields of a document by filtering, then you should go for N1QL Query.

Getting documents based on criteria using N1QL is shown in next chapter.
Share:

0 comments:

Post a Comment