(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="org.hibernate.dialect.MySQL5Dialect"/> <property name="hibernate.connection.driver_class" value="org.gjt.mm.mysql.Driver"/> <property name="hibernate.connection.username" value="root"/> <property name="hibernate.connection.password" value="123456789"/> <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/jpatest?useUnicode=true&characterEncoding=UTF-8"/> <property name="hibernate.hbm2ddl.auto" value="update"/> </properties> </persistence-unit> </persistence>
(6)然后运行测试程序PersonTest
在数据库中得到结果
时间: 2024-10-22 21:57:53