¿Cómo utilizar el asignador de clases de interfaz y el Servicio en el controlador al mismo tiempo en SpringMVC?

Al realizar funciones relacionadas con el inicio de sesión, descubrí que las funciones relacionadas entran en conflicto. Cuando uso @Autowired para cargar automáticamente, no es posible hacer referencia al UserMapper privado userMapper y al UserService privado userService al mismo tiempo. Ninguno de los dos puede encontrar una solución.

En unos días de estudio y exploración, encontré dos caminos:

El primero es usar la anotación @Resource para hacer referencia al contenido del mapeador, el otro es no usar UserService e integrar todas las funciones que implementa en la clase de control. Este método resuelve directamente el problema de que no se puede usar al mismo tiempo en la raíz. .

ley uno

A través de la guía del siguiente enlace: Realice la función de inicio de sesión de usuario basada en springmvc+mysql+ mybatis %257B%2522request%255Fid%2522%253A%2522165512297316782395343115%2522%252C%2522scm%2522%253A%25222014 0713.130102334.pc%255Caída.%25 22 %257D&request_id=165512297316782395343115&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~ Todo ~ fIRST_RANK_ECPM_V1 ~ RANK_V31_ECPM-6-79547655-NULL.142%5EV14%5 eControl, 157%5EV14%5EV_3 y UTM_TERM = Springmvc%80%E4E %E4%E4%E4%E4%B4%B4%B4%E4%B4%E4%B4%B4% 9%88%E5%9C%A8Servicio%E9%87%87% 8C%E5%AE%9E%E7 %8E%B0%E6%8F%92%E5%85%A5%E6%95%B0%E6%8D%AE%E5%88%B0%E6%95%B0% E6%8D%AE%E5%BA %93%E5%92%8C%E9%AA%8C%E8%AF%81%E7%9A%84%E5%8A%9F%E8%83%BD&spm=1018.2226.3001.4187

 Finalmente me di cuenta de algo:

Antes quería controlar la página de registro y también quería insertar la información de registro del usuario en la base de datos al mismo tiempo, pero no funcionó. El código esperado:

@Autowired
    private UserService userService;
    private UserMapper userMapper;

//控制注册
    @RequestMapping("pre_reg")
    public String preReg(){
        return "user/reg";
    }
    @RequestMapping("add_user")
    public String reg(String uid, String uname, String address,
                      String password, String password1, Model model)
    {
        //不允许有空的信息:
        if(uid.equals("") || uname.equals("") || address.equals("")
                || password.equals("") || password1.equals("")){
            model.addAttribute("reg1_error","信息有误,请完整填入信息!");
            return "redirect:pre_reg";
        }
        //验证密码是否正确:
        if(!password.equals(password1)){
            model.addAttribute("reg_error","两次密码不一致,请重新输入!");
            return "redirect:pre_reg";
        }
        model.addAttribute("uid",uid);
        return "redirect:pre_login";
    }

    @RequestMapping("add_user")
    public String addUser(User user){
        int count = userMapper.addUser(user);
        return "redirect:pre_login";
    }
//注意这只是部分代码!!并不是全部的!!

Pero cuando se ejecutó, la idea informó un error, diciendo que se hacía referencia a dos beans y no se podían reconocer. Como he utilizado UserService para la verificación de inicio de sesión a continuación, UserService no se puede eliminar.

//这是控制类中剩下的部分:
//控制登录
    @RequestMapping("pre_login")
    public String preLogin(){
        return "user/login";
    }
    @RequestMapping("login")
    public String login(User user, HttpSession session, Model model)
    {
        if (userService.isValidatedUser(user))
        {
            session.setAttribute("uid", user.getUid());
            request.setAttribute("user",user);
            return "redirect:success";
        }
        model.addAttribute("login_error", "名称或密码错误!");
        return "redirect: pre_login";
    }

Esto se modifica para funcionar con:

//引用mapper文件:
    @Resource
    private UserMapper userMapper;
    //主动装载服务类
    @Autowired
    private UserService userService;

    //控制注册
    @RequestMapping("pre_reg")
    public String preReg(){
        return "user/reg";
    }
    @RequestMapping("add_user")
    public String reg(User user, String uid, String uname, String address,
                      String password, String password1, Model model)
    {
        //不允许有空的信息:
        if(uid.equals("") || uname.equals("") || address.equals("")
                || password.equals("") || password1.equals("")){
            model.addAttribute("reg1_error","信息有误,请完整填入信息!");
            return "redirect:pre_reg";
        }
        //验证密码是否正确:
        if(!password.equals(password1)){
            model.addAttribute("reg_error","两次密码不一致,请重新输入!");
            return "redirect:pre_reg";
        }

        //添加用户:
        int count = userMapper.addUser(user);
        model.addAttribute("uid",uid);
        return "redirect:pre_login";
    }

//剩下的跟上面的控制登录一样。

Después de la modificación, utilicé la anotación @Resource para hacer referencia al Mapper de la clase de interfaz y cargué automáticamente la clase de servicio UserService (¡esta función es para verificar el inicio de sesión, que no puede faltar!)

//这个是在UserService类里面的内容,主要用于验证登录,从数据库中查询信息:
@Autowired
    private UserMapper userMapper;

    public boolean isValidatedUser(User user){
        if (user == null)
            return false;
        User dbUser = userMapper.findUserByUid(user.getUid().trim());
        if (dbUser != null && dbUser.getPassword().equals(user.getPassword()) ){
            return true;
        }
        return false;
    }

ley dos

Después de unos días de lanzamiento, descubrí que hay otra forma de implementarlo, que es implementar todas las funciones implementadas por UserService en la clase de control, el código es el siguiente:

@RequestMapping("login")
    public String login(String uid, String uname, String password, HttpServletRequest request, HttpSession session, Model model)
    {
        //实现方法1,无需Service类
        //下面的user是从数据库里找
        User user = userMapper.findUserByUid(uid);
        if (user != null) {
            if (password.equals(user.getPassword())) {
                //保存用户登录状态
                uname = user.getUname();
                session.setAttribute("user", user);
                session.setAttribute("uname", uname);
                request.getSession().setAttribute("user",user);
                return "redirect:success";
            }
            else {
                model.addAttribute("login_error", "名称或者密码错误");
                return "redirect: pre_login";
            }
        }
        model.addAttribute("login_error", "名称或密码错误!");
        session.setAttribute("uid", "");
        return "redirect: pre_login";
}

Aquí hay solo una pequeña modificación del código, tomando al usuario directamente de la base de datos: si el uid es válido, la clase de entidad usuario no está vacía, entonces juzgue si la contraseña es correcta; si la contraseña es correcta, el inicio de sesión es exitoso , si no, devuelve la información "¡nombre o contraseña incorrecta!".

Supongo que te gusta

Origin blog.csdn.net/m0_54066656/article/details/125267926
Recomendado
Clasificación