我是Web服务的新手。请提出建议,如何在Java中使用Jersey JAX-RS从数据库中插入和检索数据?
下面是一个示例 JAX-RS 服务的示例,该示例使用 JPA 进行持久性而使用 JAXB 进行消息传递,实现为会话Bean 。
客户服务
package org.example; import java.util.List; import javax.ejb.*; import javax.persistence.*; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; @Stateless @LocalBean @Path("/customers") public class CustomerService { @PersistenceContext(unitName="CustomerService", type=PersistenceContextType.TRANSACTION) EntityManager entityManager; @POST @Consumes(MediaType.APPLICATION_XML) public void create(Customer customer) { entityManager.persist(customer); } @GET @Produces(MediaType.APPLICATION_XML) @Path("{id}") public Customer read(@PathParam("id") long id) { return entityManager.find(Customer.class, id); } @PUT @Consumes(MediaType.APPLICATION_XML) public void update(Customer customer) { entityManager.merge(customer); } @DELETE @Path("{id}") public void delete(@PathParam("id") long id) { Customer customer = read(id); if(null != customer) { entityManager.remove(customer); } } @GET @Produces(MediaType.APPLICATION_XML) @Path("findCustomersByCity/{city}") public List<Customer> findCustomersByCity(@PathParam("city") String city) { Query query = entityManager.createNamedQuery("findCustomersByCity"); query.setParameter("city", city); return query.getResultList(); } }
顾客
以下是其中一个实体的示例。它包含JPA和JAXB批注。
package org.example; import java.io.Serializable; import javax.persistence.*; import javax.xml.bind.annotation.XmlRootElement; import java.util.Set; @Entity @NamedQuery(name = "findCustomersByCity", query = "SELECT c " + "FROM Customer c " + "WHERE c.address.city = :city") @XmlRootElement public class Customer implements Serializable { private static final long serialVersionUID = 1L; @Id private long id; @Column(name="FIRST_NAME") private String firstName; @Column(name="LAST_NAME") private String lastName; @OneToOne(mappedBy="customer", cascade={CascadeType.ALL}) private Address address; @OneToMany(mappedBy="customer", cascade={CascadeType.ALL}) private Set<PhoneNumber> phoneNumbers; }
更新
需要什么jar
您可以将JAX-RS / EJB / JPA / JAXB应用程序部署到任何符合Java EE 6的应用程序服务器,而无需设置任何其他服务器。对客户端进行编程,您可以从Jersey(http://jersey.java.net/)获得JAX- RS API ,并从EclipseLink(http://www.eclipse.org/eclipselink/)获得JPA和JAXB API 。
以及数据库连接的写入位置
JDBC资源和连接池
您需要在应用程序服务器上配置连接池。以下是在GlassFish上执行此操作的步骤。步骤将因所使用的应用程序服务器而异。
JPA配置
然后,我们参考上面在persistence.xml文件中为JPA实体创建的数据库连接,如下所示:
persistence.xml
<?xml version="1.0" encoding="UTF-8"?> <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> <persistence-unit name="CustomerService" transaction-type="JTA"> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <jta-data-source>CustomerService</jta-data-source> <class>org.example.Customer</class> <class>org.example.Address</class> <class>org.example.PhoneNumber</class> <properties> <property name="eclipselink.target-database" value="Oracle" /> <property name="eclipselink.logging.level" value="FINEST" /> <property name="eclipselink.logging.level.ejb_or_metadata" value="WARNING" /> <property name="eclipselink.logging.timestamp" value="false"/> <property name="eclipselink.logging.thread" value="false"/> <property name="eclipselink.logging.session" value="false"/> <property name="eclipselink.logging.exceptions" value="false"/> <property name="eclipselink.target-server" value="SunAS9"/> </properties> </persistence-unit> </persistence>