研究ノートJPAのデータベース接続

コンセプト:JPAは、Java永続化APIの中国名は、JDK 5.0の注釈またはオブジェクトのXML記述である、れるJava Persistence APIと呼ばれている-リレーショナルテーブル間のマッピング、およびエンティティの実行オブジェクトの永続性をデータベースに。

JPAと春データJPAの違い:重版https://my.oschina.net/u/3080373/blog/1828589

JPAはを提供してくれます。

1)ORMマッピングメタデータ:注釈およびXMLメタデータの二種類の形式でJPAサポートは、メタデータは、オブジェクトとテーブル、エンティティ・オブジェクトは、データベーステーブルに保持することにより、フレーム間のマッピング関係を記述する。

以下のような:エンティティ@、表@、列@、@過渡注釈など。

 2)JPAのAPI:物理オブジェクトを操作するために使用される、CRUD操作を実行する、私たちはバックグラウンドですべてを行うための枠組みは、退屈なJDBCおよびSQLコードから開発者を解放しました。

例えば:entityManager.merge(T tの);

 3)JPQLクエリ言語:オブジェクト指向ではなく、指向データベースクエリ言語クエリデータ、SQL文プログラムの緊密な結合を回避することができます。

如:s.nameは=学生のから?

しかし:

JPAは、JPAが唯一のインターフェイスを定義し、インターフェイスは仕事を達成するのに必要とされると言うことである、唯一の規範です。基本となる必要があるので、いくつかの実現の並べ替え、および休止状態ORMフレームワークは、JPAインターフェースを実現することです。

言い換えれば:

JPA仕様のORMは、Hibernate実装JPA仕様のセットです!図:

 

春データJPAとは何ですか?

spirngデータJPA JPAは、ばねによって提供簡略開発フレームワークであるが、従来の良好な命名規則[方法]書き込みDAO層インターフェースによって、データベースのアクセスと操作を、インターフェースなしで書き込むことができます。同時に、CRUDに加えて、というように複雑なクエリを並べ替え、ページングなどの機能の多くを提供しています。

スプリングデータJPA JPA仕様は抽象再シール、下部または休止JPA技術の使用と理解することができます。図:

命名規則インタフェース:

例:

springboot統合春データJPAちょうど2つのステップ:

最初のステップ:インポート達人座標

ステップ2:YMLプロファイル構成情報JPA

 セルフ:JPAは異なる実装という仕様です。Hibernateは、一の実装形態であるばねデータJPA一の実施態様であるが、ばねデータJPAのカプセル化の高度です。Benpian運動は、あなたがデモテストをやって起動することができますJPAの休止状態の実装と使用を学ぶことです。

プロジェクト構造:

pojo层:User

package com.cy.pojo;

import org.hibernate.annotations.GenericGenerator;

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

@Entity
@Table(name = User.TABLE)
public class User {
    public static final String TABLE = "SYS_USERS";
    @Id
    @GenericGenerator(name = "idGenerator", strategy = "native")
    @GeneratedValue(generator = "idGenerator")
    @Column
    private Integer id;
    @Column
    private String username;
    @Column
    private String password;
    @Column
    private String salt;
    @Column
    private String email;
    @Column
    private String mobile;
    @Column
    private Integer valid;
    @Column
    private Integer deptId;
    @Column
    private Date createdTime;
    @Column
    private Date modifiedTime;
    @Column
    private String createdUser;
    @Column
    private String modifiedUser;

    public User() {
    }

    public User(Integer id, String username, String password, String salt, String email, String mobile, Integer valid, Integer deptId, Date createdTime, Date modifiedTime, String createdUser, String modifiedUser) {
        this.username = username;
        this.password = password;
        this.salt = salt;
        this.email = email;
        this.mobile = mobile;
        this.valid = valid;
        this.deptId = deptId;
        this.createdTime = createdTime;
        this.modifiedTime = modifiedTime;
        this.createdUser = createdUser;
        this.modifiedUser = modifiedUser;
    }

    public static String getTABLE() {
        return TABLE;
    }

    public Integer getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getSalt() {
        return salt;
    }

    public void setSalt(String salt) {
        this.salt = salt;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getMobile() {
        return mobile;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    public Integer getValid() {
        return valid;
    }

    public void setValid(Integer valid) {
        this.valid = valid;
    }

    public Integer getDeptId() {
        return deptId;
    }

    public void setDeptId(Integer deptId) {
        this.deptId = deptId;
    }

    public Date getCreatedTime() {
        return createdTime;
    }

    public void setCreatedTime(Date createdTime) {
        this.createdTime = createdTime;
    }

    public Date getModifiedTime() {
        return modifiedTime;
    }

    public void setModifiedTime(Date modifiedTime) {
        this.modifiedTime = modifiedTime;
    }

    public String getCreatedUser() {
        return createdUser;
    }

    public void setCreatedUser(String createdUser) {
        this.createdUser = createdUser;
    }

    public String getModifiedUser() {
        return modifiedUser;
    }

    public void setModifiedUser(String modifiedUser) {
        this.modifiedUser = modifiedUser;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", salt='" + salt + '\'' +
                ", email='" + email + '\'' +
                ", mobile='" + mobile + '\'' +
                ", valid=" + valid +
                ", deptId=" + deptId +
                ", createdTime=" + createdTime +
                ", modifiedTime=" + modifiedTime +
                ", createdUser='" + createdUser + '\'' +
                ", modifiedUser='" + modifiedUser + '\'' +
                '}';
    }
}

 プロフィール:persistence.xmlの

<?xml version="1.0" encoding="UTF-8"?>
<persistence 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_2_0.xsd"
             version="2.0">
    <!--在根标签下至少要存在一个持久化单元 (有一个数据库的连接信息)-->
    <persistence-unit name="myJpa">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <properties>
            <!-- 配置多条数据库的信息 -->
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
            <property name="hibernate.connection.url" value="jdbc:mysql:///jtsys"></property>
            <property name="hibernate.connection.username" value="root"></property>
            <property name="hibernate.connection.password" value="123456"></property>
            <!-- 方言 -->
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"></property>
            <property name="hibernate.show_sql" value="true"></property>
            <property name="hibernate.format_sql" value="true"></property>
            <property name="hibernate.hbm2ddl.auto" value="update"></property>
        </properties>
    </persistence-unit>
</persistence>

テスト実装:

package com.cy.connDB;

import com.cy.pojo.User;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import java.util.Date;

public class JpaConn {

    private static EntityManagerFactory entityManagerFactory;

    public static void main(String[] args) {
        /**
         * JPA连接数据库,注意问题persistence.xml的配置文件必须放在META-INF文件夹下:
         * 1.Persistence创建entityFactory对象
         * 2.通过entityManagerFactory对象创建entityManager对象
         * 3.entityManager获取事务对象
         * 4.开启事务
         * 5.操作数据库
         * 6.关闭资源
         */

        entityManagerFactory = Persistence.createEntityManagerFactory("myJpa");
        JpaConn jpaConn = new JpaConn();
        jpaConn.saveUser();
        jpaConn.findUserById();
        jpaConn.updateUserByUsername();
        jpaConn.deleteUserById();

    }

    private void deleteUserById() {
        EntityManager entityManager = entityManagerFactory.createEntityManager();
        EntityTransaction tx = entityManager.getTransaction();
        tx.begin();
        User user = entityManager.find(User.class, 18);
        entityManager.remove(user);
        tx.commit();
        entityManager.close();
    }

    private void updateUserByUsername() {
        EntityManager entityManager = entityManagerFactory.createEntityManager();
        EntityTransaction tx = entityManager.getTransaction();
        tx.begin();
        User user = entityManager.find(User.class, 12);
        user.setUsername("zhouyu");
        entityManager.merge(user);
        tx.commit();
        entityManager.close();
    }

    private void findUserById() {
        EntityManager entityManager = entityManagerFactory.createEntityManager();
        EntityTransaction transaction = entityManager.getTransaction();
        transaction.begin();
        User user = entityManager.find(User.class, 12);
        System.out.println(user);
    }

    private void saveUser() {
        EntityManager entityManager = entityManagerFactory.createEntityManager();
        EntityTransaction transaction = entityManager.getTransaction();
        transaction.begin();
        User user = new User();
        user.setUsername("xiaoqiao");
        user.setEmail("[email protected]");
        user.setMobile("18755556666");
        user.setCreatedTime(new Date());
        user.setModifiedTime(new Date());
        user.setCreatedUser("admin");
        user.setModifiedUser("admin");
        entityManager.persist(user);
        transaction.commit();
        entityManager.close();
    }
}

 概要:JPA、場所のpersistence.xml設定ファイルを使用するときに特別な注意を払う必要が缶の下のsrc / META-INFに配置する必要があります!

の手順を使用して、JPAのデータベース接続:

1.読む永続することにより、構成ファイルには、オブジェクトを作成してEntityManagerFactory

EntityManagerのは、オブジェクトを介してオブジェクトを作成します。2.のEntityManagerFactory

3.entityManager取得トランザクションオブジェクト

4.ターン総務

entityManegerを使用して5.データベース操作

6.閉じるリソース

データベースの操作方法は、EntityManagerを使用: 
無効持続(オブジェクトVAR1);オブジェクトの保存
<T> Tマージ(T VAR1 ); 状態独立エンティティインスタンスは、管理状況を行くだろう。
空の削除(オブジェクトVAR1)、削除データ
<T> T (クラス<T> VAR1、検索オブジェクトVAR2); プライマリキークエリ
のクエリからCreateQuery(CriteriaUpdate VAR1); 
EG:使用例
EntityManager em = …;

CriteriaBuilder cb = em.getCriteriaBuilder();

CriteriaQuery<Entity class> cq = cb.createQuery(Entity.class);

Root<Entity> from = cq.from(Entity.class);

cq.select(Entity);
//必须要有CriteriaQuery对象,才能用此方法
TypedQuery<Entity> q = em.createQuery(cq);

List<Entity> allitems = q.getResultList();
クエリcreateNamedQuery(文字列VAR1)、SQLステートメントを使用してデータベース照会する
CriteriaBuilder getCriteriaBuilderを();データベースを照会するための基準を作成します

 

 

公開された15元の記事 ウォンの賞賛0 ビュー275

おすすめ

転載: blog.csdn.net/weixin_45146962/article/details/105007716