JPA学习记录五(使用JPA加载_更新_删除对象及使用JPQL语句进行查询)

本文详细记录了使用JPA进行对象的保存、读取、更新和删除操作,探讨了实体的不同状态,包括新建、托管和游离状态,并介绍了如何利用JPQL语句进行数据的删除查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:JPA保存对象

     事务主要用在数据的更改操作,读取数据不用事务

public void save() throws Exception  {
     EntityManagerFactory factory = Persistence.createEntityManagerFactory("persistUnitName");
     EntityManager em = factory.createEntityManager();
     em.getTransaction().begin();
     Person person = new Person();
     Date bir=new Date();
     SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
     bir=format.parse("2012-11-23");
     person.setBirthday(bir);
     person.setName("哈哈");
     em.persist(person);
     //em.persist(new Person("哈哈"));//需要在person中定义构造函数,一个无参数的和一个有参数的
     em.getTransaction().commit();
     em.close();
     factory.close();
	}


二:JPA读取对象

@Test//读取事务时不用事务,只有数据更改时需要事务
	public void getPerson() {
     EntityManagerFactory factory = Persistence.createEntityManagerFactory("persistUnitName");
     EntityManager em = factory.createEntityManager();
     Person person=em.find(Person.class, 1);//find()方法,通过数据表的主键进行查找,此处是id的值
     System.out.println(person.getName());
     em.close();
     factory.close();
	}

@Test//读取事务时不用事务,只有数据更改时需要事务
	public void getPerson() {
     EntityManagerFactory factory = Persistence.createEntityManagerFactory("persistUnitName");
     EntityManager em = factory.createEntityManager();
     Person person=em.find(Person.class, 1);//find()方法,通过数据表的主键进行查找,此处是id的值
     System.out.println(person.getName());
     em.close();
     factory.close();
	}



三:JPA更新对象

实体状态:new 新建状态   managed 托管     游离(脱管)     删除

@Test//读取事务时不用事务,只有数据更改时需要事务
	public void getPerson() {
     EntityManagerFactory factory = Persistence.createEntityManagerFactory("persistUnitName");
     EntityManager em = factory.createEntityManager();
     Person person=em.find(Person.class, 1);//find()方法,通过数据表的主键进行查找,此处是id的值
     System.out.println(person.getName());
     em.close();
     factory.close();
	}

@Test
	public void updatePerson2() {
		EntityManagerFactory factory = Persistence.createEntityManagerFactory("persistUnitName");
	     EntityManager em = factory.createEntityManager();
	     em.getTransaction().begin();//开启事务
	     Person person = em.find(Person.class, 1);//managed 托管状态
	     em.clear();//把实体管理器中的所有实体变成游离状态
	     person.setName("老散");
	     em.merge(person);//把游离状态的实体同步到数据库
	     em.getTransaction().commit();
	     em.close();
	     factory.close();
	    
	}




四:JPA删除对象

@Test//读取事务时不用事务,只有数据更改时需要事务
	public void delete() {
		EntityManagerFactory factory = Persistence.createEntityManagerFactory("persistUnitName");
	     EntityManager em = factory.createEntityManager();
	     em.getTransaction().begin();//开启事务
	     Person person = em.find(Person.class, 1);//managed 托管状态
	     em.remove(person);//删除
	     em.getTransaction().commit();
	     em.close();
	     factory.close();
	    
	}




五:JPQL查询数据

@Test//查询数据,面向对象所以用select o (o 对象的别名)
	public void query() {
		EntityManagerFactory factory = Persistence.createEntityManagerFactory("persistUnitName");
	     EntityManager em = factory.createEntityManager();
	     //容易sql攻击select o from Person o where id="+name
	     Query query=em.createQuery("select o from Person o where o.id=?1");//位参数查询
	     query.setParameter(1, 1);
	     Person person=(Person) query.getSingleResult();//单结果
	     System.out.println(person.getName());
	     //多结果
	     List<Person> persons = query.getResultList();
	     for(Person persona:persons)
	    	 System.out.println(persona.getName());
	     em.close();
	     factory.close();
	    
	}



六:JPQL更新查询数据

@Test//查询数据,面向对象所以有select o
	public void queryupdate() {
		EntityManagerFactory factory = Persistence.createEntityManagerFactory("persistUnitName");
	     EntityManager em = factory.createEntityManager();
	     em.getTransaction().begin();//开启事务
	     Query query=em.createQuery("update Person o  set o.name=:name  where o.id=:id");//命名参数查询
	     query.setParameter("name", "xxxx");
	     query.setParameter("id", 3);
	     query.executeUpdate();
	     em.getTransaction().commit();
	     em.close();
	     factory.close();
	    
	}


七:JPQL删除查询数据

	@Test//查询数据,面向对象所以有select o
	public void deletequery() {
		EntityManagerFactory factory = Persistence.createEntityManagerFactory("persistUnitName");
	     EntityManager em = factory.createEntityManager();
	     em.getTransaction().begin();//开启事务
	     Query query=em.createQuery("delete o from Person o where o.id=?1");//位参数查询
	     query.setParameter(1, 1);
	     query.executeUpdate();
	     em.getTransaction().commit();
	     em.close();
	     factory.close();
	    
	}



源码下载:http://download.youkuaiyun.com/detail/u013030488/9835946

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值