异步验证是否重名、用户名是否存在

验证是否重名、用户名是否存在

Posted by LY on November 1, 2018

在这里小小推荐下我的个人博客

csdn:雷园的csdn博客

个人博客:雷园的个人博客

简书:雷园的简书

异步验证是否重名、用户名是否存在

首先是数据库设计,在这里我只做简单的示例

1.sql语句如下:

CREATE TABLE `你的数据库名`.`user` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(45) NOT NULL,
  `password` VARCHAR(45) NOT NULL,
  `create_date` VARCHAR(45),
  PRIMARY KEY (`id`));

2.表结构如下图所示:

user表结构

然后就是编写我们的dao层代码

1.jdbc模式代码如下:
package test;
import java.sql.*;
// 注意在此处引入你的User类
public class UserDao {
    // JDBC 驱动名及数据库 URL
    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
    static final String DB_URL = "jdbc:mysql://localhost:3306/你的数据库名";
    // 数据库的用户名与密码,需要根据自己的设置
    static final String USER = "your_username";
    static final String PASS = "your_password";
    // 验证用户名是否存在
    public User verifyUser(String username){
        Connection conn = null;
        Statement stmt = null;
        User user = null;
        try{
            user = new User();
            // 注册 JDBC 驱动
            Class.forName("com.mysql.jdbc.Driver");
            // 打开链接
            conn = DriverManager.getConnection(DB_URL,USER,PASS);
            // 执行查询
            stmt = conn.createStatement();
            String sql;
            sql = "SELECT * FROM user where username = '"+ username +"'";
            ResultSet rs = stmt.executeQuery(sql);
            // 展开结果集数据库
            while(rs.next()){
                // 通过字段检索
                int id  = rs.getInt("id");
                String username1 = rs.getString("username");
                String password = rs.getString("password");
                String createDate = rs.getString("create_date");
                user.setId(id);
                user.setUsername(username1);
                user.setPassword(password);
                user.setCreateDate(createDate);
            }
            // 完成后关闭
            rs.close();
            stmt.close();
            conn.close();
        }catch(SQLException se){
            // 处理 JDBC 错误
            se.printStackTrace();
        }catch(Exception e){
            // 处理 Class.forName 错误
            e.printStackTrace();
        }finally{
            // 关闭资源
            try{
                if(stmt!=null) stmt.close();
            }catch(SQLException se2){
            }// 什么都不做
            try{
                if(conn!=null) conn.close();
            }catch(SQLException se){
                se.printStackTrace();
            }
        }
        return user;
    }
}
2.mybatis模式如下:
// dao层接口如下
package dao;
import User;
import java.util.List;
public interface UserDao {
    // 判断是否重名
    User verifyUser(String username);
}
<!-- mapping文件如下 -->
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="UserDao" >
  <!--查询User是否重名-->
  <select id="verifyUser" resultType="User">
      SELECT * FROM user where username = #{username};
  </select>
</mapper>
3.hibernate模式如下:
// dao层接口
package dao;
import User;
import java.util.List;
public interface UserDao {
    //  查询User是否重名
    User verifyUser(String username)
}

// dao层实现类
package dao.impl;

import UserDao;
import User;
import org.apache.struts2.ServletActionContext;
import org.hibernate.Query;
import org.hibernate.ScrollableResults;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;

@Repository
public class UserDaoImpl implements UserDao {

    @Autowired
    private SessionFactory sessionFactory;
    
    // 根据用户名判断用户是否存在
    @Override
    @Transactional
    public User verifyUser(String username) {
        return (User) sessionFactory.getCurrentSession().createQuery("from User where username='" + username +"'").uniqueResult();
    }

}

接下来编写我们的service

// UserService接口
package service;

import User;

public interface UserService {
    // 根据用户ID查询用户
    String verifyUser(String username);
}
// UserServiceImpl实现类
package service.impl;

import User;
import service.UserService;

@Service
public class UserServiceImpl implements UserService {
    //  注入userDao,如果试用jdbc的话直接在方法内对UserDao进行实例化即可
    @Autowired
    private UserDao userDao;
    
    // 业务逻辑层对查询结果进行处理
    public String verifyUser(String username){
        User user = userDao.verifyUser(username);
        // 这里代表如果通过用户名没有查询到用户信息,即代表未重名返回SUCCESS,否则返回ERROR代表以重名
        if(user == null){
            return "SUCCESS";
        }else{
            return "ERROR";
        }
    }
}

接下来到了我们的控制器层Controller

package controller;

import User;
import org.springframework.beans.factory.annotation.Autowired;
import service.UserService;
@Controller
@RequestMapping("/user")
public class UserController {
    @Autowired
    //  注入userService
    private UserService userService;
   
    @ResponseBody
    @RequestMapping(value = "/verifyUser", method = RequestMethod.GET)
    public String verifyUser(@RequestParam("username") String username){
        return userService.verifyUser(username);
    }
}

最后就是我们的重头戏了——我们的前端代码以及通过jquery实现ajax异步验证

1.jquery怎么导入看我另外一篇博客

2.编写html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>验证测试</title>
    <script src="http://code.jquery.com/jquery-1.4.1.min.js"></script>
</head>
<body>
<input type="text" name="username" id="username" onkeyup="verifyUser()"/>
<input type="text" name="password" id="password"/>
<script>
    function verifyUser() {
        $.ajax({
            type: "get",
            url:"/user/verifyUser",
            data:{
                username:$("#username").val()
            },
            success(data){
                if (data=="SUCCESS"){
                    alert("用户名已经存在,请更换!!");
                } else {
                    // 这里应该不做反应,或是与if进行反向操作
                    alert("");
                }
            },
            error(){
                alert("ajax配置有错,请检查url与type是否正确");
            }
        });
    }
</script>
</body>
</html>

结束语

至此,我们的验证算是完成,大家如果还有什么问题,可以评论或者留言告诉我,我会尽全力为大家进行解答,谢谢各位🙏🙏🙏🙏。