1.如何使用分页,对象数据库查询出的对象 中间如何转换成 respVO 对象,
2.使用分页查询 ,好像什么操作都没做,没有显式的去做分页传参就可以查询,这完全得益于 pageHelper 插件。
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.1</version>
</dependency>
查询时增加这一行话就行 PageHelper.startPage(pojo.getPageNum(), pojo.getPageSize());
分页的VO 类可以增加一些 必要的验证信息
@NotNull(message = "pageNum不能为空")
@Min(message = "pageNum最小值为1",value=1)
private Integer pageNum;
@NotNull(message = "pageSize不能为空")
private Integer pageSize;
具体如下:
public PageInfo<MessageBatchSend> getMessageList(MessageBatchSendPojo pojo) {
PageHelper.startPage(pojo.getPageNum(), pojo.getPageSize());
MessageBatchSendExample example = new MessageBatchSendExample();
Criteria c = example.createCriteria();
if (pojo.getStartDate() != null && !"".equals(pojo.getStartDate())) {
c.andCreateTimeGreaterThanOrEqualTo(pojo.getStartDate());
}
if (pojo.getEndDate() != null && !"".equals(pojo.getEndDate())) {
c.andCreateTimeLessThanOrEqualTo(pojo.getEndDate());
}
if (StringUtils.isNotEmpty(pojo.getMsgContent())) {
c.andMsgContentLike("%"+pojo.getMsgContent().trim()+"%");
}
example.setOrderByClause("create_time desc");
Page<MessageBatchSend> page = (Page) messageBatchSendMapper.selectByExample(example);
return page.toPageInfo();
}
接着返回对象转换取出数据,第一层 pagehelper 参数可以直接copy,接着遍历 集合,集合获取只需要 page.getList() 方式即可,这个是pagehelper jar 包中 pageInfo 类里面的方法
PageInfo<MessageBatchSend> page = smsDBService.getMessageList(pojo);
PageInfo<MessageBatchSendResp> result = new PageInfo<>();
BeanUtils.copyProperties(page, result);
List<MessageBatchSendResp> data = null;
if (!page.getList().isEmpty()) {
data = new ArrayList<>();
for (MessageBatchSend obj : page.getList()) {}
3.如何给项目加上eureka,本地项目支持了eureka 启动了之后 是如何 可以本地不启动eureka 也可以进行本地测试的(二者可以随意切换)
4.如何写一个调用其他eureka 服务的配置,目前短信系统使用的是 MyRestTemplate 调用方式,但是由于GSON 对很多参数不支持所以注释掉了部分代码,但是却不影响调用
5.使用eureka 调用其他服务时 需要如何把 其他服务接进来的,一共有哪些配置,特别是服务名,在yml配置文件加了之后是如何获取的
6.GSON 对时间不支持是怎么去解决的是不是只是价格注解 再将时间多加8小时就可以了
7.mybatis 生成配置文件为什么有很大差别,有的只是生成一些简单的文件,而且方便修改和自己写sql,但是短信里面生成的文件相当复杂,但是好在加分页时改动量却很少,这点不错,
需要特别注意的一点是 按照短信里面的方式 改如何自己写sql 和 如何自己写表关联查询,或者说是自己将短信里面的内容改掉,改成生成简单文件的方式
8.有些日志文件的的生成路径是在yml 文件里面配置的 还有一些是在只在 logback.xml 里面,另外在代码提交记录里面 还有一个健康心跳检测 是啥玩意
9.一个项目如果要更改服务名大概是如何更改的
10.一个方法是如何设置传参 ,如何设置去掉json 格式的,天瑞短信对接,回调一开始一直不通 后来是怎么解决的
11.我们每次调用别人接口 有2件事必须做:1.必须在调用的地方加上try catch 以便区分问题是出在什么地方,并且在catch 异常的代码块 使用 response 基类进行信息返回,这样在调用方或者在
cms 前端可以直接定位是谁的系统报的错,2.另外一个问题就是在没有报错的情况下一定要在返回的对象中取出基类的code 和 msg 进行 返回判断 以防返回的数据 不可用导致我们解析报错,如果
系统返回code 是非成功的一定要及时抛出异常
12.自己本地写的系统每一个方法的第一行都要打印日志 以便于排查方法是否已经成功调到 并将入参打印出来,切记 必输!
13.如何加上cat日志跟踪系统,且加上参数
14. 我们在写mybatis 查询条件时 一定要写成 Criteria c = example.createCriteria(); 然后c.。。。。 什么 这样才能将每个参数都加上,直接写 example.createCriteria().. 什么什么
最终将只有一个参数拼上出现查询不符合预期的问题,而且对于模糊查询一定要主动加上两个百分号 %%,不然就模糊查询的意义就变了,如:c.andMsgContentLike("%"+pojo.getMsgContent().trim()+"%");
15.计算的小数是可以直接格式化的DecimalFormat df = new DecimalFormat("0.00");//格式化小数 或者是 0.00%
16.我们在使用计数的时候 可以重复的值或对象 可以直接 使用int count 计数器,但是 如果显示的要求不可以重复 我们这个时候可以舒勇 set 来进行存放 最终的值是不重复的,切可以计算出数据的总条数,比如我们发短信 ,操作人员的手机号可能是重复的 ,这个时候我们需要计算最终发了几条短信 且不能重复发在同一个手机上
17. 如果我们需要从一个特殊的字符开始截取字符串 可以使用index.of 来进行找出 它的位置
18. 其实乱码的解决方式有很多种,但是会有时候我们不清楚 到底哪种解决方式有效,这个时候我们可以把所有的方式一起 用日志打印出来,看下环境日志哪种方式是可以用的这种方式将会增加效率
19.如何获取 yml 配置文件的配置内容?,如下:
@Autowired
private ExtProperties ext;
@Override
protected String getServiceName() {
return ext.getServiceName().getVip();
}
ExtProperties类需要加一个属性(private ServiceName serviceName;),set/get 方法
public ServiceName getServiceName() {
return serviceName;
}
public void setServiceName(ServiceName serviceName) {
this.serviceName = serviceName;
}
这是一个内部类:
public static class ServiceName{
public String getVip() {
return vip;
}
public void setVip(String vip) {
this.vip = vip;
}
private String vip;
}
20.短信中增加文件导入的时候,前端的方法一直都调不通我们的接口导致 这个问题拖了很长时间,本以为会不会是我们这里的问题,但是这个问题最终还是解决了
问题原因是 前端将表单提交分成了两次,而我们是一直行接受参数,最终h5 开发人员没有搞定,最后H5的开发组长解决的了难题,证明我们是可以这样写的,下次遇到这种问题 我们必须直接找他们组长不能一拖再拖,2个小时候搞不定 就要找负责人解决了。
21.将区分手机运营商的util 类copy 出来
22.正常我们写自己的serviceException 需要写一个baseException 然后继承 RuntimeException
23.根据kk 的代码提交记录查看,自己新增sql 修改sql 在短信中生成的复杂文件来判断 ,自己自定义sql 只需要 写一个 抽象方法再写一个sql 就行 如下:
@Update({
"update message_batch_send set success_no =success_no+1 where batch_id = #{batchId,jdbcType=VARCHAR}"
})
int updateSuccessBybatchId(String batchId);
@Update({
"update message_batch_send set fail_no =fail_no+1 where batch_id = #{batchId,jdbcType=VARCHAR}"
})
24.引入Excel 解析需要 加上两个依赖:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
25.时间转换和存储,这个涉及到 新增时间变量速度是否简单,存库是否方便,数据库显示是否可以直接查看,取出时间并返回客户端是否需要特殊处理,如果需要处理转换是否方便
create_time datetime 长度0 存时间只需要bean.setCreateTime(new Date()); 一步操作·
取出时间为:DateUtil.yyyyMMddHHmmss(obj.getCreateTime())
26.集合判断是否为空 ,建议还是使用 CollectionUtils 来进行判断
27.加上lombok 配置可以简化代码
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>