JPA -Hibernateを使い始めます

私のウェブサイト:訪問を歓迎

JPA -Hibernateを使い始めます

コンセプト

JPAとは何ですか?

JPAは、Java永続化APIと呼ばれています。

標準Java EE 5.0プラットフォームのオブジェクトリレーショナルマッピング(ORM)仕様としてJPA

これは、すべてのJava EEサーバによってサポートされます。日は完全に使いやすく、強力な柔軟性のORMの仕様を与えるために(休止状態など)前のフレーム内に吸収不全、ORMのEJB仕様痛みを伴う経験の前に学びました。

開発コミュニティの反応の現在の視点から、
JPAは素晴らしいサポートと賞賛されている、ターゲットとして標準化のJPA ORMフィールドには、積分器を実現しています

効果

ぶっきらぼうには、言ったデータベース操作を管理しやすくなります、我々は唯一のデータベースにJPA CRUDを操作する必要が実現できます

休止状態

Hibernateのオブジェクト・リレーショナル・マッピングは(ORM)フレームワークは、それがオブジェクトパッケージ(EJBのこのセットに関して)非常に軽量なJDBCを持っていたオープンソースであり、それはPOJOマッピングとデータベースのテーブルを確立すること(すなわち、のドメインを聞かせて)します関係、フレームは、プログラマは、データベース・オブジェクトを操作するには、任意のJavaプログラミングの考え方を使用することができるように、Hibernateは自動的に自動的に実行SQL文を生成することができ、完全自動のORMです

依存追加

、Mavenのプロジェクト管理を使ってのpom.xmlの内側に参加頼ります

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>jap</artifactId>
        <groupId>com.ifueen.JPA</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>jap01</artifactId>

    <dependencies>
        <!-- hibernate核心包 -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.3.8.Final</version>
        </dependency>

        <!-- hibernate对于jpa的支持包 -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>4.3.8.Final</version>
        </dependency>

        <!-- mysql核心驱动包 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>

        <!-- junit测试包 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

    </dependencies>

</project>

アイデアは、自動的に必要なパッケージをダウンロードします

コアコンフィギュレーション・ファイルのpersistence.xml

アイデアは、自動的にpersistence.xmlの生成、その後、内部を行くように配置されます

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
    <persistence-unit name="jap01">

        <properties>

            <!-- 必配的 -->
            <!-- 配置数据库链接 -->
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
            <property name="hibernate.connection.url" value="jdbc:mysql:///jpa"/>
            <property name="hibernate.connection.username" value="root"/>
            <property name="hibernate.connection.password" value="594395fzk"/>
            <!-- 数据库方言 -->
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
            
            <!-- 选配-->
            <!-- 生成组策略 -->
            <property name="hibernate.hbm2ddl.auto" value="create"/>
            <!-- 设置sql可见 -->
            <property name="hibernate.show_sql" value="true"/>
            <!-- 设置sql格式 -->
            <property name="hibernate.format_sql" value="true"/>

        </properties>
    </persistence-unit>
</persistence>

データテーブルを生成します

新規エンティティ・クラスユーザー

package com.ifueen.employee;

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;
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Id
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public User() {
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

新しいテストクラス

package com.ifueen.employee;

import org.junit.Test;

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


public class UserTest {
    @Test
    public void test(){
        /*拿到工厂对象*/
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("jap01");
        /*创建EntityManager*/
        factory.createEntityManager();
    }
}

そして、テストクラスを実行するには、前提は、最初のビルドに関連するデータベースであることを、ノートを生成することができます

業績

CRUD操作

CRUD操作の休止状態のために使用

package com.ifueen.employee;

import org.junit.Test;

import javax.persistence.*;
import java.util.List;


public class UserTest {
    @Test
    public void test(){
        /*拿到工厂对象*/
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("jap01");
        /*创建EntityManager*/
        factory.createEntityManager();
    }

    /**
     * 增加方法
     * */
    @Test
    public void add(){
        /*拿到工厂对象*/
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("jap01");
        /*创建EntityManager*/
        EntityManager manager = factory.createEntityManager();
        //开启事务
        EntityTransaction transaction = manager.getTransaction();
        transaction.begin();
        //执行sql操作
        User user = new User();
        user.setName("远方只有在死亡中凝聚野花一片");
        manager.persist(user);
        //提交事务
        transaction.commit();
        //关闭资源
        manager.close();
        factory.close();
    }

    /**
     * 查询单个方法
     * */
    @Test
    public void find(){
        /*拿到工厂对象*/
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("jap01");
        /*创建EntityManager*/
        EntityManager manager = factory.createEntityManager();
        //执行sql操作
        User user = manager.find(User.class, 1L);
        System.out.println(user);
        //关闭资源
        manager.close();
        factory.close();
    }

    /**
     * 查询所有方法
     * */
    @Test
    public void findAll(){
        /*拿到工厂对象*/
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("jap01");
        /*创建EntityManager*/
        EntityManager manager = factory.createEntityManager();
        //写jpql的语句
        String 写jpql的语句="select u from User u";
        //拿到查询的对象
        Query query = manager.createQuery(写jpql的语句);
        //执行查询,得到list集合
        List resultList = query.getResultList();
        //java8新新特性lmada表达式
        resultList.forEach(e->{
            System.out.println(e);
        });
        //关闭资源
        manager.close();
        factory.close();
    }


    /**
     * 修改的方法
     * */
    @Test
    public void update(){
        /*拿到工厂对象*/
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("jap01");
        /*创建EntityManager*/
        EntityManager manager = factory.createEntityManager();
        //开启事务
        EntityTransaction transaction = manager.getTransaction();
        transaction.begin();
        //先查询出需要更新的字段
        User user = manager.find(User.class, 1L);
        user.setName("九月");
        //更新操作
        manager.merge(user);
        //提交事务
        transaction.commit();
        //关闭资源
        manager.close();
        factory.close();
    }

    /**
     * 删除的方法
     * */
    @Test
    public void delete(){
        /*拿到工厂对象*/
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("jap01");
        /*创建EntityManager*/
        EntityManager manager = factory.createEntityManager();
        //开启事务
        EntityTransaction transaction = manager.getTransaction();
        transaction.begin();
        //先查询出需要更新的字段
        User user = manager.find(User.class, 1L);
        //执行删除操作
        manager.remove(user);
        //提交事务
        transaction.commit();
        //关闭资源
        manager.close();
        factory.close();
    }


}

我々はまた、ユーティリティクラスに抽出するEntityManagerオブジェクトを取得することができ、もちろん、抽出ツールは喜んで自分自身を見ることができない、現在のモジュールで使用され、それは問題ではありません

package com.ifueen.util;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import java.lang.management.ManagementFactory;

/**
 * JPA的工具类
 * */
public class JPAUtil {
    private JPAUtil() {}
    private static EntityManagerFactory factory = null;
    static {
        factory = Persistence.createEntityManagerFactory("jpa01");
    }
    public static EntityManager getJpa(){
        return factory.createEntityManager();
    }
}

インタビューの質問:違い、生成されたテーブルの構造はどうですか?

以下のテーブル構造を生成する方法の4種類を区別

<property name="hibernate.hbm2ddl.auto" value="update"/>
这种方式生成表结构会自动创建,然后在hibernate结束的时候将给删除,一般测试人员使用较多

<property name="hibernate.hbm2ddl.auto" value="create"/>
这种方式在每次运行的时候都会生成新的表,而且会覆盖之前的表,不太推荐使用

<property name="hibernate.hbm2ddl.auto" value="update"/>
这种方式在每次运行的时候都会去判断是否存在这张表,如果不存在就新建,如果存在就保留并且更新相关的字段,开发的时候用这种方式较多

<property name="hibernate.hbm2ddl.auto" value="validate"/>
这种方式在加载的时候先验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值
发布了87 篇原创文章 · 获赞 7 · 访问量 2万+

おすすめ

転載: blog.csdn.net/f2315895270/article/details/101380607