首先 我们需要两个JAR包
这里 我们在项目 pom.xml 文件dependencies标签下加入代码如下
导入mybatis与mysql-connector-java
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<!-- MySQL Connector -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
好 这样 JAR就已经到我们项目里面了
然后 我们在java模块 下创建一个 entity 包 用来存放实体类
然后 我数据库中有个一staff表 数据格式如下图 我们等会就来操作这个表
然后 我们在entity包下创一个类 叫 staff
参考代码 如下
package com.example.dom.entity;
public class staff {
private int id;
private String name;
private int age;
private int status;
private int departmentid;
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setStatus(int status) {
this.status = status;
}
public void setDepartmentid(int departmentid) {
this.departmentid = departmentid;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public int getStatus() {
return status;
}
public int getDepartmentid() {
return departmentid;
}
}
这里我们根据数据库表的格式 定义了整个属性类的属性 然后声明了他们对应的get set方法
然后 我们找到 main 下的 resources 目录 右键选择创建一个文件
叫 mybatis-config.xml
用于配置MyBatis,在该文件中配置数据库连接信息和Mapper扫描路径
参考代码如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="staffMapper.xml"/>
</mappers>
</configuration>
这里 就告诉系统 我们要链接的数据库是 mysql
然后路径是 localhost:3306 本机默认的 test数据库
密码和用户名我都没有改过 所以都是默认的 root
扫描同目录下的 staffMapper.xml
然后 我们在项目java部分创建一个 dao层
下面创建一个接口 叫 staffDao
参考代码如下
package com.example.dom.dao;
import com.example.dom.entity.staff;
import java.util.List;
public interface staffDao {
List<staff> getStaffList();
}
这里 我们定义了一个抽象方法
返回一个staff对象类型的list数组
然后 我们在resources目录下创建一个文件 叫 staffMapper.xml
其实名字是自己取的 只要能和mybatis-config.xml的配置对上就OK
参考代码如下
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.dom.dao.staffDao">
<insert id="insertStaff" parameterType="com.example.dom.entity.staff">
INSERT INTO staff (id,name, age, department)
VALUES (#{id}, #{name}, #{age}, #{department})
</insert>
<select id="getStaffList" parameterType="int" resultType="com.example.dom.entity.staff">
SELECT * FROM staff
</select>
</mapper>
这里 我们还要映射出所有的字段 还是挺麻烦的
然后 namespace 要对应我们dao层写的那个接口的路径
然后 select标签的 id 指向staffDao中的getStaffList函数 告诉它我们是哪个函数执行这条sql
sql也在下面写了 SELECT * FROM staff 查询整张表 这段sql放到数据库中 都是可以执行的
查询整个表 带有所有字段
parameterType 和 resultType都要指向我们staff的实体类 不然他不知道怎么操作
然后 我的WebServlet 参考代码如下
package com.example.dom;
import com.example.dom.dao.staffDao;
import com.example.dom.entity.staff;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.util.List;
@WebServlet("/1cginServlet")
public class TransmissionTest extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置客户端编码
request.setCharacterEncoding("UTF-8");
try (InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml")) {
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
staffDao staffDao = sqlSession.getMapper(staffDao.class);
List<staff> userList = staffDao.getStaffList();
sqlSession.close();
request.setAttribute("userList",userList);
request.getRequestDispatcher("page.jsp").forward(request,response);
return;
} catch (IOException e) {
e.printStackTrace();
}
}
}
都是一些初始化的东西 又臭又长 说实话 我真的不太喜欢这种写法 还是完全注解的舒服 不过 jsp一般也就这种 本身就是个过时技术
最后将数据库表 查询成 staff类型的list集合 我们取的代理名是 userList
然后放到 request 作用域中 键还是 userList
然后跳转向page.jsp
我们 page.jsp 编写代码如下
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%request.setCharacterEncoding("UTF-8");%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<title>JSP - Hello World</title>
</head>
<body>
<table>
<thead>
<tr>
<th>姓名</th>
<th>年龄</th>
</tr>
</thead>
<tbody>
<c:forEach items="${userList}" var="user">
<tr>
<td>${user.name}</td>
<td>${user.age}</td>
</tr>
</c:forEach>
</tbody>
</table>
</body>
</html>
我们就用 forEach 将域对象中的userList 便利输出一下
运行结构如下