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-INF
的web.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-INF
的web.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框架学习笔记