记录7
JavaWeb每日学习记录(第10天):整合MyBatis框架与JavaWeb应用
今天是JavaWeb学习的第十天,我主要学习了如何将MyBatis框架整合到JavaWeb应用中。MyBatis是一个优秀的持久层框架,它简化了JDBC的复杂操作,同时支持自定义SQL语句,能够很好地结合传统关系型数据库进行开发。通过今天的实践,我掌握了MyBatis的基本使用方法,并将其应用到Web项目中,进一步提升了开发效率。
一、MyBatis基础与配置
MyBatis的核心功能是通过映射文件(Mapper XML)将SQL语句与Java对象进行绑定,从而实现数据的持久化操作。为了更好地理解MyBatis的使用,我首先学习了其基本配置和核心组件。
示例1:MyBatis基础配置
1.引入MyBatis依赖(Maven配置)
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.13</version>
</dependency>
2.MyBatis配置文件(mybatis-config.xml)
<?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.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mydatabase?useSSL=false&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/example/mapper/UserMapper.xml"/>
</mappers>
</configuration>
3.Mapper接口与映射文件
定义一个Mapper接口和对应的XML映射文件,用于操作用户表。
UserMapper.java
package com.example.mapper;
import com.example.model.User;
import java.util.List;
public interface UserMapper {
void insertUser(User user);
void deleteUser(int id);
void updateUser(User user);
User getUserById(int id);
List<User> getAllUsers();
}
UserMapper.xml
<?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.mapper.UserMapper">
<insert id="insertUser" parameterType="com.example.model.User">
INSERT INTO users (username, password, email) VALUES (#{username}, #{password}, #{email})
</insert>
<delete id="deleteUser" parameterType="int">
DELETE FROM users WHERE id = #{id}
</delete>
<update id="updateUser" parameterType="com.example.model.User">
UPDATE users SET username = #{username}, password = #{password}, email = #{email} WHERE id = #{id}
</update>
<select id="getUserById" parameterType="int" resultType="com.example.model.User">
SELECT * FROM users WHERE id = #{id}
</select>
<select id="getAllUsers" resultType="com.example.model.User">
SELECT * FROM users
</select>
</mapper>
通过MyBatis的配置文件和映射文件,我能够将SQL语句与Java对象进行绑定,从而实现数据的持久化操作。
二、整合MyBatis到JavaWeb应用
为了将MyBatis整合到JavaWeb应用中,我编写了相关的Servlet和JSP页面,实现了用户信息的增删改查功能。
示例2:用户管理功能(MyBatis版本)
1.用户操作类(UserDAO.java)
package com.example.dao;
import com.example.mapper.UserMapper;
import com.example.model.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.Reader;
import java.util.List;
public class UserDAO {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
String resource = "mybatis-config.xml";
Reader reader = Resources.getResourceAsReader(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
}
}
public void addUser(User user) {
try (SqlSession session = sqlSessionFactory.openSession()) {
UserMapper mapper = session.getMapper(UserMapper.class);
mapper.insertUser(user);
session.commit();
}
}
public void deleteUser(int id) {
try (SqlSession session = sqlSessionFactory.openSession()) {
UserMapper mapper = session.getMapper(UserMapper.class);
mapper.deleteUser(id);
session.commit();
}
}
public void updateUser(User user) {
try (SqlSession session = sqlSessionFactory.openSession()) {
UserMapper mapper = session.getMapper(UserMapper.class);
mapper.updateUser(user);
session.commit();
}
}
public User getUserById(int id) {
try (SqlSession session = sqlSessionFactory.openSession()) {
UserMapper mapper = session.getMapper(UserMapper.class);
return mapper.getUserById(id);
}
}
public List<User> getAllUsers() {
try (SqlSession session = sqlSessionFactory.openSession()) {
UserMapper mapper = session.getMapper(UserMapper.class);
return mapper.getAllUsers();
}
}
}
2.添加用户Servlet(AddUserServlet.java)
package com.example.servlet;
import com.example.dao.UserDAO;
import com.example.model.User;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/addUser")
public class AddUserServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String username = request.getParameter("username");
String password = request.getParameter("password");
String email = request.getParameter("email");
User user = new User(username, password, email);
UserDAO userDAO = new UserDAO();
userDAO.addUser(user);
response.sendRedirect("listUsers");
}
}
3.用户列表Servlet(ListUsersServlet.java)
package com.example.servlet;
import com.example.dao.UserDAO;
import com.example.model.User;
import javax.servlet.*;
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.util.List;
@WebServlet("/listUsers")
public class ListUsersServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
UserDAO userDAO = new UserDAO();
List<User> users = userDAO.getAllUsers();
request.setAttribute("users", users);
request.getRequestDispatcher("/userList.jsp").forward(request, response);
}
}
4.用户列表页面(userList.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<title>用户列表</title>
</head>
<body>
<h1>用户列表</h1>
<table border="1">
<tr>
<th>ID</th>
<th>用户名</th>
<th>邮箱</th>
<th>操作</th>
</tr>
<c:forEach items="${users}" var="user">
<tr>
<td>${user.id}</td>
<td>${user.username}</td>
<td>${user.email}</td>
<td>
<a href="deleteUser?id=${user.id}">删除</a>
</td>
</tr>
</c:forEach>
</table>
</body>
</html>
通过MyBatis的映射文件和Mapper接口,我能够更简洁地实现数据库操作,避免了JDBC中的大量模板代码。同时,MyBatis支持自定义SQL语句,能够很好地结合传统关系型数据库进行开发。
三、总结
今天我学习了MyBatis框架的基本使用方法,并将其整合到JavaWeb应用中。通过MyBatis的配置文件和映射文件,我能够将SQL语句与Java对象进行绑定,从而实现数据的持久化操作。同时,我将MyBatis与Servlet、JSP结合,实现了一个简单的用户管理系统,进一步巩固了MyBatis的使用。
MyBatis框架能够显著简化JDBC操作,同时

浙公网安备 33010602011771号