IDEA15 spring4 mybatis3.4 mysql RestLet Client用於發送請求測試前端
這是一個商城項目,原本想起名叫SSM項目,發現本身並無用springmvc。 前端還在作,使用nodejs。也是本身第一篇博客,記錄一下本身的學習過程,但願一方面能多作寫項目鍛鍊能力,另外一方面也讓本身在作完以後寫寫博客本身總結反思。
規範化了Controller的返回值,便於前端的使用,定義了統一的json序列化返回值ServiceResponse類java
這樣在controller中的返回值就能夠這樣寫node
這樣,經過前端後端共同約定好一個json格式,能夠大大加快開發的速度。mysql
咱們在開發過程當中常常會遇到配置問價文件的讀取,時間類型字符和字符串之間的轉換,在商業項目中金額的計算的處理等等。尤爲是在計算金額的時候發生精度丟失的問題,例如spring
public void fun() { System.out.println(0.05+0.01); System.out.println(1.0-0.42); System.out.println(4.012*100); System.out.println(3.3/10.0); }
0.060000000000000005 0.5800000000000001 401.19999999999993 0.32999999999999996
這種問題就會形成用戶下單時的錯誤,這種錯誤在商家一方必定是沒法承受的。
所幸java給咱們提供了一種解決方案,就是使用String的BigDecimal構造器,必定是使用String類型的,若是使用double類型構造器會形成更大的偏差。BigDecimal在用String作入參的時候,可以正確地把字符串轉化成真正精確的浮點數,若是入參是其餘類型,那麼會調用Object.toString方法進行轉化以後進行輸出。而Double.toString會使用必定的精度來四捨五入double,而後再輸出。sql
public static BigDecimal add(double v1, double v2) { BigDecimal b1 = new BigDecimal(Double.toString(v1)); BigDecimal b2 = new BigDecimal(Double.toString(v2)); return b1.add(b2); }
Po:Persistent Object 持久化對象,能夠理解爲與數據庫字段一一對應的對象 Vo:Value Object 值對象,用於在業務之間傳遞的對象,例如在用戶建立訂單的時候,建立一個OrderVo對象,將訂單信息,購物車信息,收貨地址信息,用戶信息封裝在一塊兒會更方便。若是直接使用Order PO, Cart Po,User Po這些持久對象,在封裝json傳遞給前端會形成不少麻煩。
對於普一般量:數據庫
public static final String EMAIL = "email";
對於一個對象的多個狀態:json
public interface Cart { int CHECKED = 1;//購物車選中 int UNCHECKED = 0;// String LIMIT_NUM_FAIL = "LIMIT NUM FAIL"; String LIMIT_NUM_SUCCESS = "LIMIT NUM SUCCESS"; }
對於一個對象某個狀態須要多個字段:後端
public enum OrderStatusEnum { CANCELED(0, "取消"), NO_PAY(10, "未支付"), PAID(20, "已付款"), SHIPPED(40, "已發貨"), ORDER_SUCCESS(50, "訂單完成"), ORDER_CLOSE(60, "訂單關閉"); public static OrderStatusEnum codeof(int code) { for (OrderStatusEnum orderStatusEnum : values()) { if (orderStatusEnum.getCode() == code) { return orderStatusEnum; } } throw new RuntimeException("沒有找到對應枚舉"); } OrderStatusEnum(int code, String value) { this.code = code; this.value = value; } private String value; private int code; public String getValue() { return value; } public void setValue(String value) { this.value = value; } public int getCode() { return code; } public void setCode(int code) { this.code = code; } }
最後在規劃一下本身接下來的學習路線吧,仍是以java開發爲主,並關注一些node的發展情況。仍是要多作幾個SSM、SSH的項目,看看spring的源碼,而後是springboot,就先這樣吧。springboot