1. 程式人生 > >SpringBoot學習(一)

SpringBoot學習(一)

一:第一個SpringBoot專案

一:建立一個SpringBoot專案

選擇web元件

這裡有問題一:SpringBoot專案構建過慢

解決辦法:在Maven根目錄下的setting.xml新增阿里雲映象,過程自行百度

二:建立Controller並訪問

建立好的目錄如下:

在com.example.demo包下面建立一個controller包,再建立一個helloController類

這裡有問題二:*Application.java為SpringBoot的啟動類,僅會掃描其所在的當前目錄及其目錄。

  1. @RestController
  2. public class helloController
    {
  3. @RequestMapping(value="/hello",method=RequestMethod.GET)
  4. public String hello() {
  5. return "Hello!!";
  6. }
  7. }

@RestController = @Controller + @ResponseBody    註冊controller,返回資料為json格式。

所用的工具為Postman,有Google瀏覽器就可以用。

訪問 localhost:8080/hello,就成功了。

二:讀取配置檔案

Spring Boot的配置檔案有兩種字尾 *.properties或者*.yml,兩種區別,自行鑑別。

寫了controller來讀取名字的屬性

一:屬性注入

  1. @RestController
  2. public class animalController {
  3. @Value("${cat.name}")
  4. private String catName;
  5. @Value("${dog.name}")
  6. private String dogName;
  7. @RequestMapping(value="")
  8. public String animal() {
  9. System.out.println(catName+"---"+dogName);
  10. return "OK!!";
  11. }
  12. }

@Value 註解  將${xxx}大括號中的對應的值注入註釋的屬性上

二:物件注入

寫個cat物件

  1. @Component
  2. @ConfigurationProperties(prefix="cat")
  3. public class cat {
  4. private String name;
  5. private int age;
  6. }

@Component    將cat注入容器

@ConfigurationProperties     將同類的配置資訊封裝成實體類

@Autowired  自動裝配 

  1. @RestController
  2. public class animalController {
  3. @Autowired
  4. private cat cat;
  5. @RequestMapping(value="")
  6. public String animal() {
  7. System.out.println(cat);
  8. return "OK!!";
  9. }
  10. }

訪問localhost:8080/,就可以了

三:利用Spring-data-JPA進行curd

JPA(Java Persistence API)是Sun官方提出的Java持久化規範,它為Java開發人員提供了一種物件/關聯對映工具 來管理Java應用中的關係資料。

簡而言之,JPA就是一種規範,工具。

一:新增依賴

pom.xml中新增

  1. <!-- jpa依賴 -->
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-data-jpa</artifactId>
  5. </dependency>
  6. <!-- mysql依賴 -->
  7. <dependency>
  8. <groupId>mysql</groupId>
  9. <artifactId>mysql-connector-java</artifactId>
  10. </dependency>

、二:建立一個物件

  1. @Entity
  2. public class user {
  3. @Id
  4. @GeneratedValue
  5. private int id;
  6. private String name;
  7. private int age;
  8. }

@Entity     資料庫中對應的實體類

@Id          主鍵

@GeneratedValue    自增長

配置資料庫引數

  1. spring:
  2. datasource:
  3. driver-class-name: com.mysql.jdbc.Driver
  4. url: jdbc:mysql://localhost:3306/springboot
  5. username: root
  6. password: xxxx
  7. jpa:
  8. hibernate:
  9. ddl-auto: update
  10. show-sql: true

ddl-auto : 自動建表  有相對應的表則訪問,沒有則建立 

執行,啟動Spring Boot,發現數據庫中對一張表

三:過程

建立一個 repository包和service包,並建立userRepository類,userService類

userRepository類

  1. public interface userRepository extends JpaRepository<user, Integer>{
  2. //對應的實體物件 主鍵的型別
  3. }

userService類

  1. @Service
  2. public class userService {
  3. @Autowired
  4. private userRepository userRepository;
  5. // 查詢全部
  6. public List<user> findAll() {
  7. return userRepository.findAll();
  8. }
  9. // 根據id查詢
  10. public user findById(int id) {
  11. return userRepository.getOne(id);
  12. }
  13. // 新增使用者
  14. public user save(user u) {
  15. u.setId(0);
  16. return userRepository.save(u);
  17. }
  18. // 刪除
  19. public void delete(int id) {
  20. userRepository.delete(userRepository.getOne(id));
  21. }
  22. // 修改使用者
  23. public user update(user u ) {
  24. return userRepository.save(u);
  25. }
  26. }

userController

  1. @RestController
  2. public class userController {
  3. @Autowired
  4. private userService userService;
  5. @GetMapping(value = "get/{id}")
  6. public user findById(@PathVariable("id") int id) {
  7. return userService.findById(id);
  8. }
  9. }

這個url的寫法是RESTful程式設計,可自行百度RESTful

這裡問題三:查詢返回的結果無法轉化為json格式

異常資訊如下:

原因:hibernate會給每個被管理的物件加上hibernateLazyInitializer屬性,hibernate會給被管理的pojo加入一個hibernateLazyInitializer屬性,jsonplugin通過java的反射機制將pojo轉換成json,會把hibernateLazyInitializer也拿出來操作,但是hibernateLazyInitializer無法由反射得到。

解決方法:讓其生成json物件的時候,忽略hibernateLazyInitializer屬性

在例項類上加上

  1. @Entity
  2. @JsonIgnoreProperties(value = {"hibernateLazyInitializer", "handler"})
  3. public class user {
  4. 。。。
  5. }