一: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();
}
@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