博主介绍:Java、Python、js全栈开发 “多面手”,精通多种编程语言和技术,痴迷于人工智能领域。秉持着对技术的热爱与执着,持续探索创新,愿在此分享交流和学习,与大家共进步。
全栈开发环境搭建运行攻略:多语言一站式指南(环境搭建+运行+调试+发布+保姆级详解)
感兴趣的可以先收藏起来,希望帮助更多的人
在企业级应用开发中,数据访问层是至关重要的一环。它负责与数据库进行交互,为业务逻辑层提供数据支持。Spring Boot 作为一款快速开发框架,极大地简化了 Spring 应用的搭建过程;而 MyBatis 则是一款优秀的持久层框架,它提供了灵活的 SQL 映射机制,使得开发者可以更方便地操作数据库。本文将详细介绍如何将 Spring Boot 和 MyBatis 进行整合,为企业级数据访问层提供最佳实践。
确保你的系统已经安装了 JDK 8 或更高版本。你可以通过以下命令检查 JDK 版本:
java -version
如果未安装,你可以从 Oracle 官方网站或 OpenJDK 官方网站下载并安装适合你系统的 JDK 版本。
Maven 是一个项目管理和构建工具,用于管理项目的依赖和构建过程。你可以从 Maven 官方网站下载并安装 Maven,安装完成后,配置好环境变量。可以通过以下命令检查 Maven 版本:
mvn -version
本文以 MySQL 数据库为例,你需要安装 MySQL 数据库,并创建一个新的数据库。例如,创建一个名为 test_db
的数据库:
CREATE DATABASE test_db;
访问 Spring Initializr,按照以下步骤进行配置:
Maven Project
。Java
。com.example
。springboot-mybatis-demo
。点击 Generate
按钮下载项目压缩包,解压后导入到你喜欢的 IDE 中,如 IntelliJ IDEA 或 Eclipse。
导入项目后,项目的主要结构如下:
springboot-mybatis-demo
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── example
│ │ │ └── springbootmybatisdemo
│ │ │ ├── SpringbootMybatisDemoApplication.java
│ │ │ ├── controller
│ │ │ ├── dao
│ │ │ ├── entity
│ │ │ └── service
│ │ └── resources
│ │ ├── application.properties
│ │ └── mapper
│ └── test
│ └── java
│ └── com
│ └── example
│ └── springbootmybatisdemo
│ └── SpringbootMybatisDemoApplicationTests.java
└── pom.xml
SpringbootMybatisDemoApplication.java
:项目的启动类。controller
包:用于存放控制器类,处理 HTTP 请求。dao
包:用于存放数据访问对象(DAO)接口。entity
包:用于存放实体类,对应数据库表。service
包:用于存放业务逻辑类。application.properties
:项目的配置文件。mapper
目录:用于存放 MyBatis 的 SQL 映射文件。pom.xml
:Maven 项目的配置文件,用于管理项目的依赖。在 src/main/resources/application.properties
文件中添加以下数据库连接配置:
spring.datasource.url=jdbc:mysql://localhost:3306/test_db?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=your_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
请将 your_password
替换为你自己的 MySQL 数据库密码。
在 application.properties
文件中添加 MyBatis 的配置:
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=com.example.springbootmybatisdemo.entity
mybatis.mapper-locations
:指定 MyBatis 的 SQL 映射文件的位置。mybatis.type-aliases-package
:指定实体类所在的包,这样在 SQL 映射文件中可以直接使用实体类名,而不需要使用全限定名。在 SpringbootMybatisDemoApplication.java
类上添加 @MapperScan
注解,指定 DAO 接口所在的包:
package com.example.springbootmybatisdemo;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.example.springbootmybatisdemo.dao")
public class SpringbootMybatisDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootMybatisDemoApplication.class, args);
}
}
在 com.example.springbootmybatisdemo.entity
包下创建一个实体类,例如 User.java
:
package com.example.springbootmybatisdemo.entity;
public class User {
private Integer id;
private String name;
private Integer age;
// 构造方法、Getter 和 Setter 方法
public User() {}
public User(Integer id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
在 com.example.springbootmybatisdemo.dao
包下创建一个 DAO 接口,例如 UserDao.java
:
package com.example.springbootmybatisdemo.dao;
import com.example.springbootmybatisdemo.entity.User;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface UserDao {
List<User> getAllUsers();
User getUserById(Integer id);
int insertUser(User user);
int updateUser(User user);
int deleteUser(Integer id);
}
@Mapper
注解用于告诉 MyBatis 这是一个数据访问接口。
在 src/main/resources/mapper
目录下创建一个 UserMapper.xml
文件,编写 SQL 语句:
DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.springbootmybatisdemo.dao.UserDao">
<select id="getAllUsers" resultType="User">
SELECT * FROM user
select>
<select id="getUserById" parameterType="int" resultType="User">
SELECT * FROM user WHERE id = #{id}
select>
<insert id="insertUser" parameterType="User">
INSERT INTO user (name, age) VALUES (#{name}, #{age})
insert>
<update id="updateUser" parameterType="User">
UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}
update>
<delete id="deleteUser" parameterType="int">
DELETE FROM user WHERE id = #{id}
delete>
mapper>
namespace
:指定对应的 DAO 接口的全限定名。select
、insert
、update
、delete
标签分别用于定义查询、插入、更新和删除操作。resultType
:指定查询结果的类型,这里使用实体类名。parameterType
:指定传入参数的类型。在 com.example.springbootmybatisdemo.service
包下创建一个服务类,例如 UserService.java
:
package com.example.springbootmybatisdemo.service;
import com.example.springbootmybatisdemo.dao.UserDao;
import com.example.springbootmybatisdemo.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
@Autowired
private UserDao userDao;
public List<User> getAllUsers() {
return userDao.getAllUsers();
}
public User getUserById(Integer id) {
return userDao.getUserById(id);
}
public int insertUser(User user) {
return userDao.insertUser(user);
}
public int updateUser(User user) {
return userDao.updateUser(user);
}
public int deleteUser(Integer id) {
return userDao.deleteUser(id);
}
}
@Service
注解用于将该类标记为服务层组件。
在 com.example.springbootmybatisdemo.controller
包下创建一个控制器类,例如 UserController.java
:
package com.example.springbootmybatisdemo.controller;
import com.example.springbootmybatisdemo.entity.User;
import com.example.springbootmybatisdemo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping
public List<User> getAllUsers() {
return userService.getAllUsers();
}
@GetMapping("/{id}")
public User getUserById(@PathVariable Integer id) {
return userService.getUserById(id);
}
@PostMapping
public int insertUser(@RequestBody User user) {
return userService.insertUser(user);
}
@PutMapping
public int updateUser(@RequestBody User user) {
return userService.updateUser(user);
}
@DeleteMapping("/{id}")
public int deleteUser(@PathVariable Integer id) {
return userService.deleteUser(id);
}
}
@RestController
注解用于将该类标记为 RESTful 风格的控制器,@RequestMapping
注解用于指定请求的路径。
在 IDE 中运行 SpringbootMybatisDemoApplication.java
类的 main
方法,启动 Spring Boot 项目。
http://localhost:8080/users
。http://localhost:8080/users/1
,其中 1
为用户的 ID。http://localhost:8080/users
,请求体为 JSON 格式,例如:{
"name": "John",
"age": 25
}
http://localhost:8080/users
,请求体为 JSON 格式,例如:{
"id": 1,
"name": "Tom",
"age": 30
}
http://localhost:8080/users/1
,其中 1
为用户的 ID。通过以上步骤,我们成功地将 Spring Boot 和 MyBatis 进行了整合,实现了一个简单的企业级数据访问层。在实际开发中,我们可以根据业务需求进一步扩展和优化代码,例如添加事务管理、分页查询等功能。