Form Oracle: The Java Persistence API provides a POJO persistence model for object-relational mapping. The Java Persistence API was developed by the EJB 3.0 software expert group as part of JSR 220, but its use is not limited to EJB software components. It can also be used directly by web applications and application clients, and even outside the Java EE platform, for example, in Java SE applications.
注:因為預設情況下(不加@Column annotation),之後要寫的JPQL都會自動轉成大寫,而所用版本的mysql對大小寫敏感,是以這邊索性将database name 改為大寫,對應mysql那邊也做了修改
建立JpaHandle類對資料進行操作
package webService;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
public class JpaHandle {
// for jpa test, if jpa service run well the titles of Book will show in console window
public static void showTitle() {
EntityManagerFactory bookFactory = Persistence.createEntityManagerFactory( "RestfulService" );
EntityManager entityManager = bookFactory.createEntityManager();
//Scalar function
Query query = entityManager.createQuery("Select e.title from Book e");
System.out.println("this is a test 2");
List<String> list = query.getResultList();
System.out.println("test list before");
System.out.println(list.toString());
System.out.println("test list after");
int tempI = ;
for(String e:list) {
System.out.println("ok" + tempI);
tempI++;
System.out.println("Book title :"+e);
}
}
// get the titles of Books
public static List<String> getTitle() {
EntityManagerFactory bookFactory = Persistence.createEntityManagerFactory( "RestfulService" );
EntityManager entityManager = bookFactory.createEntityManager();
// Query query = entityManager.createQuery("select e from Book e where uppercase(e.title) = :title");
Query query = entityManager.createQuery("Select e.title from Book e");
List<String> list = query.getResultList();
return list;
}
}
如果檢視console會發現”Select e.title from Book e”作用在mysql時,會被自動轉成大寫,是以如果不使用@Column annotation或者其他設定,mysql中的table、column都需要換成大寫
對應修改WebService.java
package webService;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import javax.ws.rs.GET;
import javax.ws.rs.Produces;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.List;
/* receive GET & POST requests from http://localhost:8080/RestfulService/API/restService */
@Path("/restService")
public class WebService {
/* receive json data & search in mysql with it */
@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response json_restResponse(InputStream incomingData) {
// json receiving variables
String receivedString = "";
JSONObject receivedJson = null;
// temp variables
// returnCode will be send to client and be present in the console view
String returnCode = "SEARCH PROGRESS & RESULTS:";
// receive the json data as receivedJson(JSONObject)
try {
BufferedReader in = new BufferedReader(new InputStreamReader(incomingData));
String line = null;
while ((line = in.readLine()) != null) {
receivedString += line;
}
try {
// convert data stream to json
receivedJson = new JSONObject(receivedString);
returnCode += "\n\n- receive json data successfully...";
// call jpa method
List<String> title = JpaHandle.getTitle();
System.out.println(receivedJson.toString());
for(String e:title) {
returnCode += ("\n\ntitle:\t" + e);
if (e == receivedJson.getString("title")) {
returnCode += "\t-that's it!";
} else {
returnCode += ("\t-not the one I'm finding..." + e);
}
}
} catch (JSONException e){
System.out.println(e);
}
} catch (Exception e) {
System.out.println(e);
}
return Response.status().entity(returnCode).build();
}
/* receive the GET requests & test whether the server is on */
@GET
@Produces(MediaType.TEXT_PLAIN)
public String sayPlainTextHello() {
String returnCode = "this is a test~";
return returnCode;
}
}