基于mybatis框架的注册用户名异步验重

注册jsp的Ajax代码

$(":text").blur(function () {
            var username = $(this).val()
            $.ajax({
                url: '${path}/user?method=checkUserName',
                data: {username: username},
                type: 'post',
                dataType: 'json',
                success: function (res) {
                    var msg = res.msg
                    $("#msg").text(msg)
                    if(res.code==0){
                        $("#msg").css("color", "green");
                    }else if(res.code==500){
                        $("#msg").css("color", "red");
                    }
                }
            })

前面已经介绍过Ajax里参数的具体使用, 将checkUserName的方法路径传入,比较传入的code值回显出不同的提示信息。

servlet代码

 protected void checkUserName(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        HashMap map = new HashMap<>();
        SysUser sysUser = new SysUser();
        sysUser.setUsername(username);
        SysUser newUser = userService.findUserName(sysUser);
        if (newUser == null&!"".equals(username)) {
            map.put("code", 0);
            map.put("msg", "用户名可用");
        } else if(!"".equals(username)){
            map.put("code", 500);
            map.put("msg", "用户名已被占用");
        }else{
            map.put("msg", "");
        }
        ResponseUtil.write(resp,map);
    }

调用userService中的findUserName方法,将注册输入的用户名传入,在数据库中寻找该用户名,如果找到则newUser已经存在,提示用户名已被占用,如果newUser为空则数据库中无该用户名,可以使用,这里非空输入才会提示用户名是否可用。

service代码

public class UserServiceImpl implements UserService {
    private UserMapper userMapper = MapperUtil.getSqlSession().getMapper(UserMapper.class);
   @Override
    public SysUser findUserName(SysUser username) {
        SysUser userName = userMapper.selectByUserName(username);
        return userName;
    }
}

 通过获取userMapper代理对象调用selectByUserName方法,返回查找的用户名。

mapper.xml代码




    

Mybatis中所有数据库的操作都会基于该映射文件和配置的sql语句,在这个配置文件中可以配置任何类型的sql语句。框架会根据配置文件中的参数配置,完成对sql语句以及输入输出参数的映射配置。其中namespace为命名空间,填入的是UserMapper接口的全路径,id是UserMapper接口中的方法,resultType是返回的结果类型。

MapConfig.xml代码




    
    
        
        
        
        
        
    
    
        
    
    
        
    
    
        
            
            
                
                
                
                
            
        
    
    
        
    

该配置文件主要用于连接数据库,可以连接多个数据库,主要有以下的参数配置:

1.properties属性:用于指定外部配置文件的位置。

2.settings设置:mapUnderscoreToCamelCase设置是否开启自动驼峰命名规则映射。

3.typealises:类型别名,只和xml配置有关,用于减少类的完全限定名的冗余。

4.environments:可配置多个运行环境,default中为默认使用哪个数据库。

5.mappers:映射器,用来映射mapper.xml文件,有三种映射方式,图中为配置包名。

utils代码

package javaweb.utils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;

public class MapperUtil {
    private MapperUtil(){}
    private static SqlSessionFactory factory;
    static {
        InputStream resourceAsStream = null;
        try {
            resourceAsStream = Resources.getResourceAsStream("config/mybatis-config.xml");
            factory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
  public static SqlSession getSqlSession(){
        return factory.openSession(true);
  }
}

mapperUtil用于加载config.xml文件,返回sql会话信息。

package javaweb.utils;
import cn.hutool.json.JSONUtil;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public final class ResponseUtil {
    private ResponseUtil(){}
    public static void write(HttpServletResponse response,Object object) throws IOException {
        response.setContentType("application/json;charset=utf-8");
        PrintWriter writer = response.getWriter();
        writer.write(JSONUtil.toJsonStr(object));
        writer.close();
    }
}

ResponseUtil用于以json格式响应数据的写出。

你可能感兴趣的:(mybatis,servlet,架构,ajax)