jpa对单个实体bean的crud操作
2014-07-27 22:05
381 查看
使用注解方式。
底层还是hibernate的实现,jpa是通过一个数据库驱动的桥梁和hibernate进行操作的,进而调用hibernate的实现。
底层还是hibernate的实现,jpa是通过一个数据库驱动的桥梁和hibernate进行操作的,进而调用hibernate的实现。
<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="itcast" > <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/> <property name="hibernate.hbm2ddl.auto" value="update"/> <property name = "hibernate.connection.driver_class" value = "com.mysql.jdbc.Driver"/> <property name = "hibernate.connection.url" value = "jdbc:mysql://localhost:3306/Mysqldb"/> <property name = "hibernate.connection.username" value = "root"/> <property name = "hibernate.connection.password" value = "123456"/> </properties> </persistence-unit> </persistence>
package cn.itcast.bean; public enum Gender { MAN,WOMEN }
package cn.itcast.bean; import java.util.Date; import javax.persistence.Basic; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Lob; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.Transient; @Entity//指定该类为实体bean,对应数据库中的表 @Table(name="person")//利用该注解可以修改表名 public class Person { private Integer id; private String name; private Date birthday; private Gender gender=Gender.MAN; private String info; private Byte[] file; private String imagepath; /**不映射数据库字段**/ @Transient public String getImagepath() { return imagepath; } public void setImagepath(String imagepath) { this.imagepath = imagepath; } /**大字段,延时加载**/ @Lob @Basic(fetch=FetchType.LAZY) public Byte[] getFile() { return file; } public void setFile(Byte[] file) { this.file = file; } @Lob public String getInfo() { return info; } public void setInfo(String info) { this.info = info; } /**枚举**/ @Enumerated(EnumType.STRING)@Column(length=5,nullable=false) public Gender getGender() { return gender; } public void setGender(Gender gender) { this.gender = gender; } /**日期**/ @Temporal(TemporalType.DATE)//映射到数据库中的字段是日期类型的注解 public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public Person() {}//必须要有无参数的构造函数 public Person(String name) { this.name = name; } @Id @GeneratedValue public Integer getId() {//每个实体都要有唯一的标识,即主键。@GeneratedValue注解表示的意思是主键自动增长,从1开始 return id; } public void setId(Integer id) { this.id = id; } @Column(length=10,nullable=false,name="personName")//@Column注解:指定长度为10,不可为空,数据库中的字段名字为personName //(不指定名字的话默认数据库中就是属性名即name) public String getName() { //String类型的字段必须要自己手动指定长度,数据库默认就是255个字节,不需要这么大,自己手动指定为10个字节 return name; } public void setName(String name) { this.name = name; } }
package junit.test; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import javax.persistence.Query; import org.junit.BeforeClass; import org.junit.Test; import cn.itcast.bean.Person; public class PersonTest { @BeforeClass public static void setUpBeforeClass() throws Exception { } @Test public void save(){ EntityManagerFactory factory=Persistence.createEntityManagerFactory("itcast");//里面的参数值是配置文件中的 <persistence-unit name="itcast" > EntityManager em=factory.createEntityManager(); em.getTransaction().begin();//开启事务 em.persist(new Person("中文"));//保存操作 em.getTransaction().commit();//提交事务 em.close();//关闭事务 factory.close(); //关闭工厂类 } /**读取数据不需要开事务,有数据更改动作(添、删、改)时才开启事务**/ @Test public void getPerson(){ EntityManagerFactory factory=Persistence.createEntityManagerFactory("itcast"); EntityManager em=factory.createEntityManager(); Person person=em.find(Person.class,1); em.refresh(person);//若直接更改了数据库中的数据,应该用refresh刷新一下数据库的动态变化,保证输出正确结果 System.out.println(person.getName()); em.close(); factory.close(); } @Test public void getPerson2(){ EntityManagerFactory factory=Persistence.createEntityManagerFactory("itcast"); EntityManager em=factory.createEntityManager(); /**getReference方法返回一个代理对象,只有对该代理对象的属性访问时,才会从数据库中得到该条记录(即发生数据的加载行为)**/ Person person=em.getReference(Person.class,1);//调用getReference方法时,确保没有关闭em /**若查找不到id为1的记录,会在对该代理对象的属性访问时,抛出异常。**/ System.out.println(person.getName()); em.close(); factory.close(); } @Test public void updatePerson(){ EntityManagerFactory factory=Persistence.createEntityManagerFactory("itcast"); EntityManager em=factory.createEntityManager(); em.getTransaction().begin(); Person person=em.find(Person.class,1); person.setName("老张");//直接这样就能修改,不需要再通过em调用其他方法 em.getTransaction().commit(); em.close(); factory.close(); } @Test public void updatePerson2(){ EntityManagerFactory factory=Persistence.createEntityManagerFactory("itcast"); EntityManager em=factory.createEntityManager(); em.getTransaction().begin(); Person person=em.find(Person.class,1); em.clear();//将实体管理器中的所有实体变为游离状态 /**游离状态的实体无法更新字段**/ person.setName("老陈"); em.merge(person);//将游离状态的实体同步更新进数据库中 em.getTransaction().commit(); em.close(); factory.close(); } @Test public void deletePerson(){ EntityManagerFactory factory=Persistence.createEntityManagerFactory("itcast"); EntityManager em=factory.createEntityManager(); em.getTransaction().begin(); Person person=em.find(Person.class,1); em.remove(person); em.getTransaction().commit(); em.close(); factory.close(); } /**JPQL语言**/ @Test public void queryPerson(){ EntityManagerFactory factory=Persistence.createEntityManagerFactory("itcast"); EntityManager em=factory.createEntityManager(); 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 person:persons) { System.out.println(person.getName()); } em.close(); factory.close(); } @Test public void delete(){ EntityManagerFactory factory=Persistence.createEntityManagerFactory("itcast"); EntityManager em=factory.createEntityManager(); em.getTransaction().begin(); Query query=em.createQuery("delete from Person o where o.id=?1"); query.setParameter(1,1); query.executeUpdate(); em.getTransaction().commit(); em.close(); factory.close(); } @Test public void update(){ EntityManagerFactory factory=Persistence.createEntityManagerFactory("itcast"); 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","xxx"); query.setParameter("id",2); query.executeUpdate(); em.getTransaction().commit(); em.close(); factory.close(); } }
相关文章推荐
- JPA的CRUD操作,映射实体
- 传智播客--JPA的CRUD操作,映射实体
- JPA学习笔记---JPA实体Bean的建立---链接上一个博文:对实体Bean中属性进行操作:保存日期类型,设置字段的长度,名字,是否为空,可以声明枚举字段;可以存放二进制数据,可以存放
- jpa入门之环境搭建和CRUD基本操作
- 在JBOSS中操作实体BEAN
- 巴巴运动网学习笔记三之产品分类实体对象基本属性的JPA映射,用泛型技术对产品分类的业务管理Bean抽象,单元测试产品分类的业务管理Bean.,重载业务管理Bean的删除方法,
- JPA学习笔记---JPA实体Bean的建立+配置文件+junit测试+自动生成(对应实体Bean的)数据库表+插入数据
- FAQ_EJB3.0_junit测试操作实体bean出现的 not-null property references a null or transient value
- Spring+Jersey+JPA+Hibernate+MySQL实现CRUD操作案例
- JPA---CRUD操作
- JPA学习笔记-EJB-05JPA实体对象状态和实体对象的高级操作--1
- JPA学习笔记-EJB-05JPA实体对象状态和实体对象的高级操作--2(实体监听器)
- 实体bean(六)jpa关系(转)
- 持久化API(JPA)系列(五)控制实体Bean的生命周期
- jpa入门之环境搭建和CRUD基本操作
- jpa入门之环境搭建和CRUD基本操作
- JPA实体状态&联级操作
- JPA学习---第十一节:JPA中的多对多双向关联实体定义与注解设置及操作
- 持久化API(JPA)系列(五)控制实体Bean的生命周期
- 实体bean(entity)配置,jpa增删改api,JPAsql增删改