Mybatis 访问数据
你需要的
-
大约 20 分钟
-
一个喜欢的文本编辑器或 IDE
-
Java 17 或更高版本
-
Gradle 7.5+ 或 Maven 3.5+
使用 Spring Initializr 创建项目
你可以使用这个 预初始化的项目 ,并点击生成,下载一个 ZIP 文件。
如果你想要手动初始化项目:
-
选择 Gradle 或 Maven 以及你想使用的语言。本指南假设你选择了 Java 。
-
点击 Dependencies,选择 Spring Web、MyBatis Framework 和 PostgreSQL Driver。
-
点击 “GENERATE”。
-
下载生成的 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);
});
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