「小程序JAVA實戰」小程序登錄與後端聯調(36)

重新溫習下用戶的註冊的方式,開發一個用戶登錄的spring boot接口。源碼:https://github.com/limingios/wxProgram.git 中的wx-springboot 和 No.15

service 類的開發

  • UserService.java

package com.idig8.service;

import com.idig8.pojo.Users;

public interface UserService {

    /**
     * 判斷用戶名是否存在
     * @param username
     * @return
     */
    public boolean queryUsernameIsExist(String username);

    /**
     * 保存用戶
     * @param user
     * @return
     */
    public void saveUser(Users user);

    /**
     * 查詢用戶對象
     * @param username
     * @return
     */
    public Users queryUserIsExist(Users user);


}

···

* UserServiceImpl.java
> Sid 是注入的id的生成工具,Example queryExample = new Example(Users.class);
和 Criteria criteria = queryExample.createCriteria(); 都是一種套路,就是查詢套路,大家可以看看
https://baike.baidu.com/item/criteria/5354117

··· java
package com.idig8.service;

import org.n3r.idworker.Sid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.security.SecurityProperties.User;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.idig8.mapper.UsersMapper;
import com.idig8.pojo.Users;
import com.idig8.utils.MD5Utils;

import tk.mybatis.mapper.entity.Example;
import tk.mybatis.mapper.entity.Example.Criteria;

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UsersMapper usersMapper;

    @Autowired
    private Sid sid;

    @Transactional(propagation =Propagation.SUPPORTS)
    @Override
    public boolean queryUsernameIsExist(String username) {
        Users user = new Users();
        user.setUsername(username);
        Users result = usersMapper.selectOne(user);
        return result==null? false:true;
    }

    @Transactional(propagation =Propagation.REQUIRED)
    @Override
    public void saveUser(Users user) {
        String userId =sid.nextShort();
        user.setId(userId);
        usersMapper.insert(user);
    }

    @Transactional(propagation =Propagation.SUPPORTS)
    @Override
    public Users queryUserIsExist(Users user) {
        Example queryExample = new Example(Users.class);
        Criteria criteria = queryExample.createCriteria();
        criteria.andEqualTo("username",user.getUsername());
        try {
            criteria.andEqualTo("password",MD5Utils.getMD5Str(user.getPassword()));
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Users userOne =  usersMapper.selectOneByExample(queryExample);
        return userOne;
    }

}

controller 類的開發

RegistLoginController.java

增加了登錄方法。


package com.idig8.controller; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import com.idig8.pojo.Users; import com.idig8.service.UserService; import com.idig8.utils.JSONResult; import com.idig8.utils.MD5Utils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @RestController @Api(value="用戶註冊登錄的接口",tags={"註冊和登錄的controller"}) public class RegistLoginController {    @Autowired    private UserService userService;    @ApiOperation(value="用戶註冊",notes="用戶註冊的接口")    @PostMapping("/regist")    public JSONResult regist(@RequestBody Users user) {        //1.判斷用戶名和密碼不能爲空        if(StringUtils.isBlank(user.getUsername())||StringUtils.isBlank(user.getPassword())) {            return JSONResult.errorMsg("用戶名或密碼不能爲空");        }        //2.判斷用戶名是否存在        boolean usernameIsExist = userService.queryUsernameIsExist(user.getUsername());        if(!usernameIsExist) {            user.setNickname(user.getUsername());            try {                user.setPassword(MD5Utils.getMD5Str(user.getPassword()));            } catch (Exception e) {                return JSONResult.errorMsg(e.getMessage());            }            user.setFollowCounts(0);            user.setReceiveLikeCounts(0);            user.setFansCounts(0);            userService.saveUser(user);        }else {            return JSONResult.errorMsg("用戶名或已經存在,請更換在試試!");        }        //防止密碼返回被獲取到        user.setPassword("");        return JSONResult.ok(user);    }    @ApiOperation(value="用戶登錄",notes="用戶登錄的接口")    @PostMapping("/login")    public JSONResult login(@RequestBody Users user) {        //1.判斷用戶名和密碼不能爲空        if(StringUtils.isBlank(user.getUsername())||StringUtils.isBlank(user.getPassword())) {            return JSONResult.errorMsg("用戶名或密碼不能爲空");        }        //2.判斷用戶名是否存在        Users userObject = userService.queryUserIsExist(user);        if(userObject==null){            return JSONResult.errorMsg("用戶名或密碼不存在!");        }        //防止密碼返回被獲取到        user.setPassword("");        return JSONResult.ok(userObject);    } }

wx前端部分的開發

<view>
    <view class="login-icon">
        <image class="login-img" src="../../resource/images/dsp.jpg"></image>
    </view>
    <view class="login-from">
        <form bindsubmit='doLogin'>
            <!--賬號-->
            <view class="inputView">
                <image class="nameImage" src="../../resource/images/username.png"></image>
                <label class="loginLabel">賬號</label>
                <input name="username" type="text"  maxlength="10" class="inputText" placeholder="請輸入賬號"/>
            </view>

            <view class="line"></view>

            <!--密碼-->
            <view class="inputView">
                <image class="keyImage" src="../../resource/images/password.png"></image>
                <label class="loginLabel">密碼</label>
                <input name="password" maxlength="10" type="text" class="inputText" password="{{true}}" placeholder="請輸入密碼"/>
            </view>

            <!--按鈕-->
            <view>
                <button class="loginBtn" type="primary" form-type='submit'>登陸</button>
            </view>

            <view>
                <button class="goLoginBtn" type="warn" bindtap="goRegisterPage">返回註冊</button>
            </view>
        </form>
    </view>
</view>
const app = getApp()

Page({
  data: {

  },

  doLogin: function (e) {
    var formObject = e.detail.value;
    var username = formObject.username;
    var password = formObject.password;

    // 簡單驗證
    if (username.length == 0 || password.length == 0) {
      wx.showToast({
        title: '用戶名或密碼不能爲空',
        icon: 'none',
        duration: 3000
      })
    } else {
      wx.request({
        url: app.serverUrl + "/login",
        method: "POST",
        data: {
          username: username,
          password: password
        },
        header: {
          'content-type': 'application/json' // 默認值
        },
        success: function (res) {
          console.log(res.data);
          var status = res.data.status;
          if (status == 200) {
            wx.showToast({
              title: "用戶登陸成功~!",
              icon: 'none',
              duration: 3000
            })
            app.userinfo = res.data.data;
          } else if (status == 500) {
            wx.showToast({
              title: res.data.msg,
              icon: 'none',
              duration: 3000
            })
          }
        }
      })
    }
  },
  goLoginPage: function (e) {
    console.log("跳轉到註冊");
  }
})

PS:測試成功了,其實登錄和註冊頁面基本一樣的,就是改了個標題,請求的request地址發生了改變,唯一區別比較大的是,https://baike.baidu.com/item/criteria/5354117 這是spring boot常用的。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章