1.项目环境
IDEA15 spring4 mybatis3.4 mysql RestLet Client用于发送请求测试
2.项目介绍
这是一个商城项目,本来想起名叫SSM项目,发现自己并没有用springmvc。
前端还在做,使用nodejs。也是自己第一篇博客,记录一下自己的学习过程,希望一方面能多做写项目锻炼能力,另一方面也让自己在做完之后写写博客自己总结反思。
3.功能模块
- 用户模块
- 管理员模块(用户管理和订单管理)
- 商品模块
- 购物车模块
- 订单管理模块
4.部分代码记录
- 规范化返回值
规范化了Controller的返回值,便于前端的使用,定义了统一的json序列化返回值ServiceResponse类
这样在controller中的返回值就可以这样写
这样,通过前端后端共同约定好一个json格式,可以大大加快开发的速度。
- 通用工具类封装
我们在开发过程中经常会遇到配置问价文件的读取,时间类型字符和字符串之间的转换,在商业项目中金额的计算的处理等等。尤其是在计算金额的时候发生精度丢失的问题,例如
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,然后再输出。
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和Vo
Po:Persistent Object 持久化对象,可以理解为与数据库字段一一对应的对象
Vo:Value Object 值对象,用于在业务之间传递的对象,例如在用户创建订单的时候,创建一个OrderVo对象,将订单信息,购物车信息,收货地址信息,用户信息封装在一起会更方便。如果直接使用Order PO, Cart Po,User Po这些持久对象,在封装json传递给前端会造成很多麻烦。
- 封装常量
将常量封装起来使用会使整个项目看起来更整洁,提高复用性
对于普通常量:
public static final String EMAIL = "email";
对于一个对象的多个状态:
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,就先这样吧。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。