springboot+springmvc+mybatis项目整合

一、概述

本文将简要讲解如何使用SpringBoot + SpringMVC + MyBatis这个组合来开发Web应用。这一组合是非常流行的,MyBatis负责ORM,SpringMVC负责MVC框架,SpringBoot则帮助我们快速搭建整个应用。

二、环境搭建

首先,我们需要在本地环境中安装JDK、Maven以及相应的IDE。为了便于快速上手,可以使用Spring官方提供的Spring Initializr来创建一个基础项目。

三、SpringBoot配置

在pom.xml中添加如下依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>1.3.2</version>
    </dependency>

    <!-- MySQL驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <!-- SpringBoot web 开发不可少 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>

</dependencies>

四、MyBatis配置

在SpringBoot中配置MyBatis比较简单,只需要在application.properties中设置数据源以及MyBatis相关的属性。示例代码如下:

# MyBatis 配置(在application.properties中配置)
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.config-location=classpath:mybatis-config.xml

# 数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/test_db?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=your-password
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.hikari.connection-timeout=60000
spring.datasource.hikari.maximum-pool-size=10

五、开发示例

以下是本文的开发示例。它包含两个示例:

  • 一个使用MyBatis进行数据持久化的示例;
  • 一个使用SpringMVC进行HTTP请求处理的示例。

示例1: 使用MyBatis进行数据持久化

我们以一个user表为例,该表包含id、name、age三个列。

首先,定义一个user类,代码如下:

public class User {
    private Long id;
    private String name;
    private int age;

    //getter/setter方法省略...
}

然后,我们在mapper目录下定义一个UserMapper.xml文件。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.example.springboot.mybatis.mapper.UserMapper">
    <select id="findAllUsers" resultType="com.example.springboot.mybatis.domain.User">
            SELECT * FROM user
    </select>
    <insert id="save" parameterType="com.example.springboot.mybatis.domain.User">
        INSERT INTO user(name, age) VALUES(#{name}, #{age})
    </insert>
</mapper>

其中,findAllUsers方法用于查询所有用户;save方法用于新增用户。

定义好了mapper后,接下来就是定义一个对应的mapper接口,代码如下:

public interface UserMapper {
    List<User> findAllUsers();
    int save(User user);
}

最后,在SpringBoot应用启动类中,增加一个MapperScan标注,声明MyBatis的Mapper扫描位置:

@SpringBootApplication
@MapperScan("com.example.springboot.mybatis.mapper")
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

至此,我们已经完成了使用MyBatis进行数据持久化的示例。

示例2:使用SpringMVC进行HTTP请求的处理

我们将使用Thymeleaf来实现一个简单的页面,然后使用SpringMVC来处理这个页面的POST请求,将提交的数据写入数据库中。

首先,定义一个UserForm类,表示在页面中提交的数据:

public class UserForm {
    private String name;
    private int age;

    //getter/setter方法省略...
}

然后,定义一个Controller类,处理请求并写入数据库:

@Controller
@RequestMapping("/users")
public class UserController {
    private final UserService userService;

    @Autowired
    public UserController(UserService userService)
    {
        this.userService = userService;
    }

    @GetMapping("/")
    public String index(Model model)
    {
        model.addAttribute("userForm", new UserForm());
        model.addAttribute("users", userService.findAllUsers());
        return "users/index";
    }

    @PostMapping("/")
    public String create(UserForm userForm)
    {
        User user = new User();
        user.setName(userForm.getName());
        user.setAge(userForm.getAge());

        userService.save(user);
        return "redirect:/users/";
    }
}

在上述代码中,我们使用@Autowired注解进行依赖注入,将UserService注入到了UserController中。同时,我们使用@GetMapping和@PostMapping来处理GET和POST请求,分别返回视图和重定向到Index视图。

最后,我们来定义这个视图,这里使用了Thymeleaf模板:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
  <head>
    <meta charset="utf-8" />
    <title>Users</title>
  </head>
  <body>
    <h1>Users</h1>
    <ul>
      <li th:each="user : ${users}">
        <span th:text="${user.name}" />:
        <span th:text="${user.age}" />
      </li>
    </ul>

    <hr />

    <h2>Add User</h2>

    <form th:action="@{/users/}" th:object="${userForm}" method="post">
      <p>
        <label>Name</label>
        <input type="text" th:field="*{name}" />
      </p>

      <p>
        <label>Age</label>
        <input type="text" th:field="*{age}" />
      </p>

      <div>
        <button type="submit">Save</button>
      </div>
    </form>

  </body>
</html>

以上就是使用SpringMVC进行HTTP请求处理的示例,我们通过Thymeleaf来生成页面,然后使用UserController来处理POST请求,将数据写入到数据库中。

六、小结

本文简要介绍了使用SpringBoot + SpringMVC + MyBatis这个组合开发Web应用的流程,同时提供了两个示例来帮助读者更好地理解。

建议读者多进行实践,掌握这个组合的使用方式。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot+springmvc+mybatis项目整合 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • Java实现n位数字的全排列

    当需要对n位数字进行全排列时,我们可以使用递归的方法,将这个问题分解成子问题。 具体的步骤如下: 首先定义一个长度为n的数组nums,用来存放数字1~n; 然后定义一个指针start,初始值为0,表示从数组的第一个元素开始进行排列; 定义一个递归函数permute,函数中传入nums数组、长度len、当前指针start,返回值为void; 在permute函…

    Java 2023年5月26日
    00
  • 解析Spring Mvc Long类型精度丢失问题

    引言 在Spring Mvc中,我们常常遇到处理Long类型数据的问题。但是在处理过程中,会发现有时候Long类型数据的精度会出现丢失的问题。本文将介绍如何解析Spring Mvc处理Long类型精度丢失问题,希望对大家有所帮助。 问题的根源 在Spring Mvc中,当处理Long类型数据时,会自动将字符串类型的参数转换为Long类型。但是在处理过程中,由…

    Java 2023年5月26日
    00
  • MyBatisPlus分页的同时指定排序规则说明

    在使用MyBatisPlus进行分页时,可以同时指定排序规则,以保证分页结果的正确性。下面详细讲解如何进行操作。 1.在Mapper接口中定义分页查询方法 首先在Mapper接口中定义分页查询方法,方法需要使用MyBatisPlus提供的IPage来进行分页操作,示例如下: public interface MyMapper extends BaseMapp…

    Java 2023年5月20日
    00
  • 详解Java中运算符及用法

    详解Java中运算符及用法 Java中运算符可以分为算术运算符、关系运算符、逻辑运算符、位运算符、三目运算符等类型。下面逐一介绍这些类型的运算符及其用法。 算术运算符 Java中的算术运算符包括加减乘除、取余等。 加减乘除运算符 运算符 描述 示例 + 加号:相加运算符 5+2=7 – 减号:相减运算符 5-2=3 * 乘号:相乘运算符 5*2=10 / 除…

    Java 2023年5月26日
    00
  • Spring项目里将SQL语句写在.sql文件中的方法

    在Spring项目中,将SQL语句写在.sql文件中可以提高代码可维护性、可重用性。具体步骤如下: 1. 创建.sql文件 在项目中创建一个新的.sql文件,例如:user.sql,并将SQL语句写入该文件中。例如,以下是创建一个名为user的表的示例SQL: CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_…

    Java 2023年5月20日
    00
  • 什么是Atomic类?

    Atomic类是Java提供的线程安全的、并发编程中常用的一种原子性操作的基础类。在Java中,对于一些基本数据类型,例如int、long、boolean等,线程之间的并发读、写操作是非常常见的,而这些基本类型的操作在Java的多线程环境下需要保证原子性,即要么是全部执行成功,要么全部执行失败,简单地说就是不能因为线程切换而导致数据不一致。如果在并发执行多个…

    Java 2023年5月10日
    00
  • 深入浅出解析Java ThreadLocal原理

    深入浅出解析Java ThreadLocal原理 什么是ThreadLocal Java线程中的一个变量,用于在各个线程之间独立存储数据 可以理解为每个线程拥有一个独立的变量副本,不受其他线程的影响 ThreadLocal的使用方法 ThreadLocal是一个泛型类,可以通过创建ThreadLocal对象,并通过get和set方法操作对应的变量副本 示例代…

    Java 2023年5月27日
    00
  • 学习Java之如何正确地跳出循环结构

    学习Java,循环结构是非常重要的知识点。而在使用循环的过程中,我们有时候需要跳出循环,以停止或跳过一些迭代,这时候就需要使用跳出循环的语句。本文将详细讲解如何正确地跳出循环结构。 标准循环结构 Java 中常见的循环结构包括 for、while 和 do-while 循环结构。它们的语法分别为: for (初始化; 布尔表达式; 更新) { // 代码块 …

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