1.右键项目,选择新建,选择Servlet。
2.查看TestServlet.java。
@WebServlet(name = "TestServlet", urlPatterns = {"/TestServlet"})
public class TestServlet extends HttpServlet {
......
}
类定义上增加了@WebServlet标注,表明这是一个Servlet。
3.调用NamedQuery查询Customer
(1)用依赖注入的方式为Servlet增加一个属性:EntityManagerFactory。
@PersistenceUnit EntityManagerFactory emf;
(2)调用NamedQuery:"Customer.findAll"。
List result = (List) emf.createEntityManager().createNamedQuery("Customer.findAll").getResultList();
注意,这里之所以用EntityManagerFactory,而不是用EntityManager,是因为可能会有多个线程同时访问该Servlet;
而EntityManager不是线程安全的,EntityManagerFactory才是。
当然,一般来说,访问数据库的代码会放到EJB中,不会在Servlet中直接访问,这样就不会有上面的问题了。
另外,这里并没有涉及事务处理,因为只是查询。
如果有增删改操作,就需要事务处理。事务处理应该在JPA实体上通过标注定义,JPA2.0还支持乐观锁和悲观锁。
4.右键点击TestServlet,选择运行
2.查看TestServlet.java。
@WebServlet(name = "TestServlet", urlPatterns = {"/TestServlet"})
public class TestServlet extends HttpServlet {
......
}
类定义上增加了@WebServlet标注,表明这是一个Servlet。
3.调用NamedQuery查询Customer
(1)用依赖注入的方式为Servlet增加一个属性:EntityManagerFactory。
@PersistenceUnit EntityManagerFactory emf;
(2)调用NamedQuery:"Customer.findAll"。
List
注意,这里之所以用EntityManagerFactory,而不是用EntityManager,是因为可能会有多个线程同时访问该Servlet;
而EntityManager不是线程安全的,EntityManagerFactory才是。
当然,一般来说,访问数据库的代码会放到EJB中,不会在Servlet中直接访问,这样就不会有上面的问题了。
另外,这里并没有涉及事务处理,因为只是查询。
如果有增删改操作,就需要事务处理。事务处理应该在JPA实体上通过标注定义,JPA2.0还支持乐观锁和悲观锁。
4.右键点击TestServlet,选择运行
没有评论:
发表评论