首页 > 代码库 > JPA开发环境的搭建和第一个测试程序【完整jar在里边哦】

JPA开发环境的搭建和第一个测试程序【完整jar在里边哦】


(1)新建一个Java项目,例如我的如下:


(2)其中只关心上图中标记的两个包com.lc.bean  和  com.lc.junitTest

现创建lib目录 加入以下jar(免费下载地址:http://yunpan.cn/cfmcLktnMvGwB   提取码 8efe)


另外还要加入你们自己的数据库驱动包哦!


(3)其中Person类为实体类,代码如下:

package com.lc.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.GenerationType;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

//是在javax.persistance包下的

@Entity
@Table(name = "person")
public class Person {

	private Integer id;
	private String name;
	private Date birthday;
	private Gender gender = Gender.MAN;
	private String info;
	public Byte[] file;
	private String imagepath;

	/*
	 * 需要提供一个默认的无参构造函数
	 */
	public Person() {
		super();
	}

	public Person(String name) {
		this.name = name;
	}

	/*
	 * 每一个实体 都需要一个实体标示符;标注在字段上 或者在get方法中(通常在get方法中)
	 */

	// 主键生成策略 --或者可以写成@GeneratedValue 因为默认的为auto
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	// 这里的name是数据库中的字段
	@Column(length = 10, nullable = false, name = "name")
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	// 格式化日期 不保留最后的时间 只保留 日期
	@Temporal(TemporalType.DATE)
	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	// 枚举类型的注解方式 保存字符串到数据库 枚举类型 不准为空
	@Enumerated(EnumType.STRING)
	@Column(length = 5, nullable = false)
	public Gender getGender() {
		return gender;
	}

	public void setGender(Gender gender) {
		this.gender = gender;
	}

	// @Lob声明属性对应的数据库是一个大文本数据类型
	@Lob
	public String getInfo() {
		return info;
	}

	public void setInfo(String info) {
		this.info = info;
	}

	// 存放二进制数据、进行延时加载
	@Lob
	@Basic(fetch = FetchType.LAZY)
	public Byte[] getFile() {
		return file;
	}

	public void setFile(Byte[] file) {
		this.file = file;
	}

	// 不需要这个属性和数据库中字段映射 不会被影射
	@Transient
	public String getImagepath() {
		return imagepath;
	}

	public void setImagepath(String imagepath) {
		this.imagepath = imagepath;
	}

}

枚举类型:

package com.lc.bean;

public enum Gender {
	MAN,WOWEN
}


(4)然后我们的测试程序是:

package com.lc.junitTest;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import org.junit.Test;

import com.lc.bean.Person;

public class PersonTest {

	@Test
	public void save() {

		/*
		 * 1.获取sessionFactory对象,这里获取的是 EntityManagerFactory,差不多一个意思
		 */
		// sessionFcatory---session---begin事务
		EntityManagerFactory factory = Persistence
				.createEntityManagerFactory("jpatest");

		EntityManager em = factory.createEntityManager(); // 创建一个实体管理器

		em.getTransaction().begin(); // 开始事务
		em.persist(new Person("徐刘根")); // 保存事务

		em.getTransaction().commit();

		em.close();

	}

}

(5)还有一个persistence.xml文件,这里和hibernate中的配置文件类似,主要是数据库的配置,我这里使用的是mysql,所以有以下的配置

name:表示数据库的名称

transaction-type:表示本地事务

<?xml version="1.0"?>
<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="jpatest" transaction-type="RESOURCE_LOCAL">
      <properties>
         <property name="hibernate.dialect" value=http://www.mamicode.com/"org.hibernate.dialect.MySQL5Dialect"/>>


(6)然后运行测试程序PersonTest

在数据库中得到结果






JPA开发环境的搭建和第一个测试程序【完整jar在里边哦】