Springboot هو منتج ولد لتبسيط إنشاء تطبيقات الربيع ونشرها ونشرها. تتيح لنا ميزة التجميع التلقائي التركيز بشكل أفضل على العمل نفسه بدلاً من تكوين XML الخارجي. نحتاج فقط إلى اتباع المواصفات وإدخال التبعيات ذات الصلة لإنشاء مشروع ويب بسهولة.
يتم تغليف عمليات قاعدة بيانات Spring Framework بعمق في JDBC. من خلال وظيفة حقن التبعية ، يمكن تسجيل مصدر البيانات في JDBCtemplate ، مما يسمح لنا بسهولة بإكمال رسم الخرائط المتعلقة بالكائنات والمساعدة في تجنب الأخطاء الشائعة. في Springboot ، يمكننا بسهولة استخدامه.
سمات
استيراد التبعيات
أضف التبعية على jdbctemplate في pom.xml
<!-حزمة التبعية الربيع JDBC ، باستخدام spring-boot-starter-jdbc أو spring-boot-starter-data-jpa سوف يحصل تلقائيًا على hikaricp-> <rependency> <roupiD> org.springframework.boot </grouped> Package-> <redence> <roupency> mysql </rougiD> <StifactId> mysql-connector-java </stifactid> </premited> <!-tomcat مدمج الحاوية الافتراضية ، إذا كنت بحاجة إلى استبدال الحاوية ، فهذا أمر بسيط للغاية-> <seperency> <StifactId> Spring-Boot-Starter-Web </stifactid> </sependency>
الاتصال بقاعدة البيانات
أضف التكوين التالي في Application.properties. تجدر الإشارة إلى أن Springboot ستقوم تلقائيًا بتكوين مصدر البيانات بشكل افتراضي ، مما سيعطي الأولوية لاستخدام مجموعة اتصال Hikaricp. إذا لم يكن هناك تبعية ، حدد Tomcat-JDBC. إذا لم يكن أي من الأولين متاحين ، فحدد Commons DBCP2. Spring.DataSource.Type يمكن أن تحدد أنواعًا أخرى من تجمعات الاتصال
spring.datasource.url = jdbc: mysql: // localhost: 3306/chapple4؟ useUnicode = true & farmencoding = utf-8 & zerodateTimeBehavior = convertto NULL & LOMETMULTIQUERIS = TRUE & USESSL = falespring.datasource.password = rootspring.datasource.username = root#spring.datasource.type#more يمكن تعديل التكوينات الدقيقة عن طريق البادئة التالية#spring.datasource.hikari#spring.datasource.tomcat#spring.datasource.dbcp2
ابدأ المشروع ، من خلال السجل ، يمكنك أن ترى ذلك افتراضيًا ، يتم حقن Hikaridatasource.
2018-05-07 10: 33: 54. خادم JMX كـ mbean [com.zaxxer.hikari: name = datasource ، type = hikaridatasource] 2018-05-07 10: 33: 54.071 info 9640 --- '2018-05-07 10: 33: 54.075 info 9640 --- [main] com.battcn.Chapter4application: بدأ الفصل 4Application في 3.402 ثانية (JVM تشغيل) لمدة 3.93)
رمز محدد
بعد الانتهاء من التكوين الأساسي ، قم بإجراء عمليات ترميز محددة. من أجل تقليل كمية التعليمات البرمجية ، لن أكتب واجهات مثل userDao و UserveserVice. سأستخدم JDBCtemplate مباشرة في وحدة التحكم للوصول إلى قاعدة البيانات. هذا ليس موحدا. لا تتعلم مني ...
هيكل الجدول
قم بإنشاء جدول مع T_USER
إنشاء جدول `t_user` (` id` int (8) not null auto_increment تعليق "زيادة المفتاح الأساسي" ، `username` varchar (50) وليس التعليقات الفارغة 'اسم المستخدم' ،` password` varchar (50) وليس التعليقات الفارغة 'كلمة المرور' ، المفتاح الأساسي (`id`)) محرك innodb defauth charset = utf8 = uTfered" المستخدم "؛
فئة الكيان
Package com.battcn.entity ؛/** * Author Levin * since 2018/5/7 0007 */public class user {private long id ؛ اسم المستخدم الخاص بالسلسلة الخاصة ؛ كلمة مرور السلسلة الخاصة ؛ // TODO SHOMIT TET}واجهة نمط مريحة
حزمة com.battcn.controller ؛ استيراد com.battcn.entity.user ؛ استيراد org.springframework.beans.factory.annotation. org.springframework.web.bind.annotation. * ؛ import java.util.list ؛/** * Auuthor Levin * since 2018/4/23 0023 */ @reprontroller @requestmapping ("/user") الفئة العامة springjdbccontroller @autowired public springjdbccontroller (jdbctemplate jdbctemplate) {this.jdbctemplate = jdbctemplate ؛ } GetMapping Public List <Ser> QueryUsers () {// Query All Users String Sql = "Select * from T_User" ؛ return jdbctemplate.query (sql ، كائن جديد [] {} ، new BeanPropertyRowMapper <> (user.class)) ؛ } getMapping ("/{id}") المستخدم العام getUser ( @pathvariable معرف طويل) {// Query String sql = "Select * from t_user where id =؟" ؛ return jdbctemplate.queryforoBject (SQL ، كائن جديد [] {id} ، جديد beanpropertyRowMapper <> (user.class)) ؛ } deletemapping ("/{id}") public int deluser ( @pathvariable id) {// حذف معلومات المستخدم وفقًا لسلسلة معرف المفتاح الأساسية sql = "delete from t_user where id =؟" ؛ return jdbctemplate.update (sql ، id) ؛ } postmapping public int adduser (requestbody user user) {// إضافة سلسلة المستخدم sql = "أدخل في T_USER (اسم المستخدم ، كلمة المرور) (؟ ،؟)" ؛ return jdbctemplate.update (sql ، user.getusername () ، user.getPassword ()) ؛ } putmapping ("/{id ad}") public int edituser ( @pathvariable معرف طويل ، مستخدم @requestbody مستخدم) {// تعديل معلومات المستخدم وفقًا لسلسلة معرف المفتاح الأساسية sql = "تحديث t_user set username =؟ ، password =؟ where id =؟" ؛ return jdbctemplate.update (sql ، user.getusername () ، user.getPassword () ، id) ؛ }}امتحان
نظرًا لأن الواجهة أعلاه عبارة عن واجهة مصادفة على غرار ، لا يمكن إكمال إضافة وتعديل من خلال المتصفح ، فنحن بحاجة إلى كتابة Junit بأنفسنا أو استخدام أدوات مثل Postman.
قم بإنشاء اختبار Unit Chapter4ApplicationTests ومحاكاة عمليات الطلب مثل GET ، POST ، PUT ، DELETE ، إلخ. من خلال TestRestTemplate
package com.battcn ؛ استيراد com.battcn.entity.user ؛ استيراد org.junit.test ؛ استيراد org.junit.runner.runwith ؛ import org.slf4j.logger ؛ import org.slf4j.loggerfactory ؛ org.springframework.boot.test.context.springBoottest ؛ استيراد org.springframework.boot.web.client.testresttemplate ؛ import org.springframework.boot.web.server.localserverport ؛ org.springframework.http.httpmethod ؛ import org.springframework.http.responseentity ؛ import org.springframework.test.context.junit4 */@runwith (springrunner.class) springboottest (classes = quapple4application.class ، webenvironment = springBoottest.webenvironment.random_port) class chapplevplicationtests {private static logger log = loggerfactory.getLogger (chapple4applicationTests.Class) ؛ Autowired private testrestTemplate قالب ؛ @localserverport private port ؛ Test public void test1 () يلقي استثناء {template.postforentity ("http: // localhost:" + port + "/user experal ، user new (" user1 "،" pass1 ") ، integer.class) ؛ log.info ("[إضافة نجاح المستخدم]/n") ؛ // todo إذا كانت المجموعة التي تم إرجاعها ، فاستخدم Exchange بدلاً من getforentity ، والتي تحتاج إلى فرض استجابة النوع <list <served> desponse2 = template.exchange ("http: // localhost:" + port + "/user" ، httpmethod.get ، null ، new ParameterizedTypereference <list> القائمة النهائية <Sether> body = response2.getBody () ؛ log.info ("[Query all] - [{}]/n" ، body) ؛ userId userD long = body.get (0) .getID () ؛ استجابة <Sether> stription3 = template.getForentity ("http: // localhost:" + port + "/user/{id}" ، user.class ، userId) ؛ log.info ("[[Query Queary primary] - [{}]/n" ، desponse3.getBody ()) ؛ template.put ("http: // localhost:" + port + "/user/{id}" ، user new ("user11" ، "pass11") ، userD) ؛ log.info ("[تعديل المستخدم بنجاح]/n") ؛ template.delete ("http: // localhost:" + port + "/user/{id}" ، userId) ؛ log.info ("[حذف المستخدم بنجاح]") ؛ }}لخص
يقدم هذا الفصل العديد من العمليات الشائعة الاستخدام لـ JDBCtemplate. للحصول على التفاصيل ، يرجى الرجوع إلى وثائق JDBCTEMPLATE API.
كتبت العديد من BigWigs دروسًا عن Springboot. إذا كان هناك أي أوجه تشابه ، يرجى أن تسامحني. يعتمد هذا البرنامج التعليمي على أحدث نماذج من نماذج الربيع: 2.0.1.RELEASE ، وسيتم تقديم ميزات الإصدار الجديد معًا ...