1. 程式人生 > 其它 >Spring Boot企業微信點餐系統學習心得

Spring Boot企業微信點餐系統學習心得

技術標籤:JAVA學習筆記javamybatis資料庫spring boot

Spring Boot企業微信點餐系統學習心得

Java基礎補充

  • for-each語法

    for (int data: res) {
        System.out.println(data);
    }
    
  • 建立List,List只是一個介面,不能被例項化

    List<int> intList = new ArrayList<>();
    
  • 建立一個異常類

    public class SellException extends RuntimeException{
        private Integer code;
    public SellException(ResultEnum resultEnum) { super(resultEnum.getMessage()); this.code = resultEnum.getCode(); } }
  • 只要不是同一個函式,就能相互呼叫,甚至過載函式直接return另一個形式

  • 新建一個BigDecimal必須傳入數值哦,可以寫new BigDecimal(0);或者new BigDecimal(BigInteger.ZERO);

  • 精確的數字BigDecimal做加減乘除都有自己的函式

  • 生成id要加上synchronized關鍵字,防止多執行緒導致錯位

  • CollectionUtils.isEmpty(orderDetailList)判斷陣列是否為空

註解補充

  • @Autowired自動注入。測試的時候別忘了對Service的impl加上自動注入,直接new一下是得不到的

  • @RestController表示這個類是一個Controller,並且可以接收json資料

  • @RequestMapping修飾Controller類的時候,作用是先建立一個大的路由作為url字首

  • @Mapper表示這是一個mapper,即資料庫增刪改查

  • @Slf4j安裝了lombok外掛同時匯入了依賴,就不用寫logger物件了,直接使用log.info之類的方法

  • @DynamicUpdate可以實時更新資料庫時間,前提是你設定了自動設定時間

  • @Configuration表示這個類是起配置作用的

  • @Bean

  • @JsonProperty(“name”)對VO修飾,表示這個屬性名稱傳到前端是name

  • @Transactional是給函式加上事務回滾的功能

  • @Transient註解會在自動匹配欄位的時候忽略掉這個屬性

  • @Validated OrderForm orderForm,BindingResult bindingResult可以使用OrderForm這個類傳遞引數,也可以寫成RequestBody

  • @JsonSerialize(using=xxx.class)可以直接把某個屬性轉化為想要的型別,例如

    https://blog.csdn.net/weixin_40388298/article/details/88634100

  • @JsonInclude(JsonInclude.Include.NON_NULL),這個類返回給前端的json資料不包含null欄位,全域性配置直接去配置檔案裡寫jackson de…-pro…-inclusion: not_null

  • @RunWith(SpringRunner.class)
    @SprintBootTest
    測試類名
        @Test
        測試方法
    

Spring補充

  • Controller方法中引數新增@RequestBody()使用一個類來接收json資料,就不用一點點寫@RequestParams了,注意欄位要與json一致

  • 單元測試的時候,直接右鍵Go to->Test

  • 層級任務

    config--配置檔案類
    controller--對資料的展現,邏輯在service層寫,不要寫在controller層
    service--放置主要邏輯的地方,Seivice層是給Controller層呼叫的
    impl--是service子資料夾,實現service定義的函式
    mapper(dao)--對資料庫增刪改查
    pojo--實體類
    VO--檢視管理器,傳資料給前端
    DTO--是資料傳輸物件
    utils--工具類
    enums--放置列舉型別
    exception--放置錯誤型別
    converiter--用於資料轉化建立的類
    
  • 學到了一個新的東西,檢視管理器VO,建立一個類,然後宣告屬性,返回這個類,就構成了json格式

  • @JsonProperty(“name”)註解,將字元序列化,即傳到前端的json欄位是name,而不是類中的categoryName屬性

  • VO可以巢狀,就類似json格式資料巢狀,直接把一個VO丟到另一個VO中就歐克

    @RestController  //可以接收json
    @RequestMapping("/buyer/product")  //url字首
    public class BuyerProductController {
        @GetMapping("/list")  //訪問http://localhost:8080/sell/buyer/product/list
        public ResultVO list(){
            ResultVO resultVO = new ResultVO();
            ProductVO productVO = new ProductVO();
            ProductInfoVO productInfoVO = new ProductInfoVO();
    
            productVO.setProductInfoVOList(Arrays.asList(productInfoVO));
            resultVO.setData(Arrays.asList(productVO));
            resultVO.setCode(0);
            resultVO.setMeg("成功");
            
            return resultVO;
        }
    }
    
  • impl實現Service的介面的時候要加上@Service註解,否則提示找不到Bean

Mybatis補充

  • Mybatis一定一定是寫無參構造方法!!!即不寫構造方法

  • 記得寫@Mapper註解

  • 開啟資料庫命名規範與Java命名規範有兩種形式,寫配置類或者改配置檔案

    mybatis:
      configuration:
        map-underscore-to-camel-case: true
    
  • 設定id自增,在傳資料的時候就不用把id傳進去了

  • mapper的sql必須是函式裡的引數,否則找不到

  • 前端傳過來商品id和數量,你去資料庫查相關商品資訊,然後寫入訂單情況,這是資料庫關聯的

其他工具

  • Gson可以很方便的將字串與json轉換(寫個物件去接收json資料)

    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
    </dependency>
    
  • lombok外掛和依賴,可以加上@Data註解不寫getter、setter、tostring還有配置logback不用例項化logger

    <dependence>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependence>
    
  • BeanUtils.copyProperties(productInfo,productInfoVO);可以複製屬性,但是隻有同名的屬性才能複製,把前面的複製到後面的去。

  • postman 使用get方法的時候要在Params上加引數,Post方法在Body加引數

相關依賴

<!--        lombok-->
		<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
<!--        Gson-->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
        </dependency>
<!--        資料庫依賴-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.3</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
<!--        swagger-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.7.0</version>
        </dependency>
<!--        測試用的-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>

配置檔案

有時候配置檔案不對也會報錯,例如中文全變成了"?",例如時區有問題,遇到問題不要慌,先百度一下

application.yml

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/sell?characterEncoding=utf-8&useSSL=false

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--給類起別名-->
    <typeAliases>
        <typeAlias type="com.example.demo.pojo.Veg" alias="Veg"/>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/sell?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

</configuration>