一、前言
在我们日常的Web应用开发中,数据库的操作不可避免。而SpringBoot做为一款快速开发的框架,有着优秀的集成能力,可以快速集成其他框架。MyBatis是一个优秀的ORM框架,可以大大的简化我们的数据库操作。我们使用SpringBoot集成Mybatis可以让我们实现高效的MySQL增删改查的操作,大大提高开发效率。
二、SpringBoot整合MyBatis
1.引入依赖
我们主要引入Mybatis依赖和MySQL依赖。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.28</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.31</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
2.application.properties配置
#数据库配置信息
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.url=jdbc:mysql://localhost:3306/mydb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8
3.创建数据表
CREATE TABLE t_user (
id BIGINT not null auto_increment,
name VARCHAR (255),
age int,
PRIMARY key (id))ENGINE=INNODB DEFAULT CHARSET=utf8
4.创建实体类
package com.example.bootdemo.entity;
import lombok.Data;
/**
* @author qx
* @date 2023/12/02
* @desc 用户实体类
*/
@Data
public class User {
private Long id;
private String name;
private Integer age;
}
5.创建Mapper持久层接口
package com.example.bootdemo.mapper;
import com.example.bootdemo.entity.User;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface UserMapper {
@Select("select * from t_user where id=#{id}")
User selectById(Long id);
@Update("update t_user set name=#{name},age=#{age} where id=#{id}")
void update(User user);
@Insert("insert into t_user(name,age) values(#{name},#{age})")
void insert(User user);
@Delete("delete from t_user where id=#{id}")
void delete(Long id);
}
6.单元测试
package com.example.bootdemo;
import com.example.bootdemo.entity.User;
import com.example.bootdemo.mapper.UserMapper;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@Slf4j
@SpringBootTest
class BootDemoApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
void testAdd() {
// 测试新增
User user = new User();
user.setName("admin");
user.setAge(20);
userMapper.insert(user);
}
@Test
void testSelect() {
// 测试查询
User user = userMapper.selectById(1L);
log.info("user={}", user);
}
@Test
void testUpdate() {
// 测试修改
User user = new User();
user.setName("admin1");
user.setAge(20);
user.setId(1L);
userMapper.update(user);
}
@Test
void testDelete() {
// 测试删除
userMapper.delete(1L);
}
}
我们先测试新增,执行测试方法后,我们查看数据表的数据是否新增成功了。
接下来我们再执行查询的方法testSelect。我们发现这控制台上打印了查询到的数据。
2023-12-02 23:11:25.257 INFO 8436 --- [ main] c.e.bootdemo.BootDemoApplicationTests : user=User(id=1, name=admin, age=20)
然后我们再执行修改方法testUpdate。执行方法后再刷新数据表,发现修改数据也成功了。
最后我们执行删除的方法testDelete。执行方法之后发现ID为1的数据已经被删除成功了。
三、MyBatis注解说明
1.参数注解@Param
我们可以使用这个注解来指定参数的名称。
@Select("select * from t_user where id=#{id}")
User selectById(@Param("id") Long id);
比如上面的@Param中的参数id就对应数据查询语句中的参数名称id。这两个数据是需要一致的。
2.参数使用对象
@Insert("insert into t_user(name,age) values(#{name},#{age})")
void insert(User user);
我们可以直接使用对象来做为参数使用,这样就可以直接使用对象中的属性做为参数名称。
3.参数使用Map
参数使用Map需要Map中的key和数据查询语句中的参数名称一样。
@Insert("insert into t_user(name,age) values(#{name},#{age})")
void add(Map<String,Object> map);
测试代码如下所示:
@Test
void testAdd(){
Map<String,Object> map = new HashMap<>();
map.put("name","hello");
map.put("age",20);
userMapper.add(map);
}
我们执行测试方法后,一样可以成功新增数据。