博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JPA初体验(使用Hibernate4实现)
阅读量:4113 次
发布时间:2019-05-25

本文共 4318 字,大约阅读时间需要 14 分钟。

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

  这两个目录下的所有jar是我们体验JPA所必需的。

 


 

  2、新建一个Java Project。

  2.1 导入hibernate-release-4.1.1.Final\lib\jpa目录和hibernate-release-4.1.1.Final\lib\required目录下的所有jar;导入mysql的数据库驱动包。

  2.2 在项目的classpath路径下建立META-INF目录

        在META-INF目录下建立persistence.xml文件

    

  

  用的是mysql,请建立一个名叫jpa的数据库:create database jpa default character set utf8;

  无需手动建表,执行测试的时候会自动建表

 


 

  3、项目视图如下:

  

 


 

  4、编写实体类。

  

package com.cndatacom.jpa.entity;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.Table;@Entity@Table(name="t_user")public class User {        /**     * 主键     */    @Id    @GeneratedValue    private Long id;        /**     * 名字     */    @Column(name="name")    private String name;        /**     * 密码     */    @Column(name="password")    private String password;    public Long getId() {        return id;    }    public void setId(Long id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    }

5、编写测试类。

  

package com.cndatacom.jpa.test;import javax.persistence.EntityManager;import javax.persistence.EntityManagerFactory;import javax.persistence.Persistence;import org.junit.After;import org.junit.Before;import org.junit.Test;import com.cndatacom.jpa.entity.User;public class TestJPA {        EntityManagerFactory emf = null;        @Before    public void before() {        //根据在persistence.xml中配置的persistence-unit name 创建EntityManagerFactory        emf = Persistence.createEntityManagerFactory("myJPA");    }        /**     * 添加用户     */    @Test    public void addUser() {                //创建一个用户        User user = new User();        user.setName("叶开");        user.setPassword("yekai");                //创建实体管理器对象        EntityManager em = emf.createEntityManager();        //开启事务        em.getTransaction().begin();        //持久化对象        em.persist(user);        //提交事务        em.getTransaction().commit();        //关闭EntityManager        em.close();    }        /**     * 修改用户(用户处于托管状态)     */    @Test    public void modifyUser1() {        EntityManager em = emf.createEntityManager();        em.getTransaction().begin();        //查找id为1的User,进行更新        User user = em.find(User.class, 1L);//User 的主键id为Long型        user.setName("楚留香");        em.getTransaction().commit();        em.close();    }        /**     * 修改用户(用户处于游离(脱管)状态)     */    @Test    public void modifyUser2() {        EntityManager em = emf.createEntityManager();        em.getTransaction().begin();        //查找id为1的User,进行更新        User user = em.find(User.class, 1L);//User 的主键id为Long型        em.clear();//将实体管理器中的所有实体变成了游离态(脱管)        user.setName("李寻欢");        em.merge(user);//处于游离态的实体必须使用该方法才能更新        em.getTransaction().commit();        em.close();    }                /**     * 删除用户     */    @Test    public void deleteUser() {        EntityManager em = emf.createEntityManager();        em.getTransaction().begin();        //查找id为1的User        User user = em.find(User.class, 1L);//User 的主键id为Long型        //进行删除        em.remove(user);        em.getTransaction().commit();        em.close();    }        /**     * 关闭EntityManagerFactory     */    @After    public void after() {        if(null != emf) {            emf.close();        }    }}

 

 

 


 

  6、一些说明。

  @Entity 将领域标注为一个实体,表示要保存到数据库中。

  @Table 指定在数据库中对应的表名

  @Id 对应的属性是表的主键

  @GeneratedValue 主键的产生策略,这里表示使用默认的GenerationType.AUTO

  @Column 属性对应数据库表中的列,name指定列名,不写name的话,属性名和列名一致。

转载地址:http://mcrsi.baihongyu.com/

你可能感兴趣的文章
day-03JavaSE_循环
查看>>
Mysql初始化的命令
查看>>
day_21_0817_Mysql
查看>>
day-22 mysql_SQL 结构化查询语言
查看>>
MySQL关键字的些许问题
查看>>
浅谈HTML
查看>>
css基础
查看>>
HTML&CSS进阶
查看>>
Servlet进阶和JSP基础
查看>>
servlet中的cookie和session
查看>>
过滤器及JSP九大隐式对象
查看>>
软件(项目)的分层
查看>>
菜单树
查看>>
MySQL-分布式架构-MyCAT
查看>>
设计模式六大原则(6):开闭原则
查看>>
阿里面试总结--JAVA
查看>>
Servlet的生命周期
查看>>
JAVA八大经典书籍,你看过几本?
查看>>
《读书笔记》—–书单推荐
查看>>
【设计模式】—-(2)工厂方法模式(创建型)
查看>>