您的位置:首页 > 其它

jpa对单个实体bean的crud操作

2014-07-27 22:05 381 查看
使用注解方式。

底层还是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();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐