目录

SpringBoot整合Mybatis并实现数据库增删改查

SpringBoot整合Mybatis并实现数据库增删改查

写在前面

Mybatis一个基于Java的持久层框架,它通过XML或注解的方式,将SQL语句和Java方法进行映射,使得开发者可以轻松地进行数据库操作。下面我会演示mybatis的配置与使用并实现数据库的增删改查。

1.准备测试数据

使用mybatis实现对数据库的增删改查之前,我们先创建一个数据库,,然后在数据库中新建一张表。我准备的数据(person表)如下(SQL Server):

https://i-blog.csdnimg.cn/blog_migrate/4a24e39961cf6b51c4327bc236e6ea7f.png

2.创建SpringBoot项目

使用IDEA新建一个springboot项目:

https://i-blog.csdnimg.cn/blog_migrate/d5a323185014ce3bb8f0f48ae091d05c.png

在创建项目时导入依赖,也可以在项目创建后手动导入:

https://i-blog.csdnimg.cn/blog_migrate/71e57c602bd83a051dd4a8aebe41e2e2.png

3.导入mybatis依赖

如果在创建项目时已导入依赖可以跳过这一步。

pom.xml 文件中导入mybatis依赖:

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter-test</artifactId>
    <version>3.0.3</version>
    <scope>test</scope>
</dependency>

导入 sql server 的依赖:

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <scope>runtime</scope>
</dependency>

如果想要使用其他版本的mybatis依赖,请前往 https://mvnrepository.com/

4.如何使用mybatis

4.1 配置mybatis

4.1.1 配置数据源

application.properties 中配置数据库:

spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.url=jdbc:sqlserver://localhost:1433;database=数据库名称
spring.datasource.username=sa
spring.security.user.password=123456

也可以在 application.yamlapplication.yml 文件中配置数据库:

spring:
  datasource:
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
    url: jdbc:sqlserver://localhost:1433;database=数据库名称
    username: sa
    password: 123456

4.1.2 相关配置

#配置映射文件路径(使用xml配置文件映射SQL语句时设置),此处的mapper是自己在resources目录下创建的子目录
mybatis.mapper-locations=classpath:/mapper/*.xml

4,2 使用mybatis

4.2.1 创建实体类(entity)

在启动类的所在目录下创建实体类:

https://i-blog.csdnimg.cn/blog_migrate/4734ed1b2646170ef7b5945947a5902f.png

Person 类中:

@Data
public class Person {
    //Person类中的字段要与数据库对应
    private int id;
    private String name;
    private int age;
    private String gender;
}

4.2.2 创建mapper

在启动类的所在目录下创建mapper:

https://i-blog.csdnimg.cn/blog_migrate/63f370f9afa84705f9065e92817df305.png

创建 PersonMapper 对应的 xml 文件,使用 MybatisX 插件创建xml文件,这个插件可以在idea的 plugins 中下载。

PersonMapper 文件中将光标放在接口名上按下 alt + enter 后选择 [MybatisX] Generate mapper of xml 后如下图选择路径:

https://i-blog.csdnimg.cn/blog_migrate/fd3d9f0962553daff2019f1167eb643f.png

PersonMapper.xml 中情况:

https://i-blog.csdnimg.cn/blog_migrate/f85952f324b1348042c3eed384f2acab.png

4.2.3 定义查询方法并编写SQL语句

PersonMapper 中定义查询所有Person信息的方法:

https://i-blog.csdnimg.cn/blog_migrate/ec05435e6171d145d6f5adf546b42b89.png

① xml形式

在方法名处按下 alt + enter 后选择 Generate statement ,在xml文件中自动生成对应的映射语句:

https://i-blog.csdnimg.cn/blog_migrate/fca2318e92b9fefe96d68611b0d9ebd8.png

<select> 标签中编写SQL语句:

select * from person
② 注解形式

直接在方法的上面使用 @Select 注解:

@Select("select * from person")

4.2.4 创建controller并调用mapper

在启动类的所在目录下创建controller:

https://i-blog.csdnimg.cn/blog_migrate/fd6295477c727d1c79fb0655f474c2b1.png

PersonController 中:

@RestController
public class PersonController {
    @Autowired
    PersonMapper personMapper;
    
    @GetMapping("/allPerson")
    public List<Person> getAllPerson() {
        return personMapper.getAllPerson();
    }
}

4.2.5 在启动类中添加@MapperScan注解

在启动类添加@MapperScan注解可以使容器扫描到mapper:

@MapperScan(basePackages = "com.example.demo.mapper")

4.2.5 启动项目并使用controller

结果如下:

https://i-blog.csdnimg.cn/blog_migrate/dee5fd76d9857045045a522f8694b097.png

5.实现数据库的增删改查

5.1 查询

上面演示了获取全部person数据,这里举例 通过id查询数据 ,我们可以模仿这个例子实现其他方式的查询。

定义查询方法并编写SQL语句

//使用@Param("id")接收前端传来的参数
@Select("select * from person where id = #{id}")
Person getPersonById(@Param("id") int id);

调用:

@GetMapping("/byId/{id}")
    public Person getPersonById(@PathVariable("id") int id) {
        return personMapper.getPersonById(id);
    }

结果:

https://i-blog.csdnimg.cn/blog_migrate/0db86152504e4e8814613ddf269039f9.png

5.2 新增

定义新增方法并编写SQL语句:

//由于id设置了自增,所以这里不需要传入id
@Insert("insert into person values (#{name},#{age},#{gender})")
void addPerson(Person person);

调用:

@GetMapping("/add")
    public void addPerson(@RequestParam("name") String name, 
                          @RequestParam("age") int age,
                          @RequestParam("gender") String gender) {
        Person person = new Person();
        person.setName(name);
        person.setAge(age);
        person.setGender(gender);
        personMapper.addPerson(person);
    }

使用:

https://i-blog.csdnimg.cn/blog_migrate/b82335723a87dd66de4eb76994fbce14.png

查询所有person:

https://i-blog.csdnimg.cn/blog_migrate/3a9a05cb4077a0e6d69c5c28b20f12be.png

5.3 修改

这里我通过id修改person的信息,我们可以模仿这个例子通过名字来修改person信息,也可以修改person一个或多个字段信息。

定义修改方法并编写SQL语句:

//通过id修改person信息
@Update("update person set name = #{name}, age = #{age}, gender = #{gender} where id = #{id}")
void updatePerson(Person person);

调用:

@GetMapping("/update")
    void updatePerson(@RequestParam("id") int id,
                      @RequestParam("name") String name,
                      @RequestParam("age") int age,
                      @RequestParam("gender") String gender) {
        Person person = new Person();
        person.setId(id);
        person.setName(name);
        person.setAge(age);
        person.setGender(gender);
        personMapper.updatePerson(person);
    } 

使用:

https://i-blog.csdnimg.cn/blog_migrate/a23da2590e97d4c2559818cfc065a21c.png

修改前:

https://i-blog.csdnimg.cn/blog_migrate/019f77b98c72db52b6f8ba354f528b15.png

修改后:

https://i-blog.csdnimg.cn/blog_migrate/e0e88702a7d90306207d758a6fe20d9c.png

5.4 删除

这里我通过姓名删除person信息,我们也可以通过其他字段删除person信息

定义删除方法并编写SQL语句:

@Delete("delete from person where name = #{name}")
void deletePersonByName(@Param("name") String name);

调用:

@GetMapping("/del")
    void deletePerson(@RequestParam("name") String name) {
        personMapper.deletePersonByName(name);
    }

使用:

https://i-blog.csdnimg.cn/blog_migrate/bd1d17f5bd88381525b89286beef5cf0.png

删除前:

https://i-blog.csdnimg.cn/blog_migrate/358c1ad9ffbc92eb6806caefd15e1be3.png

删除后:

https://i-blog.csdnimg.cn/blog_migrate/7f9160f546b94a742bd7082cad7ff302.png

写在后面

通过springboot整合mybatis,我们不仅可以进行简单的增删改查操作,还可以进行一些更高级的信息查询操作。通过接收前端传回来的信息对数据库进行相应的操作,可以让我们查询数据库更加方便快捷。