1,先加入必要库:
2,在类路径下建立一个src/META-INF/persistence.xml文件,如下图:
3,persistence.xml文件中放入如下内容:
<?xml version="1.0" encoding="UTF-8"?>
<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="jerval" transaction-type="RESOURCE_LOCAL">
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
<property name="hibernate.connection.url" value="jdbc:mysql://localhost/temp?useUnicode=true&characterEncoding=UTF-8" />
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.username" value="root" />
<property name="hibernate.connection.password" value="" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.show_sql" value="true" />
</properties>
</persistence-unit>
</persistence>
注:数据库连接和密码需要修改成自己对应的
3,写实体类:
package com.jerval.jpa.domain;
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;
import javax.persistence.Version;
/**
* 人员实体类
* @author Jerval
*
*/
@Entity @Table(name = "t_person")
public class Person {
private Integer id;
private String name;
private PersonGender personGender = PersonGender.MAN;
private Date birthday;
private String info ;
private Byte[] file;
private String imagePath;
private Integer version;
@Version //数据版本
public Integer getVersion() {
return version;
}
public void setVersion(Integer version) {
this.version = version;
}
@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;
}
@Temporal(TemporalType.DATE) //时间映射
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Enumerated(EnumType.STRING) //枚举映射
@Column(nullable=false,length=6)
public PersonGender getPersonGender() {
return personGender;
}
public void setPersonGender(PersonGender personGender) {
this.personGender = personGender;
}
@Column(length = 10, nullable = false, name = "c_name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Id @GeneratedValue//主键生成策略,与@GeneratedValue(strategy=GenerationType.AUTO)相同
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
4,用到的枚举类:
package com.jerval.jpa.domain;
public enum PersonGender {
MAN,WOMAN
}
5,测试代码:
@Test
public void save() {
EntityManagerFactory factory = Persistence
.createEntityManagerFactory("jerval");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();
Person person = new Person();
person.setName("杰威");
person.setPersonGender(PersonGender.WOMAN);
person.setBirthday(new Date());
person.setInfo("测试一下大文本方式来放文本信息");
em.persist(person);
em.getTransaction().commit();
em.close();
factory.close();
}
OK,到此完成,测试一下是否成功!看看数据库是不是生成了相应的表和插入了相应的数据呢???!!!!!
下面是附的其它例子中测试的代码(可能要做部分修改):
package junit.test;
import java.util.Date;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import org.junit.Test;
import com.jerval.jpa.domain.Person;
import com.jerval.jpa.domain.PersonGender;
public class PersonTest {
/*
* 增,删,改都必须要有事务支持,否则不能执行
*/
@Test
public void save() {
EntityManagerFactory factory = Persistence
.createEntityManagerFactory("jerval");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();
Person person = new Person();
// person.setId("aaa");
person.setName("杰威");
person.setPersonGender(PersonGender.WOMAN);
person.setBirthday(new Date());
person.setInfo("测试一下大文本方式来放文本信息");
em.persist(person);
em.getTransaction().commit();
em.close();
factory.close();
}
// 相当于Hibernate中的get方法
@Test
public void find() {
EntityManagerFactory factory = Persistence
.createEntityManagerFactory("jerval");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();
Person person = em.find(Person.class, 1);
System.out.println(person.getName());
em.getTransaction().commit();
em.close();
factory.close();
}
// 相当于Hibernate中的load方法
@Test
public void reference() {
EntityManagerFactory factory = Persistence
.createEntityManagerFactory("jerval");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();
Person person = em.getReference(Person.class, 1);
System.out.println(person.getName());
em.getTransaction().commit();
em.close();
factory.close();
}
@Test
public void update() {
EntityManagerFactory factory = Persistence
.createEntityManagerFactory("jerval");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();
Person person = em.find(Person.class, 1);
person.setName("aaa");
em.getTransaction().commit();
em.close();
factory.close();
}
@Test
public void delete() {
EntityManagerFactory factory = Persistence
.createEntityManagerFactory("jerval");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();
Person person = em.find(Person.class, 1);
em.remove(person);
em.getTransaction().commit();
em.close();
factory.close();
}
@SuppressWarnings("unchecked")
@Test
public void query() {
EntityManagerFactory factory = Persistence
.createEntityManagerFactory("jerval");
EntityManager em = factory.createEntityManager();
/*
* 采用占位查询,问号后的数字可以指定参数的开始索引 Query query =
* em.createQuery("select o from Person o where id = ?100");
* query.setParameter(100, 2);
*/
/* 采用命名空间查询 */
// Query query =
// em.createQuery("select o from Person o where o.id = :id");
Query query = em.createQuery("select o from Person o ");
// query.setParameter("id", 1);
// query.setParameter("name", 1);
// Person person = (Person) query.getSingleResult();
List<Person> persons = query.getResultList();
for (Person person : persons) {
System.out.println(person.getName());
}
// query = em.createQuery("select count(*) from Person");也可以
// query = em.createQuery("select count(o) from Person o where 1=1");
// System.out.println(query.getSingleResult());
em.close();
factory.close();
}
@Test
public void deleteQuery() {
EntityManagerFactory factory = Persistence
.createEntityManagerFactory("jerval");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();
Query query = em.createQuery("delete from Person o where o.id = :id");
query.setParameter("id", 3);
query.executeUpdate();
em.getTransaction().commit();
em.close();
factory.close();
}
@Test
public void updateQuery() {
EntityManagerFactory factory = Persistence
.createEntityManagerFactory("jerval");
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", "aaaa");
query.setParameter("id", 2);
query.executeUpdate();
em.getTransaction().commit();
em.close();
factory.close();
}
}