发表于: 2018-01-11 23:29:31
2 416
今天做的事情:
学生证模块的手机号邮箱验证。
使用之前在任务七做的工具类,拿过来就可以用。这里不贴代码了。都是SDK的东西。
发送手机短信之后成功信息
log信息:
邮件发送成功。
成功。邮箱和手机号,是测试成功才显示出来的。
邮箱测试成功。
关于文章表的点赞数量,收藏数量,和点赞状态,收藏状态。特意查了下。
是不是可以这样,当用户点击之后,前端做操作,点赞数量会显示增加1,攒够指定数量,会执行脚本修改,或者按上面说的,按小时来。
再来说一下注册思路。
if (null == id || null == address || null == type) {
model.addAttribute("code", -200000);
return "data/json";
}
User user = userService.getObjectById(id);
//防空指针
if (user.getVerificationTimes() == null) {
user.setVerificationTimes(0L);
}
//生成随机的4位验证码
String validateCode = ValidateCodeUtil.getRandomString(4);
//发送模块
if (type == 1) {
try {
//验证限流
if (user.getVerificationTimes() > 3) {
model.addAttribute("code", 1003);
return "/data/json";
}
//保证手机号码不重复
Map<String, Object> param = DynamicUtil.getUserByMobile(address,id);
List<Long> userNumber = userService.getIdsByDynamicCondition(User.class, param, 0, 4);
if (0 != userNumber.size()) {
model.addAttribute("code", 1002);
return "/data/json";
}
//String phone = "13083899038";
sms.sendMessage(address, validateCode);
user.setVerificationTimes(user.getVerificationTimes() + 1);
user.setVerificationCode(validateCode);
userService.update(user);
} catch (Throwable e) {
e.printStackTrace();
model.addAttribute("code", 1004);
}
} else if (type == 2) {
try {
//保证邮箱地址不重复
Map<String, Object> param = DynamicUtil.getUserByMail(address);
List<Long> userNumber = userService.getIdsByDynamicCondition(User.class, param, 0, 4);
if (0 != userNumber.size()) {
model.addAttribute("code", 1002);
return "/data/json";
}
SendEmail.ceshi(address, validateCode);
user.setVerificationCode(validateCode);
userService.update(user);
} catch (Throwable e) {
e.printStackTrace();
model.addAttribute("code", 1004);
}
}
model.addAttribute("code", 0);
首先发送手机号短信或者邮箱,做一个接口就足够用,加一个参数来区别是手机号还是邮箱,int type, 还有 手机或邮箱 就 address表示, 用户id.
先判断不为空,生成4位数的随机验证码, 再使用工具类,map拼接条件去查询 这个id有没有这个手机号。没有的话,发送信息。
有工具类,做起来还好,如果没有的话,确实会费周折。。
晚上听明达小课堂,mybatis的逻辑查询和物理查询,自己搜搜了解下。
1首先mybatis自带的分页功能是逻辑分页,但如果数据量超大会造成内存溢出。
dao层代码:
- public List<WorkflowRecord> queryByMybatis(int startRow, int endRow) {
- RowBounds rowBounds = new RowBounds(startRow,endRow);
- System.out.println("rowBounds Offset:"+rowBounds.getOffset());
- System.out.println("rowBounds Limit:"+rowBounds.getLimit());
- WorkflowRecord workflowRecord=new WorkflowRecord();
- return sqlSessionTemplate.selectList(QUERY_BY_MYBYTAIS,workflowRecord,rowBounds);
- }
而sql语句就是 一条 select * from t_table
offset:从第n条开始取;limit:取多少条
2 物理分页:
- @Override
- public List<WorkflowRecord> queryBySql(int startRow, int endRow) {
- Map<String, Object> params =new HashMap<String, Object>();
- params.put("startRow", new Integer(startRow));
- params.put("endRow", new Integer(endRow));
- return sqlSessionTemplate.selectList(QUERY_BY_SQL, params);
- }
sql语句
- <select id="queryBySql" resultMap="proRecResult">
- select *
- from (SELECT ROWNUM r, t1.*
- from (
- select * from T_PROREC ) t1
- <![CDATA[
- where rownum <= #{endRow})
- where r >= #{startRow}
- ]]>
- </select>
分页的分类:
1.物理分页:只从数据库中查询当前页的数据
优点:不占用很多内存 缺点:效率比价低(相比于逻辑分页)
2.逻辑分页:从数据库将所有记录查询出来,存储到内存中,展示当前页,然后数据再直接从内存中获取
优点:效率高 缺点:占用内存比较高
遇到的问题:
无
收获:
完成学生证模块
禅道:http://task.ptteng.com/zentao/project-task-514-byModule-59.html
评论