项目进度总结
之前一段时间回家后,忙于写一个电商的项目.现在总结一下自己收获的知识.
首先将一下项目好用的工具:
1.FE助手
2.restlet client这两个都是chrome插件,翻个墙下载一下,一劳永逸,一个有很多前端调试的小工具,一个是分类管理模拟接口请求.
效果谁用谁知道!接下来讲项目正文:
首先是通用类工具:
1.const类:
定义一些常量字符串等的工具类
2.通用请求响应类:
ResponseCodepackage com.mmall.common;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.map.annotate.JsonSerialize;
import java.io.Serializable;
/**
* Created by syk on 2018/4/1.
*/
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
//保证序列化json的时候,如果是null的对象,key也会消失
public class ServerResponse<T> implements Serializable{
private int status;
private String msg;
private T data;
private ServerResponse(int status) {
this.status = status;
}
private ServerResponse(int status, T data) {
this.status = status;
this.data = data;
}
private ServerResponse(int status, String msg, T data) {
this.status = status;
this.msg = msg;
this.data =data;
}
private ServerResponse(int status, String msg) {
this.status = status;
this.msg = msg;
}
@JsonIgnore
//使之不在json序列化结果当中
public boolean isSuccess() {
return this.status == ResponseCode.SUCCESS.getCode();
}
public int getStatus() {
return status;
}
public String getMsg() {
return msg;
}
public T getData() {
return data;
}
public static <T> ServerResponse<T> createBySuccess(){
return new ServerResponse<T>(ResponseCode.SUCCESS.getCode());
}
public static <T> ServerResponse<T> createBySuccessMessage(String msg){
return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(),msg);
}
public static <T> ServerResponse<T> createBySuccess(T data){
return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(),data);
}
public static <T> ServerResponse<T> createBySuccess(String msg,T data){
return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(),msg,data);
}
public static <T> ServerResponse<T> createByError(){
return new ServerResponse<T>(ResponseCode.ERROR.getCode(),ResponseCode.ERROR.getDesc());
}
public static <T> ServerResponse<T> createByErrorMessage(String errorMessage){
return new ServerResponse<T>(ResponseCode.ERROR.getCode(),errorMessage);
}
public static <T> ServerResponse<T> createByErrorCodeMessage(int errorCode,String errorMessage){
return new ServerResponse<T>(errorCode,errorMessage);
}
}
一个是枚举定义常用返回code,(枚举这个写法之前少用,这里需要稍微记一下)
一个是返回的响应类,即我们提交给前端的vo(vo这个概念是pojo(数据库对象)->bo(business obj业务数据对象)->vo(view obj页面展示对象)
这里需要提及的一句是:
这行代码一般还是加上的比较好,可以让null的键去掉
isSuccess这个值是用于java业务判断成功,挺实用的一个判断,但是不需要返回到前端,所以我们这里要把它忽略掉.
public class TokenCache {
private static Logger logger = LoggerFactory.getLogger(TokenCache.class);
public static final String TOKEN_PREFIX = "token_";
//LRU算法
private static LoadingCache<String,String> localCache = CacheBuilder.newBuilder().initialCapacity(1000).maximumSize(10000).expireAfterAccess(12, TimeUnit.HOURS)
.build(new CacheLoader<String, String>() {
//默认的数据加载实现,当调用get取值的时候,如果key没有对应的值,就调用这个方法进行加载.
@Override
public String load(String s) throws Exception {
return "null";
}
});
public static void setKey(String key,String value){
localCache.put(key,value);
}
public static String getKey(String key){
String value = null;
try {
value = localCache.get(key);
if("null".equals(value)){
return null;
}
return value;
}catch (Exception e){
logger.error("localCache get error",e);
}
return null;
}
}
tokenCache,我项目中使用的是guawa缓存,这里后续可以改成redis
通用类后续还会加上propertiesutil(用于读取properties文件的工具类等),还有一些常用的工具类会用三方的工具,比如下面等
很有用的isblank方法,与isempty稍微不同, equals方法免去原生的isequal需要第一个值不为空,还有很多很多好用的工具,这里不一一列举
2.mybatis三剑客
三剑客指
1.mybatis-generator:逆向工程工具
2.mybatis-plugin:自动查找mapper对象对象的xml文件的方法
3.mybatis-pagehelper:自动分页工具
我估计很多人只知道1和3,逆向工程和分页我这里不细说,很多教程有,plugin这个直接在idea插件中安装即可,很好用,强烈安利
自动跳转到xml中
3.业务需求
这个项目主要是为了沉淀我的java知识,毕竟一直只写一些小demo的话,不好沉淀sql,业务等熟练度.
这里讲下我以前忽略的点:
1.参数设置:
在controller,springmvc需要配置参数的时候用的@RequestParam
在mapper中则是使用的是:@Param
2.逻辑严整性:
这个是在业务当中不断的增长的,比如说权限判断等,最好使用排除递进的逻辑
后面过两天再增加点内容