SpringBoot 中的 MyBatis
1. 整合 MyBatis#
在 Maven Repository 下查询 Mysql 和 MyBatis 对应的 SpringBoot 版本。
在 SpringBoot 项目下的 pom.xml
文件下添加依赖。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.connector.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.version}</version>
</dependency>
2. 设置 MyBatis#
在 application.properties
文件中配置 MyBatiste,具体配置项查看 MyBatis 官方文档。
#mysql
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/laravel_test?useUnicode=true&characterEncoding=UTF-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#mybatis
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=com.example.mybatis.po
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.cache-enabled=false
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
3. 准备工作#
在项目下创建 com.example.mybatis.po
、com.example.mybatis.dao
、com.example.mybatis.controller
包(因为只是为了演示 MyBatis 功能,所以简化项目结果没有创建 service
包),在 resource 目录下创建 mapper
文件夹,项目目录如下:
3.1. 数据库表结果#
CREATE TABLE `users` (
`id` INT UNSIGNED NOT NULL PRIMARY KEY auto_increment,
`name` VARCHAR ( 12 ) NOT NULL,
`password` VARCHAR ( 80 ) NOT NULL,
`last_token` text,
`status` TINYINT NULL DEFAULT 0,
`created_at` TIMESTAMP NULL DEFAULT NULL,
`updated_at` TIMESTAMP NULL DEFAULT NULL
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci;
3.2. 准备 Po#
package com.example.mybatis.po;
import java.io.Serializable;
import java.util.Date;
public class UserPo implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private String name;
private String password;
private String lastToken;
private Byte status;
private Long createdAt;
private Long updatedAt;
......
}
3.3. 准备 Dao#
package com.example.mybatis.dao;
import com.example.mybatis.po.UserPo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface UserDao {
......
}
3.4. 准备 Mapper 映射文件#
<?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.mybatis.dao.UserDao">
......
</mapper>
3.5. 准备 Controller#
package com.example.mybatis.controller;
import com.example.mybatis.dao.UserDao;
import com.example.mybatis.po.UserPo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserDao userDao;
......
}
4. 使用 MyBatiste#
4.1. 查询#
在 UserDao
文件中创建 selectUserById
接口方法(注意方法名命名规则)。
UserPo selectUserById(@Param("id") Long id);
在 resource
->mapper
->UserDao.xml
文件夹下,创建映射语句。
<select id="selectUserById" resultType="com.example.mybatis.po.UserPo">
SELECT
*
FROM USERS
WHERE id = #{id}
</select>
在 UserController
文件中创建根据 ID 查询用户接口 getUser
。
@GetMapping("")
public UserPo getUser(@RequestParam("id") Long id){
return userDao.selectUserById(id);
}
Postman 调用
4.2. 插入#
在 UserDao
文件中创建 insertUser
接口方法(注意方法名命名规则)。
void insertUser(@Param("userPo") UserPo userPo);
在 resource
->mapper
->UserDao.xml
文件夹下,创建映射语句。
<insert id="insertUser" parameterType="com.example.mybatis.po.UserPo">
INSERT INTO USERS (name, password, last_token, status, created_at, updated_at)
VALUES (#{userPo.name}, #{userPo.password}, #{userPo.lastToken}, #{userPo.status}, #{userPo.createdAt}, #{userPo.updatedAt})
</insert>
在 UserController
文件中创建根据 ID 查询用户接口 addUser
。
@PostMapping("/add")
public String addUser(
@RequestParam("name") String name,
@RequestParam("password") String password){
Long crtTime = System.currentTimeMillis();
UserPo userPo = new UserPo();
userPo.setName(name);
userPo.setPassword(password);
userPo.setCreatedAt(crtTime);
userPo.setUpdatedAt(crtTime);
userDao.insertUser(userPo);
return "插入成功";
}
Postman 调用
4.3. 更新#
在 UserDao
文件中创建 updateUser
接口方法(注意方法名命名规则)。
void insertUser(@Param("userPo") UserPo userPo);
在 resource
->mapper
->UserDao.xml
文件夹下,创建映射语句。
<insert id="insertUser" parameterType="com.example.mybatis.po.UserPo">
INSERT INTO USERS (name, password, last_token, status, created_at, updated_at)
VALUES (#{userPo.name}, #{userPo.password}, #{userPo.lastToken}, #{userPo.status}, #{userPo.createdAt}, #{userPo.updatedAt})
</insert>
在 UserController
文件中创建根据 ID 查询用户接口 updateUser
。
@PostMapping("/add")
public String addUser(
@RequestParam("name") String name,
@RequestParam("password") String password){
Long crtTime = System.currentTimeMillis();
UserPo userPo = new UserPo();
userPo.setName(name);
userPo.setPassword(password);
userPo.setCreatedAt(crtTime);
userPo.setUpdatedAt(crtTime);
userDao.insertUser(userPo);
return "插入成功";
}
Postman 调用
4.4. 删除#
在 UserDao
文件中创建 deleteUser
接口方法(注意方法名命名规则)。
void deleteUser(@Param("id") Long id);
在 resource
->mapper
->UserDao.xml
文件夹下,创建映射语句。
<delete id="deleteUser">
DELETE FROM USERS WHERE id = #{id}
</delete>
在 UserController
文件中创建根据 ID 查询用户接口 deleteUser
。
@PostMapping("/delete")
public String deleteUser(@RequestParam("id") Long id){
UserPo userPo = userDao.selectUserById(id);
if(userPo == null){
return "该用户不存在";
}
userDao.deleteUser(id);
return "删除成功";
}
Postman 调用
本作品采用《CC 协议》,转载必须注明作者和本文链接
mapper 使用 xml 文件和 java 类的区别是什么?我刚接触这个。。别人视频是写的 java 类来实现 mapper 的
再添加一个 Service 层就好了
dao 层每个 mapper 可以不加 @Mapper 注解,直接在启动器类里面加 @MapperScan ("mapper 所在包")
刚接触,挺有用~