مقدمة
عندما نقوم بتطوير الخدمة الخلفية ، خاصةً عند إدراج البيانات الضخمة على دفعات ، لا يمكن أن تلبي أطراف ORM العادية (MyBatis ، Hibernate ، JPA) متطلبات الأداء للبرنامج. بالطبع ، من المستحيل بالنسبة لنا استخدام JDBC الأصلي للعمل ، بحيث على الرغم من أن الكفاءة ستكون عالية ، فإن التعقيد سيزيد.
بالنظر إلى الشمولية ، نستخدم JDBCtemplate في فصل الربيع وسميت ParameterJDBCtemplate لأداء عمليات الدُفعات.
قبل التحول
قبل أن نبدأ التفسير ، دعونا نلقي نظرة أولاً على كيفية تشغيل JPA على دفعات.
مستخدم الكيان:
الطبقة العامة appstudent {private integer id ؛ عدد صحيح خاص. اسم السلسلة الخاصة ؛ عصر عدد صحيح خاص ؛ // pseudocode ، بنيات محظورة والحصول على الأساليب ، تعيين}DynamicQuery Pseudocode:
repositorypublic class dynamicQueryImpl تنفذ DynamicQuery {persistenceContext private entityManager em ؛ EntityManager Public GetentityManager () {return em ؛ } // في الواقع ، إنه مجرد حلقة واستخدام طريقة استمرار EntityManager لإنقاذ Override Public <T> void savavelist (قائمة <T> قائمة النتائج) {for (int i = 0 ؛ i <resultlist.size () ؛ i ++) {t t = resultlist.get (i) ؛ EM.Persist (t) ؛ }}}بعد التحول
jdbctemplate
الأساليب الرئيسية التي توفرها JDBCtemplate:
نحتاج فقط إلى استخدام Autowired للحقن في فئة JDBCtemplate:
autowiredprivate jdbctemplate jdbctemplate ؛
عملية إدراج الدُفعات:
public void batchsave () {list <object []> batchargs = new ArrayList <Object []> () ؛ Batchargs.add (كائن جديد [] {1 ، "Xiao Ming" ، 21}) ؛ Batchargs.add (كائن جديد [] {2 ، "Xiaohong" ، 22}) ؛ Batchargs.add (كائن جديد [] {3 ، "Lucy" ، 23}) ؛ String sql = "insert في قيم المستخدم (اسم المستخدم ، كلمة المرور) (؟ ،؟)" ؛ jdbctemplate.batchupdate (SQL ، Batchargs) ؛}ما سبق ينفذ بشكل أساسي وظيفة إدراج الدُفعات ، ولكن عندما يكون هناك العديد من حقول قاعدة البيانات ، فقد لا يكون من الجيد تشفيرها في شكل حامل نائب. يوفر Spring هنا أيضًا SimpleJDBCtemplate (يتم وضع علامة على SPRING3.1+ على أنه قديم في وقت لاحق ، ولكن تمت إزالته بالكامل في ربيع 4.3. يمكن للمرء أن تلبي الاحتياجات بالكامل) ومحرك قالب NamedParameterJDBCTEMPLATE.
اسمه parameterjdbctemplate
أعتقد أن الطلاب الذين استخدموا السبات يعرفون أنه يمكن استخدامه في HQL؟ أو: * لتكوين معلمات الاستعلام خارجيا. في إطار عمل الربيع JDBC ، يتم أيضًا توفير وسيلة لربط معلمات SQL ، باستخدام المعلمات المسماة.
نحتاج فقط إلى استخدام Autowired للحقن في فئة NameParameterJdBctemplate:
autowiredprivate nampyparameterjdbctemplate namparameterjdbctemplate ؛
عملية إدراج الدُفعات:
public void batchsave () {list <served> list = new ArrayList <Sether> () ؛ // إضافة قائمة مستخدم جديدة. Addd (AppStudent جديد (1 ، "Zhang San" ، 21)) ؛ List.add (AppStudent جديد (1 ، "Li Si" ، 22)) ؛ list.add (AppStudent جديد (1 ، "Wang Ermazi" ، 23)) ؛ // batch to array sqlparametersource [] beansources = sqlparametersourceutils.createBatch (list.toarray ()) ؛ String sql = "insert في app_student (class_id ، name ، age) القيم (: classid ،: name ،: age)" ؛ namedparameterjdbctemplate.batchupdate (SQL ، Beansources) ؛}أخيرًا ، نستخدم System.CurrentTimeMillis () لمقارنة وطباعة وقت التنفيذ قبل وبعد التحول المحدد.
start long = system.currentTimeMillis () ؛ // إعادة تشكيل الكود قبل وبعد ، واستكمله بنفسك الطويل = system.currentTimeMillis () ؛ system.out.println ("المرة الثانية:"+(end-start)) ؛الصيام سريع بالتأكيد. بالنسبة إلى مدى سرعة ذلك ، فإنه يحتاج إلى إجراء مقارنة ذات صلة بناءً على حجم البيانات وتكوين الجهاز.
رمز مصدر المشروع: https://gites.com/52itstyle/spring-data-jpa
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.