検索
ホームページウェブフロントエンドhtmlチュートリアルHibernate some_methods_@annotations_code example_html/css_WEB-ITnose



データベースを操作するための 7 つのステップ:
1 SessionFactory オブジェクトを作成します
2 Session オブジェクトを作成します 3 トランザクションをオンにします: 休止状態では、すべてのデータベース操作 (クエリも含む) はトランザクションである必要があります
4 データ保存操作を実行します(対応する操作メソッドが実行される前に送信する必要があります)
5 トランザクションを送信する
6 セッションを閉じる

7 SessionFactory オブジェクトを閉じます


//最初のステップ
SessionFactory:

1 SessionFactory オブジェクトを作成します

構成:


 //创建Configuration对象
    Configuration configuration = new Configuration().configuer();
    // 4.0之后为了分布式,用了这种设计  链接hibernate框架
        ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
                .applySettings(configuration.getProperties())
                .buildServiceRegistry();

SessionFactory:

        //创建一个SessionFactor对象
         SessionFactory sessionFactiony = null;
         给SessionFactory对象赋值
            sessionFactory = configuration.buildSessionFactory(serviceRegistry);
 //或  SessionFactory sessionFactiony  = configuration.buildSessionFactory(serviceRegistry);//也行,一样

    
//第二步
Session :
   
    2 创建 Session对象
        //用上面创建好的SessionFactory对象,调用方法,创建一个session对象
    (1) Session session = sessionFactory.getCurrentSession();
    (2) Session session = sessionFactory.opensession();

    getCurrentSession :
        
        创建session对象 如果有,就不创建,如果没有就创建
        Session session = sessionFactory.getCurrentSession();
        并且,自动关闭资源 不用写 session.close();

    opensession :

        创建session对象,别管有没有,都创建
        Session session = sessionFactory.opensession();

        并且,用手动关闭资源,
            session.close();

//第三步
Transaction :

    3 开启事务:hibernate中,然后数据库操作,都必须是事务的,哪怕是查询
        Transaction transaction = session.beginTransaction();

//第四步

    4 执行数据保存操作

    //增
    Save :

     Save();//添加语句方法,生成insert into 表名(列,列)values(?,?)

    //删    
    Delete :

        Delete();//删除语句方法,生成delete from 表 where id=?;

    //改
    Update :

        Update();//修改语句,
            //如果表里面有对应的语句,就生成修改语句update 表名 set (列名,列名)=(列值,列值) where id = ?;

    //查
    Load :

        Load();//查询语句方法,生成查询语句,select * from 表 where id=?
        //如果不访问里面的属性,就只是查询一下,并不会执行到数据库,除非用里面每行对应的对象,去调用一个属性,才会真正的到数据库
        //如果只是提交了,没有访问里面的属性,不会生成查询语句,就是没有对数据库进行操作

    Get :

        Get();//查询语句方法,生成查询语句,select * from 表 where id=?
        //只要提交,就会生成查询语句,

//Get()和Load()的区别   Load()和Get()的区别

        Get() : 只要调用Get()方法并提交,就直接生成查询语句去访问数据库
        Load() : 要调用Load()方法并提交,且,如果没有访问对象里面的属性,不会生成查询语句,也不会操作数据库,一定要获取一下属性,获取对象引用,也算获取属性

//第五步
commit :
     5 提交事务
        transaction.commit();// 提交事务
        transaction是第三步,开启事务的对象

//第六步
Session_close :
    6 关闭Session
        // session.close();//getCurrentSession();不需要手动关闭,opensession需要手动关闭

 //第七步
    SessionFactory_close :
    7 关闭SessionFactory对象
        sessionFactory.close();

//强注解,强注释

  !!!对表来说,只有多的一方保存少的一方的引用,那些设置都是给程序看的,和数据库没有任何关系!!!

@ :
    @Entity 在类名上面加的,用于创建表 默认是类名
        创建实体类和数据标的映射,指定表名
        将一个类声明为一个实体bean(即一个持久化POJO类)。
        @Entity(name="表名")  这样也行,就规定了表名

        @Table :
            @Table(name="表名");也行
//1 を追加する必要があります:

@IdClass を使用して 2 つのクラスを関連付け、その後にクラス名を付けます
use using using ‐アウト アウト スルー スルー アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウト)



@Column 現在の列を変更するときに変更できるかどうかを設定します
use using through 's ' through out's out's out together out out out outmbmb out out outmb out out out out out out out out out out together
' ' s--
この列内の対応する値:
の値が空であるかどうか。デフォルト値は、FALSE值 Insertableの列がInsertステートメントの生成時に列であるかどうかです。デフォルト値は、この列の追加値ではなく、Trueが追加された場合です。この列は変更されません。この特定の列のSQL DDLフラグメントは、異なるデータベース間で移植されている可能性がありますデータはここにあります
DTO: 呼び出される日付トラクション オブジェクト
VO: 値オブジェクト


@SequenceGenerator:
シーケンス ジェネレーター
@SequenceGenerator(name="sequenceGenerator", sequenceName="Msg_S EQ",initialValue =0,allocationSize=1)//ジェネレーター名、シーケンス名、開始値は 0、ステップ サイズは 1 です

@TableGenerator ジェネレーターはクラスに書かれています
//以下のエンティティ クラスに対応するテーブルを格納するために使用されます 1 回使用される ID (テーブルID が保存される場所)
//データベース プラットフォーム間で使用できる主キー用の別のテーブルを作成します。MySQL の主キーの自動インクリメントは、外部で指定されるものではなく、自分で指定されます。同じである可能性があります。

// とはクロスプラットフォーム データ ストレージの問題は、データベース プラットフォームが異なると、主キー (pk) などの異なる方法でデータを生成するためです。それでも、異なるデータベース プラットフォームとの互換性を保証するにはどうすればよいでしょうか。プラットフォーム
//ここでの方法は、新しいテーブルを作成することです。ID を保存するために特別に使用されるテーブル、テーブル名: GENERATOR_TABLE、テーブルには 2 つの列があります
//最初の列は、名前である pkColumnName="key" を保存します。主キーが配置されている列の値です
//2 番目の列は、ID 値を保存します。valueColumnName= "studentId"
//3 番目と 4 番目の列は値を保存します。3 番目の列はキーの値、つまりテーブルですID を保存する名前、4 番目の列は保存するステップ値です。デフォルト値は 1 です
//これは、対応するテーブルが存在する限り、そのテーブルは無数のテーブルの ID 値を保存できることを意味します。一度、ID はデフォルトで 1 つ増加します。これはシーケンスのコレクションに似ています

@TableGenerator( //Generator
name = "Student_gen", // ジェネレーターの名前
table = "Generator_table", // データベースでは、テーブルの名前
pkcolumname = "key", // 主キーの名前
ValueColumname = "StuationId",//// /次回保存する場合は、ID のデータを保存します列、ここで取得したIDの値です
pkcolumnvalue = "Student", // テーブルのテーブル
InitialValue = 1, // 開始値は 1 です
AllocationSize = 1 // ステップは1です
)

物理クラスの物理クラスに対する@IDの強力なアノテーション
対応するIDをカラム名として取得し、このメソッドでそのIDのID値を取得できます
と同等テーブルの設定 内部の主キー

@GeneratedValue // @id と getId() に直接設定 ジェネレーターに移動して値を取得するため、追加されるデータの ID は毎回異なり、一意ではなくなります カラムを設定しますto auto-increment

generator=" ジェネレーターの名前 " //ID を取得するジェネレーター
5 形式
1 自動ランダム
2 テーブル テーブルを生成してテーブルに格納する 3 アイデンティティ シーケンスの種類
4 シーケンス シーケンスジェネレーター、シリアル番号を生成します
5 カスタマイズ 自分で書きました
@GeneratedValue(strategy=GenerationType.generated format,generator="ジェネレーターの名前")
@GeneratedValue(strategy=GenerationType.TABLE,generator="student_GEN")

@OneToOne
个 どちらかを書き込み、1 つは @Onetoone を書き込み、もう 1 つは @manytoone を書き込みます
@manytoone 内の多のいずれかに unique = "true" 設定を追加する必要があります)
マッピングは夫の妻の属性で行われます。基準に基づいていますが、ここで制御する必要はありませんが、このテーブルを追加すると、テーブルの ID への参照が生成されます
。反対側のテーブルの値が生成されると、この列が参照されて ID が生成され、反対側のテーブルの ID として使用されます
クラス内で get ** ()心配する必要はありませんが、そこの属性は妻を指しています

@ManyToOne
使用する 使用する 使用する 使用する 使用する 使用する 使用する 使用するカラム名

@ManyToMany//Many-to-many

// テーブル名とカラム名を変更したい
@JoinTable(name = "t_s", // テーブル名 中間テーブル
joinColumns = { @JoinColumn(name = "Teacher_id") },//中間テーブルの列名
inverseJoinColumns = { @JoinColumn(name = "student_id") })//上記の列名が指しているものは、まず指定された列名でこの列を見つけます上記の名前であれば、Studentテーブルが見つかります
@Joincolumn

名前 外部キーカラムの名前を指定し、長さ、制約なども指定できます。 上記の外部キー参照()メソッド(// 以下ではtable、多数のテーブルに設定されている、小さなテーブルの引用の列のリスト名、小さなテーブルの列の列のリスト、Listing @ @Embedded

、および他のテーブルには @entity がありません、 get ** () メソッドに書かれています
@Embedded(name="asd") は別のテーブルを指定し、現在のテーブルが参照する列の列名を保存します

!!! 1 対 1 の場合のみ、主キー マッピングと外部キー マッピングがあります
//プライマリキーマッピング @primarykeyjoincolumn
@primarykeyjoincolumn、別のテーブルの主要なキーに関連する//属性の反対側にある外部キーマッピング
//反対側の参照を保存しません。反対側の反対側の属性に参照を保存させ、この列が別のテーブルに関連付けられるようにします

mappedBy:

双方向の関係がある限り、参照を保持する必要があります。相手に対しては、mappendBy (反対) が必要です (双方向に限定)、小さいパーティは使用する必要があります。集合コレクションはパーティの参照をより多く保存し、両側は複数のペアでマークされます @ManyToOne (書き込み用) many) と @OneToMany (1 つに対して書き込み)

テーブルの場合、より多くのパーティのみが、より少ないパーティの参照を保存します。これらの設定はプログラムが参照するためのものであり、データベースとは何の関係もありません

@OneToMany (mappedBy="group",//反対側のテーブルに列を生成します。この列は特にこのテーブルの ID への参照を保存します。このテーブルが追加されたとき、反対側のテーブルのこの列に値を生成させます反対側のテーブルが追加されると、この列が参照されて ID が生成され、その ID が反対側のテーブルの ID として使用されます。 cascade={CascadeType.ALL},// -レベルの結合操作を設定します。 work? FETCH = FETCHTYPE.EAGER // クラスリスト操作。パーティ数が少ないため、デフォルトは Lazy です

)

cascade = {Cascadetype.all/DETACH /MERGE/PERSIST/REFRESH/REMOVE/Custom};
/ /カスケード操作、つまり A の追加、削除、変更、チェック、および B の変更が有効になったときに設定されます。これはイベントをバインドするのと同等であり、その後の値はイベント内で、このイベントが有効な場合に設定されます。トリガーされると、2 つのテーブル A と B の属性が更新され、同期されます。 Cascade
using - off ‐ off OUT-out-out-out-out- ,
列は参照を B に保存します。EAGER の場合がここに設定されていると、B への参照を保持する列も取り出されます

Generate state:
// クエリ文を生成します

があるかどうかを意味します。ここで LAZY が設定されている場合、フェッチまたは表示するときに、B の参照を保存している列は取り出されず、他の列のみが取り出されます。 B への参照はセッション オブジェクト (バッファ) を閉じる前に使用され、クエリ ステートメントが生成され、データベースがクエリされ、列が取り出されます。 ステートメントの生成:
B の参照を保存する列が到達した場合は 2 つのクエリ ステートメントが生成され、それ以外の場合は 1 つのクエリ ステートメントが生成され、最初のクエリ ステートメントには B

//実行順序
@Before/@BerforeClass -& gt; の参照を保持する列が含まれません。 Test-& GT; @AFTER/ @AFTERCLASS @Beface:

は、強いコメントに使用されるテスト クラスで、最初に実行されます。パブリック、戻り値なし、パラメーター リストなし、メンバー メソッド

@BerforeClass
です。テスト クラスで使用され、強くアノテーションが付けられたテスト メソッドが最初に実行されます。このメソッドは静的メソッドであり、戻り値もパラメーター リストもありません。 @@test:
はテストクラスで使用されています。メンバー メソッド

このメソッドは静的メソッドであり、戻り値がなく、パラメーター リストもありません:

using using ' s ' s ' s ' s ‐ ‐ ‐ ‐‐‐‐‐とデータベースへ) ---> フリー状態(保存完了後セッションオブジェクトを閉じる(session.close()))

/ /3 つの状態を区別する鍵は、
1 ID があるかどうか
2 ID がデータベースにあるかどうか
3 メモリ内に (セッション キャッシュ) があるかどうか
Transient:

Transient (一時的な状態): Anエンティティ クラス オブジェクトはメモリ内にあり、ID がなく、キャッシュにもありません
//エンティティ クラスがインスタンス化されるとき、それは一時的な状態です

Persistent:

Persistent (永続状態): メモリ内に存在します、存在しますキャッシュにあり、データベースに存在します (ID)
// データベースに保存され、永続的な状態です

Detached:

Detached (free 状態): メモリに存在します、キャッシュはありませんが、データベースはhas ID
//セッションオブジェクトを閉じた後(session.close())、フリー状態になります

//これら 3 つの状態で注意が必要なのは、この状態でデータベース操作を実行するとどうなるかです。 Resultたとえば、属性の値を変更するときに更新ステートメントは発行されますか?

一時的な状態: 更新ステートメントは発行されません
アウト、アウト、アウト、アウト、アウト、アウト、アウト、アウト、アウト、アウト、アウト、アウト、アウト、アウト、アウト、アウト、アウト、アウト、アウト、アウト、アウト、アウト、アウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトスピードs - - - - '、クラスでは、プライマリキークラスの参照の上で、対応するGETプライマリキークラス()。メソッド
@Embeddable: の上に埋め込むことができます。このクラスは、別のクラス
1
@IdClass: の一部として主キー クラスに記述されます。たとえば、getId のすぐ上に 2 つの主キー、id 列と name 列があります。 () と getName() をエンティティ クラスに記述し、@id を追加して主キーを宣言し、クラスに @IdClass (主キー クラス名.class と記述) を記述します。そして、これら 2 つの主キーをエンティティ クラスに記述します。
ただし、複数の主キーを持つこのエンティティ クラスは、シリアル化可能なインターフェイスを実装する必要があります
主キー クラスでは、 @Embeddable

2
@EmbeddedId: を記述する必要はありません
または、このクラスには ID と名前が記述されていませんが、主キークラスへの参照を取得し、主キークラスに対応する getprimary key class(); メソッドに @EmbeddedId を記述するだけです
ただし、主キークラスのクラスには @Embeddable を記述する必要があります
クエリ :

//--------------------------------------模糊查询

QBE :
トピック tExample = new Topic();//自分で作成したクラス
// テーブル内の行の属性であるクラス オブジェクトを作成します
tExample.setTitle("T_") // オブジェクトに属性を設定します (set***() メソッド);典型的な T_ は、検索に使用される、特定の値を持つオブジェクトのみになります

例 e = Example.create(tExample).ignoreCase().enableLike();//ファジー クエリを追加する静的メソッド
条件 c = session.createCriteria(Topic.class)//指定されたクラス (テーブル) に制約を追加します
.add(Restrictions.gt("id", 2))//id 属性が 2 より大きい
.add(Restrictions.lt("id", 8))//id 属性が 8 未満の
.add(e); //「T_」の上に書かれたファジークエリ

//-----------------1+N

//1+N: 現在のオブジェクトがクエリされている限り、他のオブジェクトもクエリします
//複数のテーブル クエリを使用して 1+N 問題を解決できます
);////@BathSize: デフォルトはここで各フェッチの数を指定できます。

left_outer_join_fetch:

(イテレータを使用する場合は結合は使用できません)

Query q = session.createQuery("from Topic t left external join fetch t.category c ");//トピックはオブジェクトであり、オブジェクトには別のテーブルへの参照である属性があります。t.category は別のクラスを取得できます対応するテーブルとその中の属性

List topic = q.list(); // クエリされた値を対応するオブジェクトにカプセル化し、それをリスト コレクションにカプセル化します。
List topic = session.createQuery(" left external join fetch t.category c");

前提: オブジェクト (テーブル) には属性 (列) が存在する必要があり、保存されるのは別のテーブルへの参照です
例:カテゴリへの参照を保存するトピック オブジェクト

例: List topic = session.createQuery("from table 1 alias (t) left external join fetch t. table name 2 alias (c)");

inner_join_fetch :

リスト< category> topics.createquery( "topic t inner join fetch t.category c"); Topic オブジェクトに対応するテーブルを検索し、トピックを通じてカテゴリに対応するテーブルを検索します。さらに、カテゴリに対応するテーブルがクエリされ、トピックの左側に表示されます。 2 つのテーブルの結果セットを 1 つのテーブルにまとめます)
List topic = session.createQuery("from Topic t left inner join fetch t.category c");を使用してを使用する 使用する 使用する - オフ ‐ 使用-list トピック = session.createQuery("トピック t 左外部結合フェッチ t .category c"); 右側
まず、 Topic オブジェクトに対応するテーブルを検索し、トピックを通じてカテゴリに対応するテーブルを検索し、さらにカテゴリに対応するテーブルをすべてクエリします。トピックの右側に表示されます (テーブルにマージされた 2 つのテーブル セットの結果に相当します。1 つは左側、もう 1 つは右側)
List topic = session.createQuery("from Topic t right external join fetch t.category c");

iterator :

// iterator : join が許可されていない場合
// イテレータ、クエリされたデータをイテレータで直接走査しますイテレータ カテゴリに使用されます。 = session.createQuery("from オブジェクト エイリアス").iterate( );//
Iterator カテゴリ = session.createQuery("from カテゴリ c").iterate();//

while (categories.hasNext( )) {//hasNext() は、次の人に要素があるかどうかを尋ねます。戻り値は true/false です。 );// オブジェクトで満たされているため、オブジェクト内のプロパティにアクセスできます。上記で取得したオブジェクトへの参照 }

キャッシュ可能:

ehcache を使用します。 = session.createQuery("from category").setCacheable(true).list();//Category オブジェクトに対応するテーブルをクエリし、putそれをキャッシュに保存し、リスト コレクションにカプセル化します
setCacheable(true);//キャッシュを有効にする

上記は、いくつかの Hibernate_methods_@annotations_code example_html/css_WEB-ITnose の内容です。詳細については、PHP に注意してください。中国語のウェブサイト (www.php.cn)!



声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
SpringBoot项目里怎么集成HibernateSpringBoot项目里怎么集成HibernateMay 18, 2023 am 09:49 AM

在SpringBoot项目中集成Hibernate前言Hibernate是一个流行的ORM(对象关系映射)框架,它可以将Java对象映射到数据库表,从而方便地进行持久化操作。在SpringBoot项目中,集成Hibernate可以帮助我们更轻松地进行数据库操作,本文将介绍如何在SpringBoot项目中集成Hibernate,并提供相应的示例。1.引入依赖在pom.xml文件中引入以下依赖:org.springframework.bootspring-boot-starter-data-jpam

Java错误:Hibernate错误,如何处理和避免Java错误:Hibernate错误,如何处理和避免Jun 25, 2023 am 09:09 AM

Java是一种面向对象编程语言,它被广泛地应用于软件开发领域。Hibernate是一种流行的Java持久化框架,它提供了一种简单且高效的方式来管理Java对象的持久化。然而,开发过程中经常会遇到Hibernate错误,这些错误可能会导致程序的异常终止或者不稳定。如何处理和避免Hibernate错误成为了Java开发者必须掌握的能力。本文将介绍一些常见的Hib

Java Hibernate中一对多和多对多关系的映射方式是什么Java Hibernate中一对多和多对多关系的映射方式是什么May 27, 2023 pm 05:06 PM

Hibernate的一对多和多对多Hibernate是一个优秀的ORM框架,它简化了Java应用程序与关系型数据库之间的数据访问。在Hibernate中,我们可以使用一对多和多对多的关系来处理复杂的数据模型。Hibernate的一对多在Hibernate中,一对多关系是指一个实体类对应多个另一个实体类。比如,一个订单(Order)可以对应多个订单项(OrderItem),一个用户(User)可以对应多个订单(Order)。要在Hibernate中实现一对多关系,需要在实体类中定义一个集合属性来存

hibernate和mybatis有哪些区别hibernate和mybatis有哪些区别Jan 03, 2024 pm 03:35 PM

hibernate和mybatis的区别:1、实现方式;2、性能;3、对象管理的对比;4、缓存机制。详细介绍:1、实现方式,Hibernate是一个完整的对象/关系映射解决方案,将对象与数据库表进行映射,MyBatis则需要开发者手动编写SQL语句以及ResultMap;2、性能,Hibernate在开发速度上可能比MyBatis快,因为Hibernate简化了DAO层等等。

Java语言中的Hibernate框架介绍Java语言中的Hibernate框架介绍Jun 10, 2023 am 11:35 AM

Hibernate是一个开放源码的ORM框架,它将关系型数据库和Java程序之间的数据映射相互绑定,这样可以使开发人员更方便地访问数据库中的数据。使用Hibernate框架可以大量减少编写SQL语句的工作,提高应用程序的开发效率和可重用性。下面从以下几个方面来介绍Hibernate框架。一、Hibernate框架的优点对象关系映射,隐藏数据库访问细节,使开发

如何在Hibernate中执行批量插入更新操作?如何在Hibernate中执行批量插入更新操作?Aug 27, 2023 pm 11:17 PM

在本文中,我们将看到如何在Hibernate中执行批量插入/更新。每当我们执行一条sql语句时,我们都是通过对数据库进行网络调用来完成的。现在,如果我们必须向数据库表中插入10个条目,那么我们必须进行10次网络调用。相反,我们可以通过使用批处理来优化网络调用。批处理允许我们在单个网络调用中执行一组SQL语句。为了理解和实施这一点,让我们定义我们的实体−@EntitypublicclassParent{@Id@GeneratedValue(strategy=GenerationType.AUTO)

Hibernate二级缓存是如何工作的?Hibernate二级缓存是如何工作的?Sep 14, 2023 pm 07:45 PM

缓存有助于减少执行查询时的数据库网络调用。一级缓存与会话链接。它是隐式实现的。一级缓存存在直到会话对象存在为止。一旦会话对象终止/关闭,将会有没有缓存对象。二级缓存适用于多个会话对象。它是链接的与会话工厂。二级缓存对象可供所有会话使用单会话工厂。当特定会话发生时,这些缓存对象将被终止工厂已关闭。实现二级缓存我们需要添加以下依赖项才能使用二级缓存。<!--https://mvnrepository.com/artifact/net.sf.ehcache/ehcache--><de

深入了解Java框架技术栈:探索Spring MVC、Hibernate、MyBatis等常用Java框架深入了解Java框架技术栈:探索Spring MVC、Hibernate、MyBatis等常用Java框架Dec 26, 2023 pm 12:50 PM

Java框架技术栈:介绍常用的Java框架,如SpringMVC、Hibernate、MyBatis等随着Java的不断发展,越来越多的框架被开发出来以简化开发过程。其中,SpringMVC、Hibernate、MyBatis等是Java开发中最常用的框架之一。本文将介绍这些框架的基本概念和使用方法,帮助读者更好地理解和应用这些框架。第一,我们来介绍Sp

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン