[实习记录]从底层到上层开发第一个接口(下篇)

达芬奇密码2018-08-13 10:01


6      值得记录的问题

6.1     Git的基本使用

总结用到的Git基本命令如下:

命令

说明

git clone [仓库地址]

克隆远程仓库到本地

git branch -a

查看所有分支

git checkout -b [本地分支] origin/[远程分支]

取远程分支放到本地新建分支上

git config --global user.name [名字]

git config --global user.email [邮箱]

全局配置用户信息

git branch --set-upstream [本地分支] origin/[远程分支]

本地分支与远程分支建立关联

git add

本地文件系统的修改记录到git

git commit -m [提交说明]

提交修改到本地仓库

git pull [远程主机名] [远程分支名]:[本地分支名]

将远程分支同步到本地并与本地分支合并

git push [远程主机名] [本地分支名]:[远程分支名]

本地分支提交到远程仓库

git stash

暂存当前正在进行的工作到栈中

git stash list

列出栈中内容

git stash pop

从栈中恢复工作,并与当前分支合并

 

Git的基本命令请参考http://www.ruanyifeng.com/blog/2014/06/git_remote.html

Git的规范流程如下,参考http://www.ruanyifeng.com/blog/2015/08/git-use-process.html

Git rebaseGit merge都是合并分支,其区别在于。

Git merge是将两个分支直接合并。

Git rebase会将把你的"mywork"分支里的每个提交(commit)取消掉,并且把它们临时 保存为补丁(patch)(这些补丁放到".git/rebase"目录中),然后把"mywork"分支更新 为最新的"origin"分支,最后把保存的这些补丁应用到"mywork"分支上。

GitSVN的区别参考http://blog.jobbole.com/31444/。主要有以下几点:

1.       GIT是分布式的,SVN不是。

2.       GIT把内容按元数据方式存储,而SVN是按文件。

3.       GIT分支和SVN的分支不同。

4.       GIT没有一个全局的版本号,而SVN有。

5.       GIT的内容完整性要优于SVN

6.2     Sql datetimetimestamp的区别

参考https://stackoverflow.com/questions/409286/should-i-use-field-datetime-or-timestamp

TIMESTAMP

l  4个字节储存(Time stamp value is stored in 4 bytes)TIMESTAMP值不能早于1970或晚于2037年。

l  值以UTC格式保存( it stores the number of milliseconds ,存储时对当前的时区进行转换,检索时再转换回当前的时区。

l  TIMESTAMP类型在默认情况下,insertupdate 数据时,TIMESTAMP列会自动以当前时间(CURRENT_TIMESTAMP)填充/更新。

datetime

l  8个字节储存(8 bytes storage),支持的范围为''1000-01-01 00:00:00''''9999-12-31 23:59:59''

l  实际格式储存(Just stores what you have stored and retrieves the same thing which you have stored.)

l  与时区无关(It has nothing to deal with the TIMEZONE and Conversion.)

6.3     异常的捕获与记录

基本思路是,在Service层定义异常,判断异常并往上层抛出;Manager层继续向上层抛出,Controller层捕获异常进行相应处理。

例如,根据省份code查询城市时,如果省份code不存在时,查出的城市列表为空列表。此时需要定义异常。

miscexception包中MiscErrorCode增加一条错误Code

Service层进行异常判断,抛出异常。

@Override
    public List<DTO> queryMetaByCode (Long code) throws MiscServiceException {
        if(code == null) throw new MiscServiceException("code
参数为空", MiscErrorCode.MISS_PARAM);
        List<Meta> metaList = cityDao. listByCode (code);
        if(metaList == null || metaList.isEmpty()) throw new MiscServiceException(("
查询结果为空"), MiscErrorCode.CITY_NOT_FOUND);
        return ConvertUtils.convertList(metaList, DTO.class);
    }
}

Manager层继续向上抛出异常。
try {
        return ResponseView.success(AreaConvertUtils.convertCityBOVO(manager. queryMetaByCode (code)));
    } catch (MiscServiceException e) {
        log.error(e.getErrorLog());
        return ResponseView.fail(e.getErrorCode(), e.getErrorMessage());
}

6.4     VO/BO转换方法

此处的解释不止适用于VO/BO,同样适用于其他Object之间的转换。

分为两种情况:

1.       VO只包含BO中部分同名属性。

例如VO中的属性为A,B,CBO中的属性为A,B,C,D。此时可以直接使用Spring提供的BeanUtils

BeanUtils.copyProperties(t, v);

即将t中的对应属性拷贝到v中,忽略t中存在而v中没有定义的属性。

2.       VO中的属性没有被BO中的属性完全覆盖。

例如VO中的属性为AA,BB,CCBO中的属性为A,B,C。名字不一样。

此时,你就需要手写转换类了。

VO convert(BO bo, VO vo) {
    vo.setProperties(bo.getProperties());
    return vo;
});

也可以写一个泛型类用于通用的类型转换:

public static <V, T> V convert(T t, V v, IConvert<T,V> convert) {
    BeanUtils.copyProperties(t, v);
    if (null == convert) {
        return v;
    }
    return convert.convert(t, v);
}

其中IConvert是一个接口,该接口定义如下:

public interface IConvert <T,V> {
    V convert(T t, V v);
}

调用convert方法时,可以实现自己的转换类。

例如:

public static VO convert(BO bo, VO vo) {
    return ConvertUtils.convert(bo, vo, new ConvertUtils.IConvert<BO, VO>() {
        @Override
        public VO convert(BO bo, VO vo) {
            vo.setProperties(bo.getProperties());
            return vo;
        }
    });
}

6.5     Java8 lambda表达式

上一节的转换类,可以使用java8 lambda表达式形式来写:

public static VO convert(BO bo, VO vo) {
    return ConvertUtils.convert(bo, vo, (bo, vo) -> {
        vo.setProerties(bo.getProerties());
        return vo;
    });
}

lambda表达式还有很多用法,比如用在ForEach循环中,有待积累。

6.6     Intellij快捷键

快捷键

作用

Ctrl+鼠标左键

溯源

Alt+Insert

自动生成

Alt+Enter

导入包,自动更正

Alt+/

自动补全(Eclipse风格,Intellij风格为Ctrl+空格)

Ctrl+Alt+左箭头

后退

Ctrl+Alt+右箭头

前进

Ctrl+Alt+H

查找引用树

Ctrl+Alt+O

格式化import列表

Ctrl+Alt+L

格式化代码



网易云新用户大礼包:https://www.163yun.com/gift

本文来自网易实践者社区,经作者葛志诚授权发布。