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


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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值