科技知識動態:Web編程學習五:使用Jersey和JPA來創建RESTfulWebService

導讀跟大家講解下有關Web編程學習五:使用Jersey和JPA來創建RESTfulWebService,相信小伙伴們對這個話題應該也很關注吧,現在就為小伙伴們說說We

跟大家講解下有關Web編程學習五:使用Jersey和JPA來創建RESTfulWebService,相信小伙伴們對這個話題應該也很關注吧,現在就為小伙伴們說說Web編程學習五:使用Jersey和JPA來創建RESTfulWebService,小編也收集到了有關Web編程學習五:使用Jersey和JPA來創建RESTfulWebService的相關資料,希望大家看到了會喜歡。

在上一個練習學習了如何使用Jersey,以及JAXB來創建RESTful的web service。 現在我來結合后臺數據庫對其做升級,也就是通過Jersey創建用來修改后臺數據庫的RESTful web service。 開發環境: Eclipse Juno, 數據庫MySQL 5.5, Jersey 1.18,EclipseLink 2.4

在上一個練習學習了如何使用Jersey,以及JAXB來創建RESTful的web service。

現在我來結合后臺數據庫對其做升級,也就是通過Jersey創建用來修改后臺數據庫的RESTful web service。

開發環境:

Eclipse Juno, 數據庫MySQL 5.5, Jersey 1.18,EclipseLink 2.4, JAVA 1.6, 應用服務器Tomcat 7。

1.創建一個叫做jersey3的Dynamic Web Project。添加JPA的facet。

2.導入Jersey包,導入EclipseLink包,導入MySQL的connect包。

3.開發數據庫對象,配置JPA。

數據對象Employee類:

package sample;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.Id;import javax.persistence.Table;import javax.xml.bind.annotation.XmlRootElement;@XmlRootElement@Entity@Table(name ="employee")public class Employee {@Id@Column(name ="userId")private Long id;@Column(name ="firstName")private String firstName;@Column(name ="lastName")private String lastName;public long getId() {return id;}public void setId(long id) {this.id = id;}public String getFirstName() {return firstName;}public void setFirstName(String firstName) {this.firstName = firstName;}public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}}persistence.xml:

\

org.eclipse.persistence.jpa.PersistenceProvidersample.Employee

4.配置Jersey,編寫代碼來實現RESTful web service。

創建web.xml:

RestProjectTest Jersey REST Service com.sun.jersey.spi.container.servlet.ServletContainer com.sun.jersey.config.property.packages sample com.sun.jersey.api.json.POJOMappingFeature true 1 Jersey REST Service /* sample.LocalEntityManagerFactory 注意添加了一個監聽器LocalEntityManagerFactory,實現了ServletContextListener類,它可以在應用啟動和關閉的時候后自動調用。

可以來管理我們的EntityManager。

package sample;import javax.persistence.EntityManager;import javax.persistence.EntityManagerFactory;import javax.persistence.Persistence;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;import javax.servlet.annotation.WebListener;@WebListenerpublic class LocalEntityManagerFactory implements ServletContextListener {private static EntityManagerFactory emf;@Overridepublic void contextInitialized(ServletContextEvent event) {emf = Persistence.createEntityManagerFactory("EmployeePU");System.out.println("ServletContextListener started");}@Overridepublic void contextDestroyed(ServletContextEvent event) {emf.close();System.out.println("ServletContextListener destroyed");}public static EntityManager createEntityManager() {if (emf == null) {throw new IllegalStateException("Context is not initialized yet.");}return emf.createEntityManager();}}開發好JPA相關的持久化功能后,就可以來實現RESTful service了,代碼:package sample;import java.util.List;import javax.persistence.EntityManager;import javax.persistence.Query;import javax.ws.rs.GET;import javax.ws.rs.Path;import javax.ws.rs.PathParam;import javax.ws.rs.Produces;import javax.ws.rs.core.MediaType;@Path("/employee")public class EmployeeController {@GET@Produces({ MediaType.TEXT_XML })@Path("{id}")public Employee read(@PathParam("id") long id) {long start = System.currentTimeMillis();System.out.println("EmployeeController.read() started");EntityManager em = LocalEntityManagerFactory.createEntityManager();try {return em.find(Employee.class, id);} finally {em.close();System.out.println("Getting data took"+ (System.currentTimeMillis() - start) +"ms.");}}@GET@Produces({ MediaType.TEXT_XML })public List read() {long start = System.currentTimeMillis();System.out.println("EmployeeController.read() started");EntityManager em = LocalEntityManagerFactory.createEntityManager();try {Query q = em.createQuery("SELECT e FROM Employee e");List result = q.getResultList();return result;} finally {em.close();System.out.println("Getting data took"+ (System.currentTimeMillis() - start) +"ms.");}}}這里實現了兩個GET接口,一個按照ID返回單個Employee對象,另一個返回全部Employee對象。

5.準備幾條測試數據,插入到數據庫表中。

\

6.測試,這里我用的Chrome瀏覽器插件的POSTMAN來測試。

6.1測試1,單個查詢

輸入url: http://localhost:8080/jersey3/employee/{id}

\

6.2測試2,查詢全部數據

輸入URL: http://localhost:8080/jersey3/employee/\

小結:

這個例子很簡單,配置好JPA和Jersey后,主要就是在Jersey的實現方法中把數據的CRUD需求交給JPA的Entity Manager來完成就可以了。

來源:php中文網

免責聲明:本文由用戶上傳,如有侵權請聯系刪除!