赞
踩
该系列博客主要记录笔者的开发过程,参考B站系列视频:【SpringBoot项目实战完整版】SpringBoot+MyBatis+MySQL电脑商城项目实战_哔哩哔哩_bilibili
所用的一些版本信息:
IDEA开发、JDK1.8版本以上、maven3.61版本以上,springboot,DataGrip管理数据库
收获地址的展示、设置与删除:
1.数据库查询 select
按照默认与创建时间排序
2.设置地址为默认
检测当前用户选中的地址数据是否存在(select)
先将所有的收获地址设置为非默认(update)
再将当前地址设置为默认(update)
3.删除一条数据 delete
(1)如果用户删除的是默认的收获地址,需要将剩下的最新修改的收获地址设置为收获地址。
select 查询最新修改的收获地址。
(2)如果用户只有一条地址,就不需要上述过程。
store\src\main\java\com\cy\store\mapper\AddressMapper.java
- /**
- * 根据用户id查询用户收获地址数据
- * @param uid 用户id
- * @return 收获地址列表
- */
- List<Address> findByUid(Integer uid);
-
- /**
- * 根据aid查询用户收获地址数据
- * @param aid
- * @return
- */
- Address findByAid(Integer aid);
-
- /**
- * 根据用户id设置所有的地址为非默认
- * @param uid
- * @return 影响行数
- */
- Integer updateNonDefault(Integer uid);
-
- /**
- * 根据aid设置当前地址为默认地址
- * @param aid
- * @return 影响行数
- */
- Integer updateDefalultByAid(Integer aid, String modifiedUser, Date modifiedTime);
-
- /**
- * 根据aid删除地址数据
- * @param aid
- * @return 影响行数
- */
- Integer deleteByAid(Integer aid);
-
- /**
- * 根据用户uid查询当前用户最后一次被修改的收获地址数据
- * @param uid
- * @return
- */
- Address findLastModified(Integer uid);

store\src\main\resources\mapper\AddressMapper.xml
- <select id="findByUid" resultMap="AddressEntityMap">
- SELECT * FROM t_address WHERE uid = #{uid}
- ORDER BY is_default DESC, created_time DESC
- </select>
-
- <select id="findByAid" resultMap="AddressEntityMap">
- SELECT * FROM t_address WHERE aid = #{aid}
- </select>
-
- <update id="updateNonDefault">
- update t_address SET is_default=0 WHERE uid = #{uid}
- </update>
-
- <update id="updateDefalultByAid">
- update t_address
- SET is_default=1, modified_user = #{modifiedUser}, modified_time = #{modifiedTime}
- WHERE aid = #{aid}
- </update>
-
- <delete id="deleteByAid">
- DELETE FROM t_address WHERE aid =#{aid}
- </delete>
-
- <select id="findLastModified" resultMap="AddressEntityMap">
- SELECT * FROM t_address
- WHERE uid=#{uid}
- ORDER BY modified_time DESC LIMIT 0,1
- </select>

store\src\test\java\com\cy\store\mapper\AddressMapperTests.java
- @Test
- public void FindeByUid(){
- System.out.println(addressMapper.findByUid(29));
- }
-
- @Test
- public void findByAid(){
- System.out.println(addressMapper.findByAid(1));
- }
-
- @Test
- public void updateNonDefault(){
- addressMapper.updateNonDefault(29);
- }
-
- @Test
- public void updateDefalultByAid(){
- addressMapper.updateDefalultByAid(10,"管理员", new Date());
- }
-
- @Test
- public void deleteByAid(){
- addressMapper.deleteByAid(5);
- }
-
- @Test
- public void findLastModified(){
- System.out.println(addressMapper.findLastModified(29));
- }

1.更新时 UpdateException
2.访问数据不是当前登录用户的数据,非法访问:AccessDeniedException
3.收获地址可能不存在,AddressNotFoundException
4.执行删除时,产生未知的删除异常,DeleteException
store\src\main\java\com\cy\store\service\ex下创建异常,代码略
store\src\main\java\com\cy\store\service\IAddressService.java
- /**
- * 根据UID查询地址
- * @param uid
- * @return
- */
- List<Address> getByUid(Integer uid);
-
- /**
- * 修改某一条地址数据为默认值
- * @param uid
- * @param aid
- * @param username
- */
- void setDefault(Integer uid, Integer aid, String username);
-
- /**
- * 删除地址数据
- * @param aid
- * @param uid
- * @param username
- */
- void delete(Integer aid, Integer uid, String username);

store\src\main\java\com\cy\store\service\impl\AddressServiceImpl.java
- @Override
- public List<Address> getByUid(Integer uid) {
- List<Address> list = addressMapper.findByUid(uid);
- for(Address address:list){
- address.setUid(null);
- address.setProvinceCode(null);
- address.setCityCode(null);
- address.setAreaCode(null);
- address.setCreatedUser(null);
- address.setCreatedTime(null);
- address.setModifiedUser(null);
- address.setModifiedTime(null);
- }
- return addressMapper.findByUid(uid);
- }
-
- @Override
- public void setDefault(Integer uid, Integer aid, String username) {
- Address result = addressMapper.findByAid(aid);
- if(result==null){
- throw new AddressNotFountException("收获地址不存在");
- }
- //当前的地址数据是否归属与当前用户
- if(!result.getUid().equals(uid)){
- throw new AccessDeniedException("非法访问数据");
- }
- //更新操作
- Integer rows = addressMapper.updateNonDefault(uid);
- if(rows<1){
- throw new UpdateException("更新时产生位置异常");
- }
- rows = addressMapper.updateDefalultByAid(aid, username, new Date());
- if(rows!=1){
- throw new UpdateException("更新时产生位置异常");
- }
- }
-
- @Override
- public void delete(Integer aid, Integer uid, String username) {
- Address result = addressMapper.findByAid(aid);
- if(result==null){
- throw new AddressNotFountException("收获地址不存在");
- }
- //当前的地址数据是否归属与当前用户
- if(!result.getUid().equals(uid)){
- throw new AccessDeniedException("非法访问数据");
- }
- Integer rows = addressMapper.deleteByAid(aid);
- if(rows!=1){
- throw new UpdateException("删除时产生位置异常");
- }
- Integer cnt = addressMapper.countByUid(uid);
- if(cnt == 0){
- return;
- }
- if(result.getIsDefault()==1){ //将最新的地址数据修改为默认
- Address address = addressMapper.findLastModified(uid);
- rows = addressMapper.updateDefalultByAid(address.getAid(),username,new Date());
- }
- if(rows!=1){
- throw new UpdateException("更新时产生位置异常");
- }
- }

store\src\test\java\com\cy\store\service\AddressServiceImplTests.java
- @Test
- public void findByUid(){
- List<Address> list = addressService.getByUid(29);
- for(Address add:list){
- System.out.println(add);
- }
- }
-
- @Test
- public void setDefault(){
- try {
- addressService.setDefault(29,10,"小明");
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- @Test
- public void delete(){
- addressService.delete(9,29,"tt");
- }

在store\src\main\java\com\cy\store\controller\BaseController.java中统一处理异常
查询地址:
- URL:/addresses
- 请求参数:HttpSession session
- 请求方式:GET
- 返回值:JsonResult<List<Address>>
修改地址的默认值(使用restful风格提交数据):
- URL:/addresses/{aid}/set_default
- 请求参数:@PathVariable("aid")Integer aid, HttpSession session
- 请求方式:GET
- 返回值:JsonResult<Void>
删除地址:
- URL:/addresses/{aid}/delete
- 请求参数:@PathVariable("aid")Integer aid, HttpSession session
- 请求方式:POST
- 返回值:JsonResult<Void>
在store\src\main\java\com\cy\store\controller\AddressController.java中添加如下接口
- @RequestMapping({"","/"})
- public JsonResult<List<Address>> getByUid(HttpSession session){
- Integer uid = getuidFromSession(session);
- List<Address> data= addressService.getByUid(uid);
- return new JsonResult<>(OK,data);
- }
-
- //Restful风格进行请求
- @RequestMapping("{aid}/set_default")
- public JsonResult<Void> setDefault(@PathVariable("aid")Integer aid, HttpSession session){
- addressService.setDefault(getuidFromSession(session),
- aid, getusernameFromSession(session));
- return new JsonResult<>(OK);
- }
-
- @RequestMapping("{aid}/delete")
- public JsonResult<Void> delete(@PathVariable("aid")Integer aid, HttpSession session){
- addressService.delete(aid,
- getuidFromSession(session),
- getusernameFromSession(session));
- return new JsonResult<>(OK);
- }

使用对应的接口在浏览器中进行测试.
在store\src\main\resources\static\web\address.html中添加如下代码:
- <script type="text/javascript">
- $(document).ready(function () {
- showAddressList();
- });
-
- function showAddressList() {
- $("#address-list").empty();
- $.ajax({
- url: "/addresses",
- type: "GET",
- dataType: "JSON",
- success: function (json) {
- let list = json.data;
- for (let i = 0; i < list.length; i++) {
- console.log(list[i].name);
- let address = '<tr>'
- + '<td>#{tag}</td>'
- + '<td>#{name}</td>'
- + '<td>#{province}#{city}#{area}#{address}</td>'
- + '<td>#{phone}</td>'
- + '<td><a class="btn btn-xs btn-info"><span class="fa fa-edit"></span> 修改</a></td>'
- + '<td><a onclick="deleteByAid(#{aid})" class="btn btn-xs add-del btn-info"><span class="fa fa-trash-o"></span> 删除</a></td>'
- + '<td><a onclick="setDefault(#{aid})" class="btn btn-xs add-def btn-default">设为默认</a></td>'
- + '</tr>';
-
- address = address.replace(/#{aid}/g, list[i].aid);
- address = address.replace(/#{tag}/g, list[i].tag);
- address = address.replace("#{name}", list[i].name);
- address = address.replace("#{province}", list[i].provinceName);
- address = address.replace("#{city}", list[i].cityName);
- address = address.replace("#{area}", list[i].areaName);
- address = address.replace("#{address}", list[i].address);
- address = address.replace("#{phone}", list[i].phone);
-
- $("#address-list").append(address);
- }
- $(".add-def:eq(0)").hide();
- }
- });
- }
-
- function setDefault(aid) {
- $.ajax({
- url: "/addresses/" + aid + "/set_default",
- type: "POST",
- dataType: "JSON",
- success: function(json) {
- if (json.state == 200) {
- showAddressList();
- } else {
- alert("设置默认收货地址失败!" + json.message);
- }
- },
- error: function(json) {
- alert("您的登录信息已经过期,请重新登录!HTTP响应码:" + json.status);
- location.href = "login.html";
- }
- });
- }
-
- function deleteByAid(aid) {
- $.ajax({
- url: "/addresses/" + aid + "/delete",
- type: "POST",
- dataType: "JSON",
- success: function(json) {
- if (json.state == 200) {
- showAddressList();
- } else {
- alert("删除收货地址失败!" + json.message);
- }
- },
- error: function(xhr) {
- alert("您的登录信息已经过期,请重新登录!HTTP响应码:" + xhr.status);
- location.href = "login.html";
- }
- });
- }
- </script>

测试前端功能
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。