JPA的PAI测试

/**
 * 其中EntityManagerFactory相当于hibernate 中SessionFactory
 *    EntityManager相当于hibernate中session
 */


import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;


import org.junit.After;
import org.junit.Before;
import org.junit.Test;


import com.jpa.java.orm.Customer;


public class EntityTest {
private EntityManagerFactory entityManagerFactory=null;
    private EntityManager entityManager=null;
    private EntityTransaction entityTransaction=null;
    @Before
    public void init(){
    entityManagerFactory=Persistence.createEntityManagerFactory("jpa");
    entityManager=entityManagerFactory.createEntityManager();
    entityTransaction=entityManager.getTransaction();
    entityTransaction.begin();
    }
    @After
    public void dstroy(){
    entityTransaction.commit();//一般是提交事务的时候刷新缓存
    entityManager.close();
    entityManagerFactory.close();
    }
    //find方法相当于hibernate中get方法
@Test
public void testFind() {
//直接向数据库发送sql
Customer cus=entityManager.find(Customer.class,1);
//会先执行sql语句再打印---------
System.out.println("-------------------------------");
System.out.println(cus.getInfo());
}
//getReference相当于hibernate中的load方法
@Test
public void testLoad(){
//先返回代理,再向数据库发送sql
        Customer cus=entityManager.getReference(Customer.class,1);
        //会先打印---------再执行sql语句()
        System.out.println("-------------------------------");
System.out.println(cus.getInfo());
}
//persist相当于hibernate中的save方法
@Test  //若设置值则会抛出异常
public void testSave(){
//持久化操作
    Customer cus=new Customer();
    cus.setUsername("追风");
    cus.setAge(23);
    cus.setEmail("12122121@qq.com");
    entityManager.persist(cus);
}
//类似与hibernate的delete方法。只能移除持久化对象,hibernate能移除普通对象
@Test
public void testRemove(){
//Customer cus=new Customer();  //非持久化对象
//cus.setId(2);  
Customer cus=entityManager.find(Customer.class, 2); //创建持久化对象
entityManager.remove(cus);
}
//类似与hibernate的saveOrUpdate方法
//传入一个临时对象-->会创建一个新的对象,把临时对象的属性赋值到新的对象中,然后对习对象做insert持久化操作
@Test
public void testMerge1(){
//临时对象
Customer cus=new Customer(); 
cus.setUsername("fangxu");
cus.setAge(21);
cus.setEmail("322332@qq.com");
//新对象
Customer customer=entityManager.merge(cus);
//新对象中有ID临时对象中没有id
System.out.println(cus.getId()+customer.getId());
}
@Test
public void testMerge2(){
//游离对象
Customer cus=new Customer(); 
cus.setUsername("fangxu");
cus.setAge(21);
cus.setEmail("322332@qq.com");
cus.setId(4);//会先查看对象存在不存在,存在查询,不存在再insert.有字段更新会自动进行update操作
//新对象
Customer customer=entityManager.merge(cus);
//新对象中有ID临时对象中没有id
System.out.println("cus.id="+cus.getId()+" customer.id="+customer.getId()+"  customer="+customer.getInfo());
}
//同hibernate中session的flush发相同
@Test
public void testFlush(){
Customer cus=entityManager.find(Customer.class,1);
System.out.println(cus);
        cus.setUsername("hawei");
        entityManager.flush();//
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值