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