(9) ebj学习: Jpa的增删查改,CURD方法监听和命名查询
2016-07-18 23:43
603 查看
1 整体结构
client文件存放 ejb客户端的一些jar包
Animal.java 中配置命名查询
Person.java 中实现了方法监听和类监听两种监听方式( 在增删查改方法执行之前后之后调用监听方法)
JpaCurdTest.java 为 Junit测试增删查改
2 代码
Animal.java
Person.java
PersonListener.java
PersonManager.java
PersonManagerBean.java
测试类 JpaCurdTest.java
persistence.xml
jndi.properties
client文件存放 ejb客户端的一些jar包
Animal.java 中配置命名查询
Person.java 中实现了方法监听和类监听两种监听方式( 在增删查改方法执行之前后之后调用监听方法)
JpaCurdTest.java 为 Junit测试增删查改
2 代码
Animal.java
package leaning.entity; import java.io.Serializable; import javax.persistence.DiscriminatorColumn; import javax.persistence.DiscriminatorValue; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.InheritanceType; import javax.persistence.Id; import javax.persistence.Inheritance; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; /** * 单表继承A * */ @Entity @NamedQueries( // 命名查询 { @NamedQuery(name="searchAnimals",query="select a FROM Animal a where a.name like :name"), @NamedQuery(name="searchAllAnimals",query="select a FROM Animal a") } ) public class Animal implements Serializable{ @Id @GeneratedValue private int id; private String name; private String sex; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } }
Person.java
package leaning.entity; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.EntityListeners; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.PrePersist; @Entity @EntityListeners(PersonListener.class) // 监听方法2 ,自定义在一个类中 public class Person implements Serializable{ @Id @GeneratedValue private int id; private String name; private String address; public int getId() { return id; } /** * 监听方法1 * 实体对象的回调方法,通过PrePersist注解,可以将这个方法变为 * 当实体对象被保存之前自动调用的方法 * 可用注解有 : PrePersist,PostPersist,PreRemove,PostRemove * PreUpdate,PostUpdate,PostLoad * **/ @PrePersist public void doSomeThing(){ System.out.println("@PrePersist 实体对象即将保存 : name = " + name); } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
PersonListener.java
package leaning.entity; import javax.persistence.PostPersist; public class PersonListener { /** * 自动调用该方法 * */ @PostPersist public void doSomething(Person person){ System.out.println("@PostPersist 实体对象已经被加载, name = " + person.getName()); } }
PersonManager.java
package leaning.entity; import java.util.List; public interface PersonManager { public void addPerson(String name); public void removePerson(int id); public void removePerson1(int id); public void updatePerson(int id,String updateName); public Person findPerson(int id); public Person findPerson2(int id); public List searchPerson1(); public List searchPerson2(); public List searchPerson3(); public List searchAnimals(); public List searchAllAnimals(); }
PersonManagerBean.java
package leaning.entity; import java.util.List; import javax.ejb.Remote; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; @Stateless(name="personManager") @Remote public class PersonManagerBean implements PersonManager{ @PersistenceContext(unitName="curdUnit") private EntityManager em; public void addPerson(String name) { Person p = new Person(); p.setName(name); em.persist(p); } public void removePerson(int id) { Person p = em.find(Person.class, id); em.remove(p); } //这种方法不能删除 public void removePerson1(int id) { Person p = new Person(); p.setId(id); em.remove(p); } public void updatePerson(int id, String updateName) { Person p = new Person(); p.setId(id); p.setName(updateName); em.merge(p); } public Person findPerson(int id) { //相当于hibernate中的get操作 return em.find(Person.class, id); } public Person findPerson2(int id) { //相当于hibernate中的Load操作,加载的是一个代理类 return em.getReference(Person.class, id); } //利用EJB-QL 查询所有的人员 public List searchPerson1() { return em.createQuery("from Person").getResultList(); } public List searchPerson2() { return em.createQuery("select p from Person p where p.name like ?") .setParameter(1, "%李%") //索引值从1开始{与hibernate中从0开始不同} .getResultList(); } public List searchPerson3() { return em.createQuery("select p from Person p where p.name like :name") .setParameter("name", "%李%") .getResultList(); } /** * 测试命名查询和多台查询 * */ public List searchAnimals() { return em.createNamedQuery("searchAnimals") .setParameter("name", "%鸭%") .getResultList(); } public List searchAllAnimals() { return em.createNamedQuery("searchAllAnimals").getResultList(); } }
测试类 JpaCurdTest.java
package leaning.test; import static org.junit.Assert.*; import java.util.List; import javax.naming.InitialContext; import javax.naming.NamingException; import leaning.entity.Animal; import leaning.entity.Person; import leaning.entity.PersonManager; import org.junit.Test; /** * JPA增删查改测试 * **/ public class JpaCurdTest { @Test public void test() throws NamingException { } @Test public void testAddPerson() { InitialContext context; try { context = new InitialContext(); PersonManager personManager = (PersonManager)context.lookup("personManager/remote"); personManager.addPerson("张三"); } catch (NamingException e) { e.printStackTrace(); } } @Test public void testRemovePerson() throws NamingException { InitialContext context; try { context = new InitialContext(); PersonManager personManager = (PersonManager)context.lookup("personManager/remote"); personManager.removePerson(3); } catch (NamingException e) { e.printStackTrace(); } } @Test public void testRemovePerson1() throws NamingException { InitialContext context; try { context = new InitialContext(); PersonManager personManager = (PersonManager)context.lookup("personManager/remote"); personManager.removePerson1(3); } catch (NamingException e) { e.printStackTrace(); } } @Test public void testUpdatePerson() throws NamingException { InitialContext context; try { context = new InitialContext(); PersonManager personManager = (PersonManager)context.lookup("personManager/remote"); personManager.updatePerson(3, "updateName"); } catch (NamingException e) { e.printStackTrace(); } } @Test public void testFindPerson() throws NamingException { InitialContext context; try { context = new InitialContext(); PersonManager personManager = (PersonManager)context.lookup("personManager/remote"); Person p = personManager.findPerson(4); System.out.println("name = " + p.getName()); } catch (NamingException e) { e.printStackTrace(); } } @Test public void testFindPerson2() { InitialContext context; try { context = new InitialContext(); PersonManager personManager = (PersonManager)context.lookup("personManager/remote"); Person p = personManager.findPerson2(4); System.out.println("name = " + p.getName()); } catch (NamingException e) { e.printStackTrace(); } } @Test public void testSearchPerson1() throws NamingException { InitialContext context; try { context = new InitialContext(); PersonManager personManager = (PersonManager)context.lookup("personManager/remote"); List list = personManager.searchPerson1(); showList(list); } catch (NamingException e) { e.printStackTrace(); } } private void showList(List<Person> list){ if(list==null) return ; for(int i = 0 ; i < list.size() ; i++){ Person p = list.get(i); System.out.println("name = " + p.getName()); } } private void showAnimalList(List<Animal> list){ if(list==null) return ; for(int i = 0 ; i < list.size() ; i++){ Animal animal = list.get(i); System.out.println("name = " + animal.getName() ); } } @Test public void testSearchPerson2() throws NamingException { InitialContext context; try { context = new InitialContext(); PersonManager personManager = (PersonManager)context.lookup("personManager/remote"); List list = personManager.searchPerson2(); showList(list); } catch (NamingException e) { e.printStackTrace(); } } @Test public void testSearchPerson3() throws NamingException { InitialContext context; try { context = new InitialContext(); PersonManager personManager = (PersonManager)context.lookup("personManager/remote"); List list = personManager.searchPerson3(); showList(list); } catch (NamingException e) { e.printStackTrace(); } } @Test public void testSearchAnimals() throws NamingException { InitialContext context; try { context = new InitialContext(); PersonManager personManager = (PersonManager)context.lookup("personManager/remote"); List list = personManager.searchAnimals(); showAnimalList(list); } catch (NamingException e) { e.printStackTrace(); } } @Test public void testSearchAllAnimals() throws NamingException { InitialContext context; try { context = new InitialContext(); PersonManager personManager = (PersonManager)context.lookup("personManager/remote"); List list = personManager.searchAllAnimals(); showAnimalList(list); } catch (NamingException e) { e.printStackTrace(); } } }
persistence.xml
<?xml version="1.0" encoding="UTF-8"?> <persistence 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" version="1.0"> <persistence-unit name="curdUnit" transaction-type="JTA"> <jta-data-source>java:/MySqlDS</jta-data-source> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" /> <property name="hibernate.hbm2ddl.auto" value="update"/> </properties> </persistence-unit> </persistence>
jndi.properties
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory java.naming.provider.url=localhost java.naming.factory.url.pkgs=org.jboss.naming\:org.jnp.interfaces
相关文章推荐
- iOS开发之Masonry框架源码深度解析
- 4.5 堆排序法
- Java虚拟机——类的结构与加载
- 【Leetcode】之Remove Duplicates from Sorted List II
- 4.4 简单选择排序法
- JTA 分布式事务
- Linux系统调用和库函数调用的区别
- 4.3 快速排序法
- 4.2 冒泡排序法
- Linux系统调用和库函数调用的区别
- 集合框架
- 2016/7/18
- hjr-ASP.NET:asp .net web api
- 4.1 排序概述
- MySQL 1064 错误解决方法
- 3.2 网状关系:图(2)
- [LintCode] Generate Parentheses 生成括号
- CCNP笔记——MST上
- 大数相加+斐波那契数列(1)
- LINUX-内核-中断分析-中断向量表(1)-x86