跟大家講解下有關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: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中文網