spring mvc 组合mybatis框架实例详解

yizhihongxing

Spring MVC 搭配 MyBatis 框架实例详解

本文将针对如何使用 Spring MVC 框架搭配 MyBatis 框架展开讲解,包括环境搭建、配置,以及搭建一个简单的增删改查示例。

环境搭建

为了使用 Spring MVC 搭配 MyBatis 框架,我们需要先完成以下环境的搭建:

  • JDK:需要 JDK 版本为 1.8 或以上;
  • Maven:使用 Maven 进行项目依赖和管理;
  • Spring MVC:使用 Spring MVC 作为 Web 框架,版本为 5.3.5;
  • MyBatis:使用 MyBatis 作为 ORM 框架,版本为 3.5.6;
  • MySQL:使用 MySQL 作为数据库,版本为 8.0.23。

配置文件

pom.xml

在 Maven 的 pom.xml 文件中加入以下依赖:

<!-- Spring MVC -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.5</version>
</dependency>

<!-- MyBatis -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.6</version>
</dependency>

<!-- MySQL Connector -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.23</version>
</dependency>

applicationContext.xml

在 Spring MVC 的 applicationContext.xml 文件中加入以下配置:

<!-- 数据库连接配置 -->
<bean id="dataSource" 
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/mybatis_demo?useUnicode=true&amp;characterEncoding=utf8&amp;serverTimezone=UTC" />
    <property name="username" value="root" />
    <property name="password" value="123456" />
</bean>

<!-- MyBatis 配置,包括数据库连接和 mapper 配置 -->
<bean id="sqlSessionFactory" 
    class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="configLocation" value="classpath:mybatis-config.xml" />
    <property name="mapperLocations" value="classpath*:com/example/mapper/*.xml" />
</bean>

<!-- MyBatis Mapper 自动扫描 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.example.mapper" />
</bean>

<!-- 注册 Controller 类 -->
<context:component-scan base-package="com.example.controller" />

mybatis-config.xml

在 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>
    <!-- 使用注解方式进行 Mapper 映射 -->
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true" />
        <setting name="logImpl" value="LOG4J2"/>
    </settings>

    <!-- Mapper 文件自动扫描 -->
    <mappers>
        <mapper class="com.example.mapper.UserMapper" />
    </mappers>
</configuration>

示例说明

以下是一个简单的示例,实现增删改查功能:

UserMapper.java

package com.example.mapper;

import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import com.example.dto.User;

public interface UserMapper {
    @Select("SELECT * FROM user")
    List<User> getUsers();

    @Select("SELECT * FROM user WHERE id = #{id}")
    User getUserById(int id);

    @Insert("INSERT INTO user (name, age) VALUES (#{name}, #{age})")
    void addUser(User user);

    @Update("UPDATE user SET name=#{name}, age=#{age} WHERE id=#{id}")
    void updateUser(User user);

    @Delete("DELETE FROM user WHERE id = #{id}")
    void deleteUser(int id);
}

UserController.java

package com.example.controller;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import com.example.dto.User;
import com.example.mapper.UserMapper;

@Controller
public class UserController {
    @Autowired
    private UserMapper userMapper;

    @GetMapping("/user/all")
    public String getUsers(ModelMap modelMap) {
        List<User> users = userMapper.getUsers();
        modelMap.addAttribute("users", users);
        return "user_list";
    }

    @GetMapping("/user/add")
    public String addUserView() {
        return "user_add";
    }

    @PostMapping("/user/add")
    public String addUser(User user) {
        userMapper.addUser(user);
        return "redirect:/user/all";
    }

    @GetMapping("/user/edit/{id}")
    public String editUserView(@PathVariable("id") int id, ModelMap modelMap) {
        User user = userMapper.getUserById(id);
        modelMap.addAttribute("user", user);
        return "user_edit";
    }

    @PostMapping("/user/edit")
    public String editUser(User user) {
        userMapper.updateUser(user);
        return "redirect:/user/all";
    }

    @GetMapping("/user/delete/{id}")
    public String deleteUser(@PathVariable("id") int id) {
        userMapper.deleteUser(id);
        return "redirect:/user/all";
    }
}

user_list.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <title>User List</title>
</head>
<body>
    <h1>User List</h1>
    <a href="${pageContext.request.contextPath}/user/add">Add User</a>
    <table>
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th>Age</th>
            <th>Operation</th>  
        </tr>
        <c:forEach var="user" items="${users}">
            <tr>
                <td>${user.id}</td>
                <td>${user.name}</td>
                <td>${user.age}</td>
                <td>
                    <a href="${pageContext.request.contextPath}/user/edit/${user.id}">Edit</a>
                    <a href="${pageContext.request.contextPath}/user/delete/${user.id}">Delete</a>
                </td>
            </tr>
        </c:forEach>
    </table>
</body>
</html>

user_add.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <title>Add User</title>
</head>
<body>
    <h1>Add User</h1>
    <form action="${pageContext.request.contextPath}/user/add" method="post">
        <table>
            <tr>
                <td>Name:</td>
                <td><input type="text" name="name" /></td>
            </tr>
            <tr>
                <td>Age:</td>
                <td><input type="text" name="age" /></td>
            </tr>
            <tr>
                <td colspan="2"><input type="submit" value="Add" /></td>
            </tr>
        </table>
    </form>
</body>
</html>

user_edit.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <title>Edit User</title>
</head>
<body>
    <h1>Edit User</h1>
    <form action="${pageContext.request.contextPath}/user/edit" method="post">
        <table>
            <input type="hidden" name="id" value="${user.id}" />
            <tr>
                <td>Name:</td>
                <td><input type="text" name="name" value="${user.name}" /></td>
            </tr>
            <tr>
                <td>Age:</td>
                <td><input type="text" name="age" value="${user.age}" /></td>
            </tr>
            <tr>
                <td colspan="2"><input type="submit" value="Save" /></td>
            </tr>
        </table>
    </form>
</body>
</html>

结束语

通过上述的配置和示例,你已经了解了如何使用 Spring MVC 搭配 MyBatis 框架。当然,这里只是简单的示例,实际生产环境中可能会更加复杂。但通过这个例子的理解,你应该理解了整个框架的基本原理。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:spring mvc 组合mybatis框架实例详解 - Python技术站

(0)
上一篇 2023年6月16日
下一篇 2023年6月16日

相关文章

  • 手把手教你如何搭建SpringBoot+Vue前后端分离

    手把手教你如何搭建SpringBoot+Vue前后端分离 1. 准备工作 在开始搭建前,需要先安装并配置好以下软件: Java8及以上版本 Node.js Vue CLI 4 Git 2. 搭建后端环境 2.1. 创建SpringBoot项目 使用IntelliJ IDEA 或者其它集成开发环境,选择 Spring Initializr 创建一个新的 Spr…

    Java 2023年5月19日
    00
  • Spring boot admin 服务监控利器详解

    Spring Boot Admin 服务监控利器详解 Spring Boot Admin 是一个用于管理和监控 Spring Boot 应用程序的开源项目。它提供了一个简单易用的 Web 界面,可以帮助我们监控应用程序的运行状态、性能指标和日志信息等。在本文中,我们将详细讲解 Spring Boot Admin 的使用方法,并提供两个示例。 添加依赖 在po…

    Java 2023年5月15日
    00
  • html5本地存储_动力节点Java学院整理

    HTML5本地存储攻略 HTML5本地存储是一种Web API,可以用于在客户端本地存储数据,包括存储键值对、存储复杂对象、存储多个数据项等,很大程度上减轻了Web端与服务器端间数据传输量,并提高了页面响应速度和用户体验。 localStorage 和 sessionStorage 对象 HTML5本地存储有两种方式:localStorage 和 sessi…

    Java 2023年5月23日
    00
  • hibernate-validator后端表单数据校验的使用示例详解

    Hibernate-Validator 后端表单数据校验的使用示例详解 什么是 Hibernate-Validator Hibernate-Validator 是一个 Java Bean 验证库,用于校验 Java Bean 中的数据是否符合特定规格和约束条件。因为这个库使用了注解来定义验证规则,所以相对于手写代码来说,易读性更好,更加直观。 如何使用 Hi…

    Java 2023年5月20日
    00
  • Java 自定义动态数组方式

    Java中没有内置的动态数组类,需要我们自己实现。下面是Java自定义动态数组的完整攻略。 需求分析 我们需要实现一个具有动态扩容功能的数组。当数组空间不够时,需要动态扩充,保证数据能够正常存储。 实现步骤 定义一个数组类,包含数组容量大小、元素个数和数组本身三个属性。 java public class CustomArray<T> { pri…

    Java 2023年5月26日
    00
  • Spring JPA 错题集解决案例

    下面就是“Spring JPA 错题集解决案例”的完整攻略。 1. 配置JPA的数据源及持久化单元 首先,要在Spring配置文件中配置数据源及持久化单元。例如,在application.properties文件中添加如下配置: # 配置mysql的数据源 spring.datasource.driver-class-name=com.mysql.jdbc.…

    Java 2023年6月2日
    00
  • tomcat 启动时卡住问题排查及解决方法

    Tomcat 启动时卡住问题排查及解决方法 问题现象 在启动 Tomcat 时,控制台输出日志较少,没有显示任何正在启动的进程,且进程状态一直卡在某个进程上,无法启动成功。 问题原因 防火墙限制 在部分云服务器或者企业内部网络环境下,会有防火墙限制,导致 Tomcat 无法正常启动。可以通过关闭防火墙或者添加相应的端口规则来解决。 JVM 堆栈调整不合理 如…

    Java 2023年6月2日
    00
  • SpringBoot HikariCP连接池详解

    SpringBoot HikariCP连接池详解 本文介绍如何使用SpringBoot和HikariCP来管理MySQL数据库连接池。 什么是HikariCP? HikariCP是一个高效的、快速的、轻量级的JDBC连接池,取名自日本的“光之屋”。与其他连接池相比,它有更快的启动时间、更小的内存占用以及更高的性能。 SpringBoot集成HikariCP …

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部