私のウェブサイト:訪問を歓迎
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"/>
这种方式在加载的时候先验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值