栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring-SpringMVC-MyBatis分析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring-SpringMVC-MyBatis分析

目录

朴素版写法

Controller层

Service层

DAO层

整合SpringMVC

Controller层

整合MyBatis

Mapper层

整合Spring

总结

Controller层

Service层

Mapper层


以简单的登录功能来分析。

朴素版写法

Controller层

1、编写XXXServlet类,用于接收前端某一个指定的请求(如果前端有多个请求,那么需要创建相应数量的Servlet类,来分配处理单一请求),这里就是LoginServlet。

package cn.edu.guet.web;

public class LoginServlet extends HttpServlet {
    private UserService us = new UserServiceImpl();
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        boolean b = us.login(username, password);

        //异步操作
        if(b){
            response.setContentType("application/json;charset=UTF-8");

            Result res = new Result("true", username);
            Gson gson = new Gson();
            String s = gson.toJson(res);

            PrintWriter out = response.getWriter();
            out.print(s);
            out.flush();
            out.close();
        }else{
            response.sendRedirect("login.html");
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }
}

2、在web.xml配置该servlet的映射。前端浏览器需要请求服务器的login地址来获得该Servlet的服务。

    
        LoginServlet
        cn.edu.guet.web.LoginServlet
    

    
        LoginServlet
        /login
    

Service层

1、编写UserServiceImpl及接口IUserService。

2、在UserServiceImpl中一般情况是直接调用Dao层的方法,部分涉及复杂业务的操作需要用到事务。

package cn.edu.guet.service.impl;

public class UserServiceImpl implements IUserService {
    private IUserDao ud = new UserDaoImpl();
    @Override
    public boolean login(String username, String password) {
        return ud.login(username,password);
    }
}

DAO层

1、编写UserDaoImpl及接口IUserDao。

2、在UserDaoImpl中建立数据库连接,并执行相应的SQL语句,将结果依次返回 ==> Service ==>Servlet ==> 浏览器。

package cn.edu.guet.dao.impl;

public class UserDaoImpl implements IUserDao {
    String user = "root";
    String pass = "root";
    String url = "jdbc:mysql://localhost:3306/db01?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true";
    Connection conn = null;
    PreparedStatement pstm = null;
    ResultSet rs = null;

    @Override
    public boolean login(String username, String password) {
        boolean b = false;

        String sql = "SELECt password,salt FROM sys_user WHERe name=?";
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");

            conn = DriverManager.getConnection(url,user,pass);
            pstm = conn.prepareStatement(sql);
            pstm.setString(1,username);
            rs = pstm.executeQuery();
            if(rs.next()){
                String enc = rs.getString("password");
                String salt = rs.getString("salt");

                PasswordEncoder md5 = new PasswordEncoder(salt, "MD5");
                b = md5.matches(enc, password);
                if(b) System.out.println("登录成功!");
                else System.out.println("登录失败!");
            }
        } catch (SQLException | ClassNotFoundException e) {
            e.printStackTrace();
        }finally {
            try {
                rs.close();
                pstm.close();
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return b;
    }
}

整合SpringMVC

        SpringMVC主要是对Controller层进行优化,最主要的作用:

1、更为简便的请求映射配置。省去了在web.xml中大量配置映射的过程。

2、使一个类中可以处理多个请求。根据这一特点,我们可以按某种标准来将前端的所有请求划分成若干个类,每个类中的请求都有相似的特征。一般的划分依据就是按照要操作的目标数据表来划分,即如果3个请求都是要操作user表,那么就可以将这3个请求封装在一个类中。

3、封装了获取请求参数,以及对浏览器响应数据的操作。这一点我认为是最重要的。

Controller层

1、省去了以前在web.xml中的servlet映射配置,取而代之使用注解@RequestMapping("/login")的方式来进行映射配置。写法更为方便。

2、类名从LoginServlet变为UserController,说明现在的类不只是能够处理login这一个请求,其他涉及数据库user表操作的请求都能写在该类中。

3、请求参数直接写在方法形参中,SpringMVC会自动帮注入。返回的数据SpringMVC会自动帮转换成JSON数据返回给浏览器。

package cn.edu.guet.controller;


@Controller
public class UserController {
    IUserService userService = new UserServiceImpl();

    @RequestMapping("/login")
    public User login(String username, String password) { 
        User user = userService.login(username, password);

        return user;
    }

    @RequestMapping("/updateUser")
    public int updateUser(User user) { 
        return userService.updateUser(user);
    }

    @RequestMapping("/addUser")
    public int addUser(User user) { 
        return userService.addUser(user);
    }
}

对比一下之前的做法,就能感受到SpringMVC框架的强大!

 1、web.xml中配置映射

    
        LoginServlet
        cn.edu.guet.web.LoginServlet
   

   
        LoginServlet
        /login
   

2、创建LoginServlet接收单一请求

public class LoginServlet extends HttpServlet {
    private UserService us = new UserServiceImpl();
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        boolean b = us.login(username, password);

        //异步操作
        if(b){
            response.setContentType("application/json;charset=UTF-8");

            Result res = new Result("true", username);
            Gson gson = new Gson();
            String s = gson.toJson(res);

            PrintWriter out = response.getWriter();
            out.print(s);
            out.flush();
            out.close();
        }else{
            response.sendRedirect("login.html");
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }
}

Service层和Dao层不在SpringMVC的管辖范围内,所以与朴素版的代码相同。

整合MyBatis

        MyBatis主要是对Dao层进行优化,并将其改名为Mapper。

Mapper层

1、UserMapper.java

package org.example.mapper;

public interface UserMapper {
    User login(@Param("username") String username,@Param("password") String password);
    int addUser(User user);
    int updateUser(User user);
}

2、UserMapper.xml





    
        INSERT INTO sys_user(id,name,nick_name,password,salt) VALUES(#{id},#{name},#{nick_name},#{password},#{salt})
    

    
        UPDATE sys_user SET name=#{name},nick_name=#{nick_name},password=#{password},salt=#{salt} WHERe id=#{id}
    

    
        SELECT id,nick_name,password,salt FROM sys_user WHERe name=#{username} AND password=#{password}
    

框架的配置文件在本文都未提及。配置文件只需要编写一次,就可供全局使用。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/999022.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号