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注解