Mybatis框架学习笔记

Posted 小智RE0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis框架学习笔记相关的知识,希望对你有一定的参考价值。

之前在第四次笔记中完成了;对于关联查询的情况
Mybatis框架学习笔记(4)

当然,之前的数据基本都在控制台显示,那么我想让它显示到前端的页面,怎么去完成呢;

1.首先解决一个问题;之前忘记创建web项目;怎么把普通的文件夹标记为能被识别的web文件夹

首先得去找存放web文件的文件夹了;

啊这,之前创建这个项目的时候,没有选择是web项目,忘记了…

那么,就得手动添加创建了;
在这里添加创建

但是,目前它没在src目录下的main目录

手动,搬过去,怎么说;
它的标记好像没了,变成了一个普通文件夹;

当然,为了让它和标准创建的web项目相同,我把文件夹web的名字改为webapp;也用不到jsp文件,那就删掉;

那么,首先得让它恢复标记;
在文件处点击项目结构;

这两处的路径需要手动改一下;双击文件,进行修改;

结束

这时,发现项目就已经被标记好了;

当然,要部署web项目,先去配置服务器

然后,先去pom.xml文件导入需要的依赖jar坐标

<dependencies>
        <!--需要的mybatis依赖jar包-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.2</version>
        </dependency>
        <!--数据库驱动连接的jar包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.22</version>
        </dependency>

        <!--log4j日志包-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

        <!--junit单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <!--这里的test标识,即表示它不会被打包-->
            <scope>test</scope>
        </dependency>

        <!--导入json需要的依赖-->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.6</version>
        </dependency>

        <!--servlet-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
</dependencies>

xiaozhi包下创建servlet包;
在前几次的整理测试时,注意到,调用公共类的这部分代码;以及调用持久层的方法;还是比较多的,
若是直接放在servlet层中去直接写的话;也是可行的;;但是在项目的整体架构上来看,这个耦合度就比较高;那么为了能尽量降低耦合度;就得在持久层(dao数据交互访问层)servlet(控制层)之间加一层(服务层service层);就是说,让持久层和控制层尽量不要直接接触,
比如说你要去租房子;一般来说;你不会直接去和房东进行沟通的;而是去找中介,然后中介在你和房东之间进行沟通;那么,添加的这个服务层就相当于一个中介;

xiaozhi包下创建service包;

2.员工查询展示,以及在搜索框输入Id后根据Id查询员工信息

OK,查询员工的话,展示比较简单;那就先做员工的查询展示;
mapper层的接口和配置文件这里就不重复去写了;
Mybatis框架学习笔记(4)–>之中有整理

先在webapp文件夹下创建一个js文件夹;把jquery.1.8.3.min.js文件放入;

当然,先去创建一个简易的字符编码过滤器;
xiaozhi包下创建filter包,创建EncodingFilter,进行字符编码过滤;

package com.xiaozhi.filter;

import javax.servlet.*;
import java.io.IOException;

/**
 * @author by CSDN@小智RE0
 * @date 2021-10-30 15:20
 */
public class EncodingFilter implements Filter{
    String encode;
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        //接收初始化参数;
        encode = filterConfig.getInitParameter("encode");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("字符编码过滤中.......................");
        servletRequest.setCharacterEncoding(encode);
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {
    }
}

webapp下的WEB-INFweb.xml中配置过滤器;

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!--配置过滤器-->
    <filter>
        <filter-name>EncodingFilter</filter-name>
        <filter-class>com.xiaozhi.filter.EncodingFilter</filter-class>
        <!--初始化参数-->
        <init-param>
            <param-name>encode</param-name>
            <param-value>utf-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>EncodingFilter</filter-name>
        <url-pattern>/do/*</url-pattern>
    </filter-mapping>
</web-app>

service包下创建EmployeeService;员工类的服务层;

package com.xiaozhi.service;

import com.xiaozhi.mapper.EmployeeMapper;
import com.xiaozhi.pojo.Employee;
import com.xiaozhi.utils.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import java.util.List;
/**
 * @author by CSDN@小智RE0
 * @date 2021-10-29 21:55
 * 员工类的服务层
 */
public class EmployeeService {

    //查询所有的员工;
    public List<Employee> getAllEmployees(){
        //调用工具类;
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        //获取代理对象;
        EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
        //调用方法;
        List<Employee> allEmp = mapper.getAllEmp();
        //关闭;
        sqlSession.close();
        //传递到控制层;
        return allEmp;
    }

    //根据Id查询员工;
    public Employee getEmpById(Integer id){
        //调用工具类;
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        //获取代理对象;
        EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
        //调用方法;
        Employee employee = mapper.getEmpById(id);
        //关闭sqlSession;
        sqlSession.close();
        return employee;
    }

}

servlet包下创建EmployeeServlet,获取前端的参数;这里会调用服务层的方法进行处理,

package com.xiaozhi.servlet;

import com.google.gson.Gson;
import com.xiaozhi.pojo.Employee;
import com.xiaozhi.service.EmployeeService;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

/**
 * @author by CSDN@小智RE0
 * @date 2021-10-29 21:56
 * 员工管理的servlet处理
 */
public class EmployeeServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("-----在员工管理请求数据---");
        PrintWriter out=null;

        //获取到标记参数;
        String mark = req.getParameter("mark");
        //查询所有的员工
        if(mark.equals("empList")){
            try {
                //请求编码;响应解码;
                resp.setContentType("text/html;charset=utf-8");
                //会以流的方式返回;
                out = resp.getWriter();

                //这里会调用服务层进行处理;
                EmployeeService employeeService = new EmployeeService();
                List<Employee> allEmployees = employeeService.getAllEmployees();
                //控制台输出测试;
                allEmployees.forEach(System.out::println);
                //不为空就发出去;
                if(!allEmployees.isEmpty()){
                    //以json格式发送到前端页面进行响应;
                    out.print(new Gson().toJson(allEmployees));
                }else {
                    out.print(0);//-->抱歉,暂时没有员工
                }
            } catch (IOException e) {
                e.printStackTrace();
                out.print(500);
            }
        }

        //根据Id查询员工;
        else if(mark.equals("getEmpById")){
            try{
                //请求编码;响应解码;
                resp.setContentType("text/html;charset=utf-8");
                //会以流的方式返回;
                out = resp.getWriter();

                //获取传递的Id;
                String empId = req.getParameter("empId");

                //这里会调用服务层进行处理;
                EmployeeService employeeService = new EmployeeService();
                //根据ID查询员工;
                Employee emp = employeeService.getEmpById(Integer.parseInt(empId));

                //控制台输出测试;
                System.out.println(emp);
                //不为空才发出去;
                if(emp!=null){
                    //以Json字符串格式返回;
                    out.print(new Gson().toJson(emp));
                }else {
                    out.print(0);//-->抱歉,员工不存在
                }
            }catch (Exception e){
                e.printStackTrace();
                out.print(500);
            }
        }
    }
}

当然,还要在webapp下的WEB-INFweb.xml中配置servlet;

<!--配置员工servlet-->
<servlet>
    <servlet-name>empServlet</servlet-name>
    <servlet-class>com.xiaozhi.servlet.EmployeeServlet</servlet-class>
</servlet>
<!--servlet映射-->
<servlet-mapping>
    <servlet-name>empServlet</servlet-name>
    <url-pattern>/do/emp</url-pattern>
</servlet-mapping>

webapp文件夹下创建index.html,一个简易的跳转首页;

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>简易首页</title>
</head>
<body>
  <a href="employee.html">员工列表</a>
  <a href="dept.html">部门列表</a>
</body>
</html>

员工的展示页面;

webapp新建的employee.html作为员工的展示页面

这个页面就比较粗糙了

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>员工列表</title>
    <!--部署jquery-->
    <script src="js/jquery.1.8.3.min.js" type="text/javascript"></script>

    <script type="text/javascript">
        //页面打开时发送请求;
        $(function () {
            $.get("do/emp", {mark: "empList"}, function (res) {
                //测试获取的数据;
                //console.log(res)
                if(res==500){
                    alert("抱歉,服务器出了点问题");
                }else if(res==0){
                    //弹框提示;
                    alert("抱歉,暂时没有员工!")
                }else {
                    //拼接存入表格;
                    var str2="";
                    for (var i = 0; i < res.length; i++) {
                        str2+="<tr class='allEmpClass' align='center'>";
                        str2+="<td>"+(i+1)+"</td>";
                        str2+="<td>"+res[i].name+ "</td>";
                        str2+="<td>"+res[i].sex+ "</td>";
                        str2+="<td>"+res[i].dept.name+ "</td>";
                        str2+="<td>"+res[i].user.account+ "</td>";
                        str2+="</tr>";
                    }
                    $("#table").append(str2);
                }

            }, "json");
        });

        //点击搜索时,查询员工;
        function getEmp(){
            //先判断是否输入了;
            var idVal = $Mybatis框架学习笔记

Mybatis框架学习笔记

Mybatis 学习笔记

Mybatis框架学习笔记

Mybatis框架学习笔记

mybatis学习笔记(一) for 概念