SpringBoot學習(一)
一:第一個SpringBoot專案
一:建立一個SpringBoot專案
選擇web元件
這裡有問題一:SpringBoot專案構建過慢
解決辦法:在Maven根目錄下的setting.xml新增阿里雲映象,過程自行百度
二:建立Controller並訪問
建立好的目錄如下:
在com.example.demo包下面建立一個controller包,再建立一個helloController類
這裡有問題二:*Application.java為SpringBoot的啟動類,僅會掃描其所在的當前目錄及其目錄。
- @RestController
- public class helloController
{ - @RequestMapping(value="/hello",method=RequestMethod.GET)
- public String hello() {
- return "Hello!!";
- }
- }
@RestController = @Controller + @ResponseBody 註冊controller,返回資料為json格式。
所用的工具為Postman,有Google瀏覽器就可以用。
訪問 localhost:8080/hello,就成功了。
二:讀取配置檔案
Spring Boot的配置檔案有兩種字尾 *.properties或者*.yml,兩種區別,自行鑑別。
寫了controller來讀取名字的屬性
一:屬性注入
- @RestController
- public class animalController {
- @Value("${cat.name}")
- private String catName;
- @Value("${dog.name}")
- private String dogName;
- @RequestMapping(value="")
- public String animal() {
- System.out.println(catName+"---"+dogName);
- return "OK!!";
- }
- }
@Value 註解 將${xxx}大括號中的對應的值注入註釋的屬性上
二:物件注入
寫個cat物件
- @Component
- @ConfigurationProperties(prefix="cat")
- public class cat {
- private String name;
- private int age;
- }
@Component 將cat注入容器
@ConfigurationProperties 將同類的配置資訊封裝成實體類
@Autowired 自動裝配
- @RestController
- public class animalController {
- @Autowired
- private cat cat;
- @RequestMapping(value="")
- public String animal() {
- System.out.println(cat);
- return "OK!!";
- }
- }
訪問localhost:8080/,就可以了
三:利用Spring-data-JPA進行curd
JPA(Java Persistence API)是Sun官方提出的Java持久化規範,它為Java開發人員提供了一種物件/關聯對映工具 來管理Java應用中的關係資料。
簡而言之,JPA就是一種規範,工具。
一:新增依賴
pom.xml中新增
- <!-- jpa依賴 -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-jpa</artifactId>
- </dependency>
- <!-- mysql依賴 -->
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- </dependency>
、二:建立一個物件
- @Entity
- public class user {
- @Id
- @GeneratedValue
- private int id;
- private String name;
- private int age;
- }
@Entity 資料庫中對應的實體類
@Id 主鍵
@GeneratedValue 自增長
配置資料庫引數
- spring:
- datasource:
- driver-class-name: com.mysql.jdbc.Driver
- url: jdbc:mysql://localhost:3306/springboot
- username: root
- password: xxxx
- jpa:
- hibernate:
- ddl-auto: update
- show-sql: true
ddl-auto : 自動建表 有相對應的表則訪問,沒有則建立
執行,啟動Spring Boot,發現數據庫中對一張表
三:過程
建立一個 repository包和service包,並建立userRepository類,userService類
userRepository類
- public interface userRepository extends JpaRepository<user, Integer>{
- //對應的實體物件 主鍵的型別
- }
userService類
- @Service
- public class userService {
- @Autowired
- private userRepository userRepository;
- // 查詢全部
- public List<user> findAll() {
- return userRepository.findAll();
- }
- // 根據id查詢
- public user findById(int id) {
- return userRepository.getOne(id);
- }
- // 新增使用者
- public user save(user u) {
- u.setId(0);
- return userRepository.save(u);
- }
- // 刪除
- public void delete(int id) {
- userRepository.delete(userRepository.getOne(id));
- }
- // 修改使用者
- public user update(user u ) {
- return userRepository.save(u);
- }
- }
userController
- @RestController
- public class userController {
- @Autowired
- private userService userService;
- @GetMapping(value = "get/{id}")
- public user findById(@PathVariable("id") int id) {
- return userService.findById(id);
- }
- }
這個url的寫法是RESTful程式設計,可自行百度RESTful
這裡問題三:查詢返回的結果無法轉化為json格式
異常資訊如下:
原因:hibernate會給每個被管理的物件加上hibernateLazyInitializer屬性,hibernate會給被管理的pojo加入一個hibernateLazyInitializer屬性,jsonplugin通過java的反射機制將pojo轉換成json,會把hibernateLazyInitializer也拿出來操作,但是hibernateLazyInitializer無法由反射得到。
解決方法:讓其生成json物件的時候,忽略hibernateLazyInitializer屬性
在例項類上加上
- @Entity
- @JsonIgnoreProperties(value = {"hibernateLazyInitializer", "handler"})
- public class user {
- 。。。
- }