• JPA初体验(使用Hibernate4实现)


      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文件

        

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" 
     3             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     4             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
     5             http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
     6             
     7     <!-- 为持久化单元取名为 myJPA -->
     8     <persistence-unit name="myJPA" transaction-type="RESOURCE_LOCAL">
     9         <properties>
    10             <!--配置Hibernate方言 -->
    11             <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
    12             <!--配置数据库驱动 -->
    13             <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
    14             <!--配置数据库用户名 -->
    15             <property name="hibernate.connection.username" value="root" />
    16             <!--配置数据库密码 -->
    17             <property name="hibernate.connection.password" value="root" />
    18             <!--配置数据库url -->
    19             <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/jpa?useUnicode=true&amp;characterEncoding=UTF-8" />
    20             <!--设置外连接抓取树的最大深度 -->
    21             <property name="hibernate.max_fetch_depth" value="3" />
    22             <!--自动输出schema创建DDL语句 -->
    23             <property name="hibernate.hbm2ddl.auto" value="update" />    
    24         </properties>
    25     </persistence-unit>
    26             
    27 </persistence>

      

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

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


      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 @Entity
    10 @Table(name="t_user")
    11 public class User {
    12     
    13     /**
    14      * 主键
    15      */
    16     @Id
    17     @GeneratedValue
    18     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     @Before
     19     public void before() {
     20         //根据在persistence.xml中配置的persistence-unit name 创建EntityManagerFactory
     21         emf = Persistence.createEntityManagerFactory("myJPA");
     22     }
     23     
     24     /**
     25      * 添加用户
     26      */
     27     @Test
     28     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         //关闭EntityManager
     44         em.close();
     45     }
     46     
     47     /**
     48      * 修改用户(用户处于托管状态)
     49      */
     50     @Test
     51     public void modifyUser1() {
     52         EntityManager em = emf.createEntityManager();
     53         em.getTransaction().begin();
     54         //查找id为1的User,进行更新
     55         User user = em.find(User.class, 1L);//User 的主键id为Long型
     56         user.setName("楚留香");
     57         em.getTransaction().commit();
     58         em.close();
     59     }
     60     
     61     /**
     62      * 修改用户(用户处于游离(脱管)状态)
     63      */
     64     @Test
     65     public void modifyUser2() {
     66         EntityManager em = emf.createEntityManager();
     67         em.getTransaction().begin();
     68         //查找id为1的User,进行更新
     69         User user = em.find(User.class, 1L);//User 的主键id为Long型
     70         em.clear();//将实体管理器中的所有实体变成了游离态(脱管)
     71         user.setName("李寻欢");
     72         em.merge(user);//处于游离态的实体必须使用该方法才能更新
     73         em.getTransaction().commit();
     74         em.close();
     75     }
     76     
     77     
     78     
     79     /**
     80      * 删除用户
     81      */
     82     @Test
     83     public void deleteUser() {
     84         EntityManager em = emf.createEntityManager();
     85         em.getTransaction().begin();
     86         //查找id为1的User
     87         User user = em.find(User.class, 1L);//User 的主键id为Long型
     88         //进行删除
     89         em.remove(user);
     90         em.getTransaction().commit();
     91         em.close();
     92     }
     93     
     94     /**
     95      * 关闭EntityManagerFactory
     96      */
     97     @After
     98     public void after() {
     99         if(null != emf) {
    100             emf.close();
    101         }
    102     }
    103 
    104 }

      6、一些说明。

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

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

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

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

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

      

       

      

  • 相关阅读:
    (十三)学习CSS之两个class连一起隔空格和逗号
    (十二)学习CSS之box-sizing 属性
    (五)学习JavaScript之firstChild 属性
    (四)学习JavaScript之className属性
    (三)学习JavaScript之getElementsByTagName方法
    两张表一对多的连接,取多记录表中最新的一条数据
    oracle 快照
    Linux常用命令大全
    baidu 快递查询API
    oracle 触发器实现主键自增
  • 原文地址:https://www.cnblogs.com/luxh/p/2512477.html
Copyright © 2020-2023  润新知