记录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&amp;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操作,同时

posted @ 2025-02-20 19:11  马瑞鑫03  阅读(68)  评论(0)    收藏  举报