JPA环境搭建及基础映射

 1,先加入必要库:
JPA环境搭建及基础映射
2,在类路径下建立一个src/META-INF/persistence.xml文件,如下图:
JPA环境搭建及基础映射
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&amp;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();
	}
}
 

你可能感兴趣的:(mysql,Hibernate,xml,jpa,JUnit)