Java学习Day51:紫云山金丹培育基地(移动端开发之多表联查,发送短信验证码)
移动端开发主要有三种方式:
1、基于手机API开发(原生APP)
2、基于手机浏览器开发(移动web)
3、混合开发(混合APP)
1.发送短信验证码
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>1.0.0</version>
</dependency>
在health_common工程中导入如下通用组件
1.ValidateCodeUtils工具类:用来生成随机验证码
2.SMSUtils工具类:用来发送验证码
3.RedisMessageConstant常量类:
package com.easthome.constant;
public class RedisMessageConstant {
public static final String SENDTYPE_ORDER = "001";//用于缓存体检预约时发送的验证码
public static final String SENDTYPE_LOGIN = "002";//用于缓存手机号快速登录时发送的验证码
public static final String SENDTYPE_GETPWD = "003";//用于缓存找回密码时发送的验证码
}
2.多表联查
多表联查还是基于前端数据结构,前端如下:
<!-- 页面内容 -->
<div class="contentBox">
<div class="card">
<!--套餐详情-->
<div class="project-img">
<img :src="imgUrl" width="100%" height="100%" />
</div>
<div class="project-text"><!--套餐名字-->
<h4 class="tit">{{setmeal.name}}</h4>
<!--套餐备注-->
<p class="subtit">{{setmeal.remark}}</p>
<p class="keywords">
<!--套餐性别和年龄-->
<span>{{setmeal.sex == '0' ? '性别不限' : setmeal.sex == '1' ? '男':'女'}}</span>
<span>{{setmeal.age}}</span>
</p>
</div>
<!--<div class="project-know">
<a href="orderNotice.html" class="link-page">
<i class="icon-ask-circle"><span class="path1"></span><span class="path2"></span></i>
<span class="word">预约须知</span>
<span class="arrow"><i class="icon-rit-arrow"></i></span>
</a>
</div>-->
</div>
<div class="table-listbox">
<div class="box-title">
<i class="icon-zhen"><span class="path1"></span><span class="path2"></span></i>
<span>套餐详情</span>
</div>
<div class="box-table">
<div class="table-title">
<div class="tit-item flex2">项目名称</div>
<div class="tit-item flex3">项目内容</div>
<div class="tit-item flex3">项目解读</div>
</div>
<div class="table-content">
<ul class="table-list">
<!--
套餐对应的检查组
遍历当前套餐对象中的检查组
-->
<li class="table-item" v-for="checkgroup in setmeal.checkGroups">
<div class="item flex2">{{checkgroup.name}}</div>
<div class="item flex3">
<!--套餐的检查组对应的检查项-->
<label v-for="checkitem in checkgroup.checkItems">
{{checkitem.name}}
</label>
</div>
<div class="item flex3"> {{checkgroup.remark}}</div>
</li>
</ul>
</div>
<div class="box-button">
<a @click="toOrderInfo()" class="order-btn">立即预约</a>
</div>
</div>
</div>
</div>
前端代码中,使用遍历获取数据,得到steMeal,setMeal中的checkGroup以及checkGroup中的checkItem,因为三者都是后端javaBean,所以可以在前两者中设置后者的List<JavaBean>,
再使用循环赋值,得到一条套餐数据对应多条查询组再对应多条查询项!
@Override
public SetMeal querySetMealById(Integer id) {
//先查询套餐
SetMeal setMeal = setMealMapper.querySetMealById(id);
//根据套餐的id,查询对应的检查组
List<CheckGroup> checkGroupList = checkGroupMapper.queryCheckGroupBySetMealId(id);
//检查组集合,存储到套餐对象中
setMeal.setCheckGroups(checkGroupList);
//循环遍历检查组的集合
for (CheckGroup checkGroup :checkGroupList) {
//checkGroup.getId();//获取检查组的ID
//查询检查组对应的检查项
List<CheckItem> checkItemList = checkItemMapper.queryCheckItemByCheckGroupId(checkGroup.getId());
//检查项集合,存储到检查组对象
checkGroup.setCheckItems(checkItemList);
}
return setMeal;
}