当前位置: 首页 > news >正文

Java SpringMVC与MyBatis整合

在 Java Web 开发中,SpringMVC 和 MyBatis 是两个广受欢迎的框架。SpringMVC 作为 Spring 框架的一个模块,专注于 Web 层的开发;而 MyBatis 则是一个优秀的持久层框架,简化了数据库操作。将两者整合使用,可以充分发挥它们的优势,构建高效、可维护的 Web 应用。本文将通过一个简单的用户管理示例,详细讲解 SpringMVC 和 MyBatis 的整合过程。

一、项目结构搭建

首先,搭建一个基本的 Maven 项目结构:

src
├── main
│   ├── java
│   │   └── com.example
│   │       ├── controller
│   │       ├── service
│   │       ├── dao
│   │       └── model
│   ├── resources
│   │   ├── config
│   │   ├── mapper
│   │   └── static
│   └── webapp
│       ├── WEB-INF
│       │   ├── views
│       │   └── web.xml
│       └── index.jsp
└── test

二、添加依赖

pom.xml 文件中添加以下依赖:

<dependencies><!-- SpringMVC --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.23</version></dependency><!-- MyBatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.7</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.13</version></dependency><!-- 数据库驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.30</version></dependency><!-- 其他依赖 --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope></dependency><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency>
</dependencies>

三、配置文件

3.1 数据源配置(application.properties

# 数据库连接配置
spring.datasource.url=jdbc:mysql://localhost:3306/ssm_demo
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver# MyBatis 配置
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=com.example.model

3.2 Spring 配置(applicationContext.xml

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd"><!-- 扫描组件 --><context:component-scan base-package="com.example"/><!-- 配置数据源 --><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"><property name="driverClassName" value="${spring.datasource.driver-class-name}"/><property name="url" value="${spring.datasource.url}"/><property name="username" value="${spring.datasource.username}"/><property name="password" value="${spring.datasource.password}"/></bean><!-- 配置 MyBatis 工厂 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="mapperLocations" value="${mybatis.mapper-locations}"/><property name="typeAliasesPackage" value="${mybatis.type-aliases-package}"/></bean><!-- 配置 MyBatis 扫描器 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.example.dao"/><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/></bean><!-- 事务管理器 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean><!-- 启用注解事务 --><tx:annotation-driven transaction-manager="transactionManager"/>
</beans>

3.3 SpringMVC 配置(dispatcher-servlet.xml

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsd"><!-- 扫描控制器 --><context:component-scan base-package="com.example.controller"/><!-- 启用 MVC 注解驱动 --><mvc:annotation-driven/><!-- 配置视图解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/"/><property name="suffix" value=".jsp"/></bean>
</beans>

四、代码示例

4.1 实体类(User.java

package com.example.model;public class User {private Long id;private String name;private String email;// Getters and Setters
}

4.2 Mapper 接口(UserMapper.java

package com.example.dao;import com.example.model.User;
import org.apache.ibatis.annotations.Mapper;import java.util.List;@Mapper
public interface UserMapper {List<User> findAll();User findById(Long id);void insert(User user);void update(User user);void delete(Long id);
}

4.3 Mapper XML 文件(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.dao.UserMapper"><resultMap id="UserResultMap" type="User"><id property="id" column="id"/><result property="name" column="name"/><result property="email" column="email"/></resultMap><select id="findAll" resultMap="UserResultMap">SELECT * FROM user;</select><select id="findById" parameterType="long" resultMap="UserResultMap">SELECT * FROM user WHERE id = #{id};</select><insert id="insert" parameterType="User">INSERT INTO user (name, email) VALUES (#{name}, #{email});</insert><update id="update" parameterType="User">UPDATE user SET name = #{name}, email = #{email} WHERE id = #{id};</update><delete id="delete" parameterType="long">DELETE FROM user WHERE id = #{id};</delete>
</mapper>

4.4 Service 类(UserService.java

package com.example.service;import com.example.dao.UserMapper;
import com.example.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import java.util.List;@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public List<User> findAll() {return userMapper.findAll();}public User findById(Long id) {return userMapper.findById(id);}@Transactionalpublic void insert(User user) {userMapper.insert(user);}@Transactionalpublic void update(User user) {userMapper.update(user);}@Transactionalpublic void delete(Long id) {userMapper.delete(id);}
}

4.5 控制器(UserController.java

package com.example.controller;import com.example.model.User;
import com.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;import java.util.List;@Controller
@RequestMapping("/users")
public class UserController {@Autowiredprivate UserService userService;@GetMappingpublic String listUsers(Model model) {List<User> users = userService.findAll();model.addAttribute("users", users);return "users/list";}@GetMapping("/{id}")public String viewUser(@PathVariable Long id, Model model) {User user = userService.findById(id);model.addAttribute("user", user);return "users/view";}@GetMapping("/add")public String showAddUserForm(Model model) {model.addAttribute("user", new User());return "users/add";}@PostMappingpublic String addUser(@ModelAttribute User user) {userService.insert(user);return "redirect:/users";}@GetMapping("/edit/{id}")public String showEditUserForm(@PathVariable Long id, Model model) {User user = userService.findById(id);model.addAttribute("user", user);return "users/edit";}@PutMappingpublic String updateUser(@ModelAttribute User user) {userService.update(user);return "redirect:/users";}@DeleteMapping("/{id}")public String deleteUser(@PathVariable Long id) {userService.delete(id);return "redirect:/users";}
}

4.6 JSP 页面示例(list.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head><title>User List</title>
</head>
<body><h1>User List</h1><a href="${pageContext.request.contextPath}/users/add">Add New User</a><table border="1"><tr><th>ID</th><th>Name</th><th>Email</th><th>Actions</th></tr><c:forEach items="${users}" var="user"><tr><td>${user.id}</td><td>${user.name}</td><td>${user.email}</td><td><a href="${pageContext.request.contextPath}/users/${user.id}">View</a><a href="${pageContext.request.contextPath}/users/edit/${user.id}">Edit</a><a href="${pageContext.request.contextPath}/users/${user.id}/delete" onclick="return confirm('Are you sure?')">Delete</a></td></tr></c:forEach></table>
</body>
</html>

五、运行项目

完成上述配置和代码编写后,可以通过以下步骤运行项目:

  1. 配置好 Tomcat 服务器。
  2. 将项目部署到 Tomcat 服务器。
  3. 启动服务器并访问 http://localhost:8080/your-project-name/users

通过本文的介绍,你已经掌握了 SpringMVC 和 MyBatis 的整合方法。这种整合可以充分发挥两者的优点,帮助你构建高效、可维护的 Java Web 应用。希望本文能为你的开发工作提供有价值的参考。

相关文章:

  • Grafana v12.0 引入了多项新功能和改进
  • Docker 部署Nexus仓库 搭建Maven私服仓库 公司内部仓库
  • 软考第五章知识点总结
  • [Java实战]Spring Boot 整合 Freemarker (十一)
  • RAGMCP基本原理说明和相关问题解惑
  • 1.5 提示词工程(一)
  • USB学习【6】USB传输错误的处理
  • 基于去中心化与AI智能服务的web3钱包的应用开发的背景描述
  • 湖北理元理律师事务所债务优化体系拆解:科学规划如何实现“还款不降质”
  • [ERTS2012] 航天器星载软件形式化模型驱动研发 —— 对 Scade 语言本身的影响
  • 使用 Java 反射动态加载和操作类
  • 【前端】【HTML】【总复习】一万六千字详解HTML 知识体系
  • 事务(理解)与数据库连接池
  • 【AI论文】作为评判者的感知代理:评估大型语言模型中的高阶社会认知
  • 【Java学习笔记】instanceof操作符
  • Quantum convolutional nerual network
  • Web开发—Vue工程化
  • stm32实战项目:无刷驱动
  • 期刊 | 《电讯技术》
  • 信息安全管理与评估索引
  • 西王食品连亏三年:主业齐“崩”,研发人员多为专科生
  • 教育部:启动实施县中头雁教师岗位计划,支撑县中全面振兴
  • “应急侠”上线,应急管理部正式发布应急科普IP形象
  • 哈尔滨工业大学原副校长王魁业逝世,享年92岁
  • 巴基斯坦空袭印度多地空军基地,巴战机进入印领空
  • 第四轮伊美核谈判将于11日在阿曼举行