Mybatis 访问数据


你需要的

  • 大约 20 分钟

  • 一个喜欢的文本编辑器或 IDE

  • Java 17 或更高版本

  • Gradle 7.5+ 或 Maven 3.5+

使用 Spring Initializr 创建项目

你可以使用这个 预初始化的项目 ,并点击生成,下载一个 ZIP 文件。

如果你想要手动初始化项目:

点击 Spring Initializr

  1. 选择 Gradle 或 Maven 以及你想使用的语言。本指南假设你选择了 Java 。

  2. 点击 Dependencies,选择 Spring Web、MyBatis Framework 和 PostgreSQL Driver。

  3. 点击 “GENERATE”。

  4. 下载生成的 ZIP 文件,这是一个用你的选择配置的 Web 应用的压缩包。

Spring Boot 配置

在 /src/main/resources/application.properties 中,添加:

spring.datasource.url=jdbc:postgresql://localhost:5432/demo
spring.datasource.username=postgres
spring.datasource.password=123456
spring.datasource.driver-class-name=org.postgresql.Driver
mybatis.type-aliases-package=com.stdu.mybatis.model
mybatis.configuration.map-underscore-to-camel-case=true

SQL DDL

创建一个新的 users 表:

create table users (
  id serial primary key,
  first_name varchar(255) not null,
  last_name varchar(255) not null,
  description varchar(255)
);

Model 层

创建一个新的 Model 对象,如下所示(在 src/main/java/com/stdu/mybatis/model/User.java 中):

package com.stdu.mybatis.model;

import java.io.Serializable;

public class User implements Serializable {
    private Long id;
    private String firstName;
    private String lastName;
    private String description;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}

Mapper 层

创建一个新的 Mapper 接口,如下所示(在 src/main/java/com/stdu/mybatis/mapper/UserMapper.java 中):

package com.stdu.mybatis.mapper;

import com.stdu.mybatis.model.User;
import org.apache.ibatis.annotations.*;

import java.util.List;
import java.util.Optional;

@Mapper
public interface UserMapper {
    @Select("SELECT * FROM users")
    List<User> findAll();

    @Select("SELECT * FROM users WHERE id = #{id}")
    Optional<User> findById(Long id);

    @Insert("INSERT INTO users (first_name ,last_name, description) VALUES (#{firstName}, #{lastName}, #{description})")
    void save(User user);

    @Delete("DELETE FROM users WHERE id = #{id}")
    void deleteById(Long id);

    @Select("SELECT * FROM users WHERE first_name = #{name}")
    List<User> findByFirstName(String name);
}

Controller 层

创建一个新的 Controller 对象,如下所示(在 src/main/java/com/stdu/mybatis/controller/UserController.java 中):

package com.stdu.mybatis.controller;

import com.stdu.mybatis.mapper.UserMapper;
import com.stdu.mybatis.model.User;
import jakarta.annotation.Resource;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Optional;

@RestController
@CrossOrigin
@RequestMapping("/api/users")
public class UserController {
    @Resource
    UserMapper userMapper;

    @GetMapping
    public List<User> getAllUsers() {
        return userMapper.findAll();
    }

    @PostMapping
    public void addUser(@RequestBody User user) {
        userMapper.save(user);
    }

    @GetMapping("/{id}")
    public Optional<User> getUserById(@PathVariable Long id) {
        return userMapper.findById(id);
    }

    @PutMapping("/{id}")
    public void updateUser(@RequestBody User newUser, @PathVariable Long id) {
        userMapper.findById(id).map(user -> {
            user.setFirstName(newUser.getFirstName());
            user.setLastName(newUser.getLastName());
            user.setDescription(newUser.getDescription());
            userMapper.save(user);
            return user;
        }).orElseGet(() -> {
            newUser.setId(id);
            userMapper.save(newUser);
            return newUser;
        });
    }

    @DeleteMapping("/{id}")
    public void deleteUserById(@PathVariable Long id) {
        userMapper.deleteById(id);
    }

    @GetMapping("/search/findByFirstName")
    public List<User> findUsersByFirstName(@Param("name") String name) {
        return userMapper.findByFirstName(name);
    }
}

测试应用程序

打开浏览器,访问 localhost:8080/api/users

GET /users

[]

可以看到并没有数据,接下来使用 Axios 创建一个新的 User

let config = {
    baseURL: 'http://localhost:8080/api'
};
let data = {
    "firstName": "Xiaobang",
    "lastName": "Shi",
    "description": "Otaku"
};

下面的例子使用了一个 POST 调用:

POST /users

axios.post('/users', data, config).then(function (response) {
    console.log(response);
}).catch(function (error) {
    console.log(error);
});

访问 localhost:8080/api/users/1

GET /users/:id

{
    "firstName": "Xiaobang",
    "lastName": "Shi",
    "description": "Otaku"
}

下面的例子使用了一个 PUT 调用:

let data = {
    "firstName": "Jiaqi",
    "lastName": "Liu",
    "description": "HeroPoi"
}

PUT /users/:id

axios.put('users/1', data, config).then(function (response) {
    console.log(response);
}).catch(function (error) {
    console.log(error);
});

下面的例子使用了一个 DELETE 调用:

DELETE /users/:id

axios.delete('users/1', config).then(function (response) {
    console.log(response);
}).catch(function (error) {
    console.log(error);
});

总结

项目源码:Spring Boot Examples