• JPA使用入门


      JPA能干什么?我在前面一遍文章步了解JPA》基本描述了。不过你不需要点击回去再看。这里简单的再提一下JPA的功能,就是:(1)实现“对象-关系”映射;(2)对象持久化到数据库;(3)对象查询。

      JPA要怎么用,我们直接入手来跑起一个JPA的demo,我这里是采用Hibernate的JPA实现。

      (1)创建一个普通java工程。

      (2)导入必要的包。

        从Hibernate官方下载一个基本包,我这里下载后得到的是hibernate-release-5.0.4.Final.zip。解压后可以文件结构大概如下:

          

        其中lib文件夹就是我们需要导入到项目中的包。简单的实现,导入required、jpa、jpa-metamodel-generator文件夹下的所有jar包既可。

        另外,不要忘了导入JDBC驱动。我这里用的是mysql的。从MySQL官网下的mysql-connector-java-5.1.37.zip。解压导入就行

      (3)创建配置文件

        JPA有一个硬性要求,配置文件必须是类路径下的META-INF目录下的persistence.xml。在我这里可以看到

        

        文件的内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <persistence
      version="1.0"
      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">
      <persistence-unit name="test" transaction-type="RESOURCE_LOCAL">
      <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
        <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
        <property name="hibernate.connection.username" value="root" />
        <property name="hibernate.connection.password" value="root" />
        <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/jpa" />
        <property name="hibernate.max_fetch_depth" value="3" />
        <property name="hibernate.hbm2ddl.auto" value="update" />
      </properties>
      </persistence-unit>
    </persistence>

      如果你的数据库设置和我不一样,自己改一下配置文件。相信一看就懂 ^_^

      (3)代码

      我这里先写两个类。

        

      TestBasic类内容如下:

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

    import entity.Person;

    public class TestBasic {

      public static void main(String[] args) {
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("test");
        EntityManager entityManager = factory.createEntityManager();

        Person person = new Person();
        person.setName("袁");

        entityManager.getTransaction().begin();
        entityManager.persist(person);
        entityManager.getTransaction().commit();

        entityManager.close();
        factory.close();
      }

    }

      Person.java如下:

    package entity;

    import javax.persistence.Entity;
    import javax.persistence.Id;

    @Entity
    public class Person {

      @Id
      private int id;
      private String name;

      public int getId() {
        return id;
      }
      public void setId(int id) {
        this.id = id;
      }
      public String getName() {
        return name;
      }
      public void setName(String name) {
        this.name = name;
      }

    }

      数据库中只是建好了jpa库,里面没有表。

      运行这段代码,就可以看到数据库中表被建立起来了。表名和类名Person有点类似,是person。并且有数据了。

      

      很明显,可以知道这其实就是对数据库的插入操作。那么怎么查询呢。

      在TestBasic类中改一下代码。

      main方法里这样写:

      

    EntityManagerFactory factory = Persistence.createEntityManagerFactory("test");
    EntityManager entityManager = factory.createEntityManager();

    Person person = entityManager.find(Person.class, 0);//刚才在数据库里看到,id是0。
    System.out.println(person.getName());

    entityManager.close();
    factory.close();

      运行代码你会看到打印出“袁”。

      那么改操作呢:

      继续改main方法里的代码:

    EntityManagerFactory factory = Persistence.createEntityManagerFactory("test");
    EntityManager entityManager = factory.createEntityManager();

    entityManager.getTransaction().begin();
    Person person = entityManager.find(Person.class, 0);//刚才在数据库里看到,id是0。
    person.setName("邓");
    entityManager.getTransaction().commit();

    entityManager.close();
    factory.close();

      可以看到数据里的数据变了。

      

      最后一个操作,删除数据。

      main方法中的代码改成如下:

    EntityManagerFactory factory = Persistence.createEntityManagerFactory("test");
    EntityManager entityManager = factory.createEntityManager();

    entityManager.getTransaction().begin();
    Person person = entityManager.find(Person.class, 0);//刚才在数据库里看到,id是0。
    entityManager.remove(person);
    entityManager.getTransaction().commit();

    entityManager.close();
    factory.close();

      运行这段代码,发现数据库里的person表没数据了。

      JPA的增删改查的演示操作就此完成了。

  • 相关阅读:
    求树的某一层的节点最多
    快排 PAT 1101
    PAT 1098
    PAt 1099
    多项式求和
    pat 1100
    getline 函数
    数字的标准写法
    线性回归
    HTTP 中状态码 302的使用场景
  • 原文地址:https://www.cnblogs.com/yuanliangding/p/5003588.html
Copyright © 2020-2023  润新知