JPA初体验_MySQL
JPA,一套相当优秀的持久化规范,开始体验。
1、我使用Hibernate对JPA提供的实现,下载hibernate-release-4.1.1.Final.zip。解压。
在hibernate-release-4.1.1.Final/lib目录下有四个存放jar包的目录,其中
hibernate-release-4.1.1.Final/lib/jpa 存放hibernate对JPA提供实现的jar
hibernate-release-4.1.1.Final/lib/required 存放hibernate开发所需jar
这两个目录下的所有jar是我们体验JPA所必需的。
2、新建一个Java Project。
2.1 导入hibernate-release-4.1.1.Final/lib/jpa目录和hibernate-release-4.1.1.Final/lib/required目录下得所有jar
2.2 在项目的classpath路径下建立META-INF目录
在META-INF目录下建立persistence.xml文件
1 26 7 8 9 26 2710 11 2512 13 14 15 16 17 18 19 20 21 22 23 24
用的是mysql,请建立一个名叫jpa的数据库。无需手动建表,执行测试的时候会自动建表。
3、项目视图如下:
4、编写实体类。
1 package com.cndatacom.jpa.entity; 2 3 import javax.persistence.Column; 4 import javax.persistence.Entity; 5 import javax.persistence.GeneratedValue; 6 import javax.persistence.Id; 7 import javax.persistence.Table; 8 9 @Entity10 @Table(name="t_user")11 public class User {12 13 /**14 * 主键15 */16 @Id17 @GeneratedValue18 private Long id;19 20 /**21 * 名字22 */23 @Column(name="name")24 private String name;25 26 /**27 * 密码28 */29 @Column(name="password")30 private String password;31 32 public Long getId() {33 return id;34 }35 36 public void setId(Long id) {37 this.id = id;38 }39 40 public String getName() {41 return name;42 }43 44 public void setName(String name) {45 this.name = name;46 }47 48 public String getPassword() {49 return password;50 }51 52 public void setPassword(String password) {53 this.password = password;54 }55 56 }
5、编写测试类。
1 package com.cndatacom.jpa.test; 2 3 import javax.persistence.EntityManager; 4 import javax.persistence.EntityManagerFactory; 5 import javax.persistence.Persistence; 6 7 import org.junit.After; 8 import org.junit.Before; 9 import org.junit.Test;10 11 import com.cndatacom.jpa.entity.User;12 13 14 public class TestJPA {15 16 EntityManagerFactory emf = null;17 18 @Before19 public void before() {20 //根据在persistence.xml中配置的persistence-unit name 创建EntityManagerFactory21 emf = Persistence.createEntityManagerFactory("myJPA");22 }23 24 /**25 * 添加用户26 */27 @Test28 public void addUser() {29 30 //创建一个用户31 User user = new User();32 user.setName("叶开");33 user.setPassword("yekai");34 35 //创建实体管理器对象36 EntityManager em = emf.createEntityManager();37 //开启事务38 em.getTransaction().begin();39 //持久化对象40 em.persist(user);41 //提交事务42 em.getTransaction().commit();43 //关闭EntityManager44 em.close();45 }46 47 /**48 * 修改用户49 */50 @Test51 public void modifyUser() {52 EntityManager em = emf.createEntityManager();53 em.getTransaction().begin();54 //查找id为1的User55 User user = em.find(User.class, 1L);//User 的主键id为Long型56 user.setName("李坏");57 //进行更新58 em.merge(user);59 em.getTransaction().commit();60 em.close();61 }62 63 /**64 * 删除用户65 */66 @Test67 public void deleteUser() {68 EntityManager em = emf.createEntityManager();69 em.getTransaction().begin();70 //查找id为1的User71 User user = em.find(User.class, 1L);//User 的主键id为Long型72 //进行删除73 em.remove(user);74 em.getTransaction().commit();75 em.close();76 }77 78 /**79 * 关闭EntityManagerFactory80 */81 @After82 public void after() {83 if(null != emf) {84 emf.close();85 }86 }87 88 }
6、一些说明。
@Entity 将领域标注为一个实体,表示要保存到数据库中。
@Table 指定在数据库中对应的表名
@Id 对应的属性是表的主键
@GeneratedValue 主键的产生策略,这里表示使用默认的GenerationType.AUTO
@Column 属性对应数据库表中的列,name指定列名,不写name的话,属性名和列名一致。
bitsCN.com