เมื่อปีที่แล้วฉันมีความเข้าใจเล็กน้อยว่า Springboot ที่สะดวกและรวดเร็วได้รับการพัฒนาในช่องต่างๆ แต่ฉันไม่ได้เรียนอย่างหนักในเวลานั้น ท้ายที่สุดฉันรู้สึกว่าฉันไม่ได้มีความเชี่ยวชาญใน Struts และ SpringMVC มากนัก อย่างไรก็ตามหลังจากอ่านบทนำมากมายเกี่ยวกับ Springboot มันก็ไม่ยากอย่างที่ฉันคิดดังนั้นฉันจึงเริ่มเตรียมเรียนรู้ Springboot ในเวลาว่างหลังจากอ่านสปริงบู๊ทการต่อสู้จริงและบล็อกของอาจารย์เกี่ยวกับ Springboot ฉันเริ่มเขียนโครงการ Springboot ครั้งแรกของฉัน หลังจากสามารถใช้ฟังก์ชั่น CRUD ใน Springboot ด้วยการพัฒนาอินเทอร์เฟซสไตล์ Restful อย่างง่าย ๆ โพสต์บล็อกนี้ถูกสร้างขึ้น
บทนำสู่ Springboot
Spring Boot เป็นกรอบใหม่ที่จัดทำโดยทีมสำคัญ มันถูกออกแบบมาเพื่อลดความซับซ้อนของกระบวนการก่อสร้างและการพัฒนาเริ่มต้นของแอพพลิเคชั่นฤดูใบไม้ผลิใหม่ เฟรมเวิร์กใช้วิธีเฉพาะในการกำหนดค่าเพื่อให้นักพัฒนาไม่จำเป็นต้องกำหนดการกำหนดค่าหม้อไอน้ำอีกต่อไป
พูดง่ายๆคือคุณสามารถพัฒนาโครงการได้อย่างรวดเร็วด้วยขวดเพียงไม่กี่ขวดและการกำหนดค่าง่าย ๆ
หากฉันต้องการพัฒนาอินเทอร์เฟซภายนอกฉันต้องใช้รหัสต่อไปนี้เท่านั้น
โปรแกรมหลักเริ่มต้น Springboot
@springbootapplicationpublic คลาสแอปพลิเคชัน {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {springapplication.run (application.class, args); -ชั้นควบคุม
@RestControllerPublic คลาส helloWorldController {@requestmapping ("/hello") ดัชนีสตริงสาธารณะ () {return "hello world"; -หลังจากเริ่มโปรแกรมหลักสำเร็จให้เขียนเลเยอร์ควบคุมจากนั้นป้อน http: // localhost: 8080 // สวัสดีในเบราว์เซอร์เพื่อดูข้อมูล
ฉันรู้สึกว่าการใช้ Springboot เพื่อพัฒนาโปรแกรมนั้นง่ายมาก!
ในคำพูดที่เป็นประโยชน์ของ Springboot:
ไม่มีการกำหนดค่าที่นี่ไม่มี web.xml ไม่มีคำแนะนำในการสร้างและแม้แต่ไม่มีเซิร์ฟเวอร์แอปพลิเคชัน แต่นั่นคือแอปพลิเคชันทั้งหมด Springboot จะทำทุกอย่างที่จำเป็นในการดำเนินการแอปพลิเคชันและคุณเพียงแค่ต้องได้รับรหัสของแอปพลิเคชัน
พัฒนาบริการพักผ่อนตาม Springboot
ก่อนพัฒนาโปรแกรมคุณควรเตรียมการบางอย่าง
สร้างฐานข้อมูล `springboot`; ใช้` springboot`; drop table ถ้ามีอยู่ `t_user`; สร้างตาราง` t_user` (`id` int (11) ไม่ใช่ null auto_increment ความคิดเห็น 'id',` varchar (10) ความคิดเห็นเริ่มต้น auto_increment = 12 charset เริ่มต้น = utf8;
ขวดหลักของ Springboot มากที่สุด
Spring-Boot-Starter: Core Module รวมถึงการสนับสนุนการกำหนดค่าอัตโนมัติการบันทึกและ YAML;
<carent> <roupId> org.springframework.boot </groupId> <ratifactid> Spring-Boot-Starter-Parent </artifactid> <Sersion> 1.5.9.Release </เวอร์ชัน> <inelative path/> </parent> <properties> <properties> <java.version> 1.7 </java.version> <mybatis-spring-boot> 1.2.0 </mybatis-spring-boot> <mysql-connector> 5.1.39 </mysql-connector> <ArtIfactId> Spring-Boot-Starter-WEB </artifactId> </dermentrency> <การพึ่งพา> <roupId> org.springframework.boot </groupId> <ArtIfactId> Spring-Boot-Starter-Data-JPA </artifactId> </การพึ่งพาอาศัย> <การพึ่งพา> <roupId> org.springframework.boot </roupid> <RoupID> org.springframework.boot </groupId> <ratifactid> Spring-Boot-Starter-test </artifactid> <pope> ทดสอบ </cope> </การพึ่งพาอาศัย> <! <ArtIfactId> MyBatis-Spring-Boot-Starter </artifactid> <sersion> $ {mybatis-spring-boot} </เวอร์ชัน> </การพึ่งพาอาศัย> <! <cersion> $ {mysql-connector} </version> </การพึ่งพา> </การพึ่งพา> <uffer> <build> <plugins> <!-ใช้ปลั๊กอิน Springboot เพื่อใช้แอปพลิเคชันโมดูลสปริง-บู๊ท เมื่อไฟล์ใน classpath เปลี่ยนไปมันจะรีสตาร์ทโดยอัตโนมัติ! -> <plugin> <roupId> org.springframework.boot </groupid> <ratifactid> Spring-Boot-Maven-Plugin </artifactid> <การกำหนดค่า> <fork> true </fork> </configuration> com.pancm.web - เลเยอร์คอนโทรลเลอร์
com.pancm.dao - Data Operation Layer Dao
com.pancm.bean - คลาสเอนทิตี
com.pancm.bean.service - เลเยอร์ตรรกะธุรกิจ
แอปพลิเคชัน - คลาสเริ่มต้นแอปพลิเคชัน
Application.properties - ไฟล์การกำหนดค่าแอปพลิเคชันการกำหนดค่าจะถูกอ่านโดยอัตโนมัติโดยการเริ่มต้นแอปพลิเคชัน
โดยทั่วไปเราต้องการการกำหนดค่าที่กำหนดเองบางอย่างเช่นการกำหนดค่าการกำหนดค่าการเชื่อมต่อของ JDBC ซึ่งเราสามารถใช้ application.properties เพื่อกำหนดค่า การกำหนดค่าที่แท้จริงของแหล่งข้อมูลจะอยู่ภายใต้ของทุกคน
## การกำหนดค่าแหล่งข้อมูล Spring.datasource.url = jdbc: mysql: // localhost: 3306/springboot? useunicode = true & ariticleencoding = utf8spring.datasource.username = rootspring.datasource.password การกำหนดค่า MyBatis# กำหนดค่าเป็น com.pancm.bean ชี้ไปที่พา ธ แพ็คเกจคลาสเอนทิตี MyBatis.TypealiasEspackage = com.pancm.bean# กำหนดค่าแพ็คเกจ Mapper ภายใต้เส้นทาง classpath * หมายความว่าไฟล์ XML ทั้งหมดจะถูกสแกน mybatis.mapperlocations = classpath/: mapper/*. xml
เกือบจะถึงเวลาที่จะมาถึงรหัสสำคัญ
เราเริ่มต้นด้วยการเขียนคลาส Pojo ซึ่งสอดคล้องกับตาราง t_user ในฐานข้อมูล
รหัสมีดังนี้
ผู้ใช้ระดับสาธารณะ { / ** หมายเลข* / ID INT ส่วนตัว; / ** ชื่อ*/ ชื่อสตริงส่วนตัว; / ** อายุ*/ อายุ int ส่วนตัว; ผู้ใช้สาธารณะ () {} ผู้ใช้คลาสสาธารณะ { / ** หมายเลข* / ID int ส่วนตัว; / ** ชื่อ*/ ชื่อสตริงส่วนตัว; / ** อายุ*/ อายุ int ส่วนตัว; ผู้ใช้สาธารณะ () {} // getter และ setter ละเว้น}ในเลเยอร์ DAO ก่อนหน้านี้ทั้ง Hibernate และ MyBatis สามารถใช้คำอธิบายประกอบหรือไฟล์การกำหนดค่า Mapper ที่นี่เราใช้ JPA ของฤดูใบไม้ผลิเพื่อทำ CRUD ให้เสร็จสมบูรณ์
ภาพประกอบ:
โดยทั่วไปมีสองวิธีในการใช้ CRUD และการใช้งานฐานข้อมูล:
อย่างแรกคือการกำหนดค่า Mapper ของ XML
ประเภทที่สองคือการใช้คำอธิบายประกอบ, @Insert, @Select, @UpDate, @Delete และคำอธิบายประกอบอื่น ๆ บทความนี้ใช้ประเภทที่สอง
นำเข้า org.apache.ibatis.annotations.delete; นำเข้า org.apache.ibatis.annotations.insert; นำเข้า org.apache.ibatis.annotations.mapper; นำเข้า org.apache.ibatis.annotations.result; org.apache.ibatis.annotations.update; นำเข้า org.springframework.data.repository.query.param; นำเข้า com.pancm.bean.user; @mapperpublic interface userdao { / *** ข้อมูลผู้ใช้เพิ่ม* / @insert (#{id},#{ชื่อ},#{อายุ}) ") โมฆะ adduser (ผู้ใช้ผู้ใช้); / *** การปรับเปลี่ยนข้อมูลผู้ใช้*/ @UpDate ("อัปเดต T_USER SET NAME =#{ชื่อ}, อายุ =#{อายุ} โดยที่ id =#{id}") void updateUser (ผู้ใช้ผู้ใช้); / *** การลบข้อมูลผู้ใช้*/ @delete ("ลบจาก t_user โดยที่ id =#{id}") เป็นโมฆะ deleteuser (int id); / *** ข้อมูลผู้ใช้แบบสอบถามตามชื่อผู้ใช้**/ @Select ("เลือก ID, ชื่อ, อายุจาก t_user") // ส่งคืนแผนที่ผลลัพธ์ชุด @Results ({@Result (คุณสมบัติ = "id", คอลัมน์ = "id"), @Result (property = "name", คอลัมน์ = "ชื่อ"), @Result ชื่อผู้ใช้สตริง); / *** ข้อมูลผู้ใช้แบบสอบถามตามรหัสผู้ใช้**/ @Select ("เลือก ID, ชื่อ, อายุจาก t_user") ผู้ใช้ findById (@param ("id") int userId); / *** ข้อมูลผู้ใช้แบบสอบถามตามอายุผู้ใช้*/ @Select ("เลือก ID, ชื่อ, อายุจาก t_user โดยที่อายุ = #{userage}") ผู้ใช้ findByage (int userage);}ความเข้าใจส่วนบุคคลเกี่ยวกับคำอธิบายประกอบที่ใช้โดยอินเทอร์เฟซนี้:
MAPPER: เพิ่มคำอธิบายประกอบนี้ลงในอินเทอร์เฟซเพื่อระบุว่าอินเทอร์เฟซนี้เป็น CRUD ที่ใช้งานตามคำอธิบายประกอบ
ผลลัพธ์: ชุดผลลัพธ์แผนที่ที่ส่งคืนคุณสมบัติแสดงถึงฟิลด์ของคลาสผู้ใช้และคอลัมน์แสดงถึงฟิลด์ของฐานข้อมูลที่เกี่ยวข้อง
Param: ฟิลด์สำหรับเงื่อนไข SQL
แทรก, เลือก, อัปเดต, ลบ: รับสมัครแก้ไขและลบฐานข้อมูลที่เกี่ยวข้อง
นี่คือโดยทั่วไปเหมือนกับไฮเบอร์เนตและ mybatis
รหัสมีดังนี้:
ส่วนต่อประสาน
นำเข้า com.pancm.bean.user;/******************************************************************************************* / ** * แก้ไขผู้ใช้ * @param ผู้ใช้ * @return */ Boolean UpdateUser (ผู้ใช้ผู้ใช้); / ** * ลบผู้ใช้ * @param id * @return */ boolean deleteuser (int id); / *** ข้อมูลผู้ใช้แบบสอบถามตามชื่อผู้ใช้* @Param ชื่อผู้ใช้*/ ผู้ใช้ findUserByName (ชื่อผู้ใช้สตริง); / *** ข้อมูลผู้ใช้แบบสอบถามตามรหัสผู้ใช้* @param userId*/ ผู้ใช้ findUserById (int userId); / *** ข้อมูลผู้ใช้แบบสอบถามตามรหัสผู้ใช้* @param userage*/ ผู้ใช้ findUserByage (int userage);}
คลาสการดำเนินการ
นำเข้า org.springframework.beans.factory.annotation.autowired; นำเข้า org.springframework.stereotype.service; นำเข้า com.pancm.bean.user; นำเข้า com.pancm.dao.userdao; เวอร์ชัน: 1.0.0* @author pancm* @date 9 มกราคม 2018*/ @servicepublic คลาส userserviceimpl ใช้ผู้ใช้ {@autowired ส่วนตัว userdao userdao; @Override Public Boolean Adduser (ผู้ใช้ผู้ใช้) {Boolean Flag = FALSE; ลอง {userdao.adduser (ผู้ใช้); ธง = จริง; } catch (exception e) {e.printstacktrace (); } return flag; } @Override Public Boolean UpdateUser (ผู้ใช้ผู้ใช้) {Boolean Flag = FALSE; ลอง {userdao.updateUser (ผู้ใช้); ธง = จริง; } catch (exception e) {e.printstacktrace (); } return flag; } @Override บูลีนสาธารณะ deleteuser (int id) {ธงบูลีน = false; ลอง {userdao.deleteuser (id); ธง = จริง; } catch (exception e) {e.printstacktrace (); } return flag; } @Override ผู้ใช้สาธารณะ findUserByName (ชื่อผู้ใช้สตริง) {return userdao.findbyName (ชื่อผู้ใช้); } @Override ผู้ใช้สาธารณะ findUserById (int userId) {return userdao.findbyId (userId); } @Override ผู้ใช้สาธารณะ FindUserByage (int userage) {return userdao.findbyage (userage); -เลเยอร์ควบคุมนั้นคล้ายกับ SpringMVC มาก แต่มันง่ายกว่านั้นมาก
ความเข้าใจส่วนตัวของฉันเกี่ยวกับคำอธิบายประกอบเกี่ยวกับเลเยอร์ควบคุมมีดังนี้:
RestController: วิธีการในคลาสเริ่มต้นจะถูกส่งกลับในรูปแบบ JSON
requestmapping: การกำหนดค่าพา ธ อินเตอร์เฟส
วิธี: รูปแบบการร้องขอ
RequestParam: ขอพารามิเตอร์
การใช้งานเฉพาะมีดังนี้:
นำเข้า org.springframework.beans.factory.annotation.autowired; นำเข้า org.springframework.web.bind.annotation.requestmapping; นำเข้า org.springframework.web.bind.annotation.RequestMethod; org.springframework.web.bind.annotation.restcontroller; นำเข้า com.pancm.bean.user; นำเข้า com.pancm.service.userservice;/******************************************************* "/api/user") คลาสสาธารณะ userrestcontroller {@autoWired Userservice Userservice; @RequestMapping (value = "/addUser", method = requestMethod.post) Public Boolean Adduser (ผู้ใช้ผู้ใช้) {System.out.println ("เริ่มเพิ่ม ... "); return userservice.adduser (ผู้ใช้); } @RequestMapping (value = "/updateUser", method = requestMethod.put) Public Boolean UpdateUser (ผู้ใช้ผู้ใช้) {System.out.println ("เริ่มอัปเดต ... "); return userservice.updateUser (ผู้ใช้); } @RequestMapping (value = "/deleteUser", method = requestMethod.delete) บูลีนสาธารณะลบ (@requestparam (value = "ชื่อผู้ใช้", จำเป็น = จริง) int userId) {system.out.println ("เริ่มลบ ... "); return userservice.deleteuser (userId); } @RequestMapping (value = "/username", method = requestMethod.get) ผู้ใช้สาธารณะ findByUserName (@RequestParam (value = "ชื่อผู้ใช้" จำเป็น = true) ชื่อผู้ใช้สตริง) {System.out.println ("start query ... "); return userservice.finduserbyname (ชื่อผู้ใช้); } @RequestMapping (value = "/userId", method = requestMethod.get) ผู้ใช้สาธารณะ findByUserId (@requestparam (value = "userId", จำเป็น = true) int userId) {system.out.println ("เริ่มค้นหา ... "); return userservice.finduserbyId (userId); } @RequestMapping (value = "/userage", method = requestMethod.get) ผู้ใช้สาธารณะ findByUserage (@requestparam (value = "userage", จำเป็น = true) ผู้ใช้ int) {System.out.println ("Start Query ... "); return userservice.finduserbyId (userage); -SpringApplication เป็นคลาสที่ใช้ในการเริ่มต้นแอปพลิเคชันฤดูใบไม้ผลิจากวิธีการหลัก
โดยค่าเริ่มต้นจะดำเนินการตามขั้นตอนต่อไปนี้:
1. สร้างอินสแตนซ์ ApplicationContext ที่เหมาะสม (ขึ้นอยู่กับ ClassPath)
2. ลงทะเบียน CommandLinePropertySource เพื่อใช้พารามิเตอร์บรรทัดคำสั่งเป็นคุณสมบัติสปริง
3. รีเฟรชบริบทของแอปพลิเคชันและโหลดถั่วซิงเกิลทั้งหมด
4. เปิดใช้งานถั่ว Commandlinerunner ทั้งหมด
เริ่มคลาสนี้โดยตรงโดยใช้ Main และ Springboot จะกำหนดค่าโดยอัตโนมัติ
PS: แม้ตอนนี้ฉันก็ยังคิดว่ามันน่าทึ่งจริงๆ
มีการอธิบายคำอธิบายประกอบสำหรับคลาสนี้ -
SpringBootapplication: เปิดการสแกนส่วนประกอบและการกำหนดค่าอัตโนมัติ
Mapperscan: Mapper Interface Class Scan Package การกำหนดค่าการกำหนดค่า
รหัสมีดังนี้:
นำเข้า org.mybatis.spring.annotation.mapperscan; นำเข้า org.springframework.boot.springapplication; นำเข้า org.springframework.boot.autoconfigure.springbootbootapplication; /************************************************* 2018*/@springbootapplication@mapperscan ("com.pancm.dao") แอปพลิเคชันระดับสาธารณะ {โมฆะสาธารณะคงที่หลัก (สตริง [] args) {// เริ่มต้น Tomcat ฝังตัวและเริ่มต้นสภาพแวดล้อมฤดูใบไม้ผลิ System.out.println ("โปรแกรมกำลังทำงาน ... "); -หลังจากเขียนรหัสแล้วเราจะทำการทดสอบรหัส
หลังจากเริ่มแอปพลิเคชันให้ใช้เครื่องมือ Postman เพื่อทดสอบอินเทอร์เฟซ
ผลการทดสอบมีดังนี้:
ใช้การทดสอบแบบรับและโพสต์เพียงครั้งเดียวเท่านั้นที่นี่ วิธีการจริงได้รับการทดสอบแล้ว แต่ฉันรู้สึกว่าไม่จำเป็นต้องติดแผนที่
ฉันวางโครงการใน GitHub:
https://github.com/xuwujing/springboot
สรุป
ข้างต้นคือการแนะนำตัวของบรรณาธิการเพื่อพัฒนาบริการที่อยู่บนพื้นฐานของ Springboot เพื่อใช้ฟังก์ชั่นการเพิ่มการลบการแก้ไขและการตรวจสอบ ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับทุกคนในเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!