您的位置:首页 > 其它

(9) ebj学习: Jpa的增删查改,CURD方法监听和命名查询

2016-07-18 23:43 603 查看
1 整体结构



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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: