Spring Boot与数据访问四--整合MyBatis(注解版)

      Spring Boot与数据访问一–Spring Data介绍
      Spring Boot与数据访问二–使用原生JDBC及源码解析
      Spring Boot与数据访问三–整合Druid
      Spring Boot与数据访问四–整合MyBatis(注解版)
      Spring Boot与数据访问五–整合MyBatis(配置版)
      Spring Boot与数据访问六–整合JPA
 

一、引入MyBatis

可以在一开始创建项目的时候就勾选MyBatis模块
在这里插入图片描述
也可以直接在pom.xml文件中添加配置

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.4</version>
        </dependency>

注:引入的MyBatis的starter不是Spring官方出的,官方出的都叫spring-boot-starter-xxx,这个是MyBatis自己来适配Spring出的starter。

用图表的方式来看下这个starter引入了哪些依赖(在pom.xml文件中右击鼠标):
在这里插入图片描述
Ctrl+鼠标滚轮可以放大缩小图表
在这里插入图片描述
在这里插入图片描述

二、注解版MyBatis

创建Javabean封装表的数据

package com.huiq.springboot.entity;

import java.io.Serializable;

public class User implements Serializable {
    private Integer id;
    private String name;
    private String password;

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

写一个mapper

package com.huiq.springboot.mapper;

import com.huiq.springboot.entity.User;
import org.apache.ibatis.annotations.*;

// 指定这是一个操作数据库的mapper
@Mapper
public interface UserMapper {

    @Select("select * from tbl_user where id=#{id}")
    public User getUserId(Integer id);

    @Delete("delete from tbl_user where id=#{id}")
    public int deleteUserById(Integer id);

    @Insert("insert into tbl_user(name) values(#{name})")
    public int insertUser(User user);

    @Update("update tbl_user set name=#{name} where id=#{id}")
    public int updateUser(User user);
}

用controller测试一下

package com.huiq.springboot.controller;

import com.huiq.springboot.entity.User;
import com.huiq.springboot.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @Autowired
    UserMapper userMapper;

    @GetMapping("/user/{id}")
    public User getUser(@PathVariable("id") Integer id) {
        return userMapper.getUserId(id);
    }

    @GetMapping("/user")
    public User insertUser(User user) {
        userMapper.insertUser(user);
        return user;
    }
}

将id字段设置成自增
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
原理:因为这些配置都是已经给我们自动配好的,按两下Shift键搜索“MybatisAutoConfiguration”,这个配置给我们在容器中配好了SqlSessionFactory,包括SqlSessionFactory要用的各种属性都从这个properties里获取,这个MybatisProperties还有个前缀“mybatis”,如果我们想要配置还可以配置这个,但是现在注解版什么都不用配置。
在这里插入图片描述

1、获取自增id

当我们插入的时候返回的user的id为null,如果我们想要获取到自增id,可以添加如下配置
在这里插入图片描述
在这里插入图片描述

2、自定义MyBatis的相关规则

我们把一个字段改成驼峰命名法
在这里插入图片描述
相应内容也改一下
在这里插入图片描述
重启程序我们执行查询测试一下可以看到name是封装不上的
在这里插入图片描述
以前有配置文件我们可以开启驼峰命名法,那如果没有配置文件我们也可以这么做,我们看MyBatis的自动配置,在自动配置中给我们容器创建SqlSessionFactory的时候,有一个相关的配置configuration,里面还有一个来帮我们定制的ConfigurationCustomizer
在这里插入图片描述
在这里插入图片描述
我们想要改MyBatis的相关规则,在不写配置文件的情况下可以创建这样的一个文件

package com.huiq.springboot.config;

import org.apache.ibatis.session.Configuration;
import org.mybatis.spring.boot.autoconfigure.ConfigurationCustomizer;
import org.springframework.context.annotation.Bean;

// 这里引入的是全类名,因为org.apache.ibatis.session.Configuration已经被导入了,不全类名的冲突
@org.springframework.context.annotation.Configuration
public class MyBatisConfig {

    @Bean
    public ConfigurationCustomizer configurationCustomizer() {
        return new ConfigurationCustomizer() {

            @Override
            public void customize(Configuration configuration) {
                configuration.setMapUnderscoreToCamelCase(true);
            }
        };
    }
}

重启程序看可以生效了
在这里插入图片描述

3、批量扫描Mapper文件

在Mapper文件上如果不加@Mapper注解的话会有问题,MyBatis就无法工作了
在这里插入图片描述
如果Mapper文件非常多,我们给每个文件都加@Mapper注解会很麻烦,如果不想加我们也可以这样干,在启动类中添加@MapperScan注解
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_37739193/article/details/114135084
今日推荐