序文
特にビッグデータがバッチに挿入されている場合、バックエンドサービス開発を行っている場合、通常のORMフレームワーク(MyBatis、Hibernate、JPA)がプログラムのパフォーマンス要件を満たすことができません。もちろん、ネイティブJDBCを使用して動作することは不可能であるため、効率は高くなりますが、複雑さは増加します。
包括的に考慮して、春にjdbctemplateを使用し、名前付きparameterjdbctemplateを使用してバッチ操作を実行します。
変換の前
説明を開始する前に、まずJPAがバッチでどのように操作されたかを見てみましょう。
エンティティユーザー:
パブリッククラスAppStudent {private Integer id;プライベートインテガークラス。プライベート文字列名;民間整数年齢; // pseudocode、省略コンストラクトと取得、セットメソッド}dynamicquery pseudocode:
@RepositoryPublic Class DynamicQueryImplはDynamicQuery {@persistencontext Private EntityManager em; public EntityManager getEntityManager(){return em; } //実際には、@Override public <t> void savelist(list <t> resultlist){for(int i = 0; i <resultlist.size(); i ++){t t = resultlist.get(i); em.persist(t); }}}変換後
jdbctemplate
jdbctemplateによって提供される主な方法:
jdbctemplateクラスでの注入に@autowiredを使用する必要があります。
@autowiredprivate jdbctemplate jdbctemplate;
バッチ挿入操作:
public void batchsave(){list <object []> batchargs = new arrayList <object []>(); batchargs.add(new Object [] {1、 "Xiao Ming"、21}); batchargs.add(new Object [] {2、 "Xiaohong"、22}); batchargs.add(new Object [] {3、 "Lucy"、23}); string sql = "ユーザーに挿入(username、password)values(?、?)"; jdbctemplate.batchupdate(sql、batchargs);}上記は基本的にバッチインサート機能を実装していますが、多くのデータベースフィールドがある場合、プレースホルダーの形でエンコードすることはあまり良くない場合があります。ここでは、SpringはSimpleJDBCtemplate(スプリング3.1+は後で時代遅れとしてマークされますが、スプリング4.3で完全に削除されます。後者はニーズを完全に満たすことができます)およびnamedParameterJDBCtemplateテンプレートエンジンも提供します。
namedparameterjdbctemplate
Hibernateを使用した学生は、HQLで使用できることを知っていると思いますか?または: *クエリパラメーターを外部から構成する。春のJDBCフレームワークでは、名前付きパラメーターを使用して、SQLパラメーターにバインドする方法も提供されます。
AndameParameterjdbctemplateクラスで@autowiredを使用する必要があります。
@autowiredprivate namedparameterjdbctemplate namedparameterjdbctemplate;
バッチ挿入操作:
public void batchsave(){list <user> list = new arraylist <user>(); //新しいユーザーlist.add(new AppStudent(1、 "Zhang San"、21))を追加); list.add(new appstudent(1、 "li si"、22)); list.add(new AppStudent(1、 "Wang Ermazi"、23)); // sqlparametersource [] beansources = sqlparametersourceutils.createbatch(list.toarray()); string sql = "app_student(class_id、name、age)values(:classid、:name、:age)"; namedparameterjdbctemplate.batchupdate(sql、beansources);}最後に、System.CurrentTimeMillis()を使用して、特定の変換の前後に実行時間を比較および印刷します。
long start = system.currenttimemillis(); //コードを前後に改造し、自分で補足し、long end = system.currenttimemillis(); out.println( "second time:"+(end-start));
速いは間違いなく速いです。それがどれだけ速いかについては、データのボリュームとマシンの構成に基づいて関連する比較を行う必要があります。
プロジェクトソースコード:https://gitee.com/52itstyle/spring-data-jpa
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。