jpa对单个实体bean的crud操作

来源:互联网 发布:小米 数据分析师 编辑:程序博客网 时间:2024/06/05 14:08

使用注解方式。


底层还是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;/**不映射数据库字段**/@Transientpublic 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;}@Lobpublic 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 {@BeforeClasspublic 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();         }   }

0 0
原创粉丝点击