文章只是演示如何集成 mybatis,并非 plus,而且只是集成,类似一个 demo,所以文章只适用于初学 mybatis 的同学
前言
文章内部已经处理了部分的依赖冲突,并且类似于纯净版本,大家可以直接把项目拉取下来作为自己的 base 去用
一、依赖
在 springboot 3 的环境下,关于 mybatis 只需要添加两个关键依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.2</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>3.0.2</version>
</dependency>
如果大家只是跟着文章学习如何将项目从 0 去集成 mybatis,还需要将添加 mysql 的依赖
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.33</version>
</dependency>
这里需要注意,如果 spring-boot-starter-parent 的版本是 3.2.x,建议改成 3.1.x,否则会与 mybatis-spring-boot-starter 发生冲突。
二、配置
1.yml配置
spring:
datasource:
#数据库配置
url: jdbc:mysql://localhost:3306/mybatis?useSSL=false&allowPublicKeyRetrieval=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
# xml文件位置
mapper-locations: classpath:mapper/*.xml
# 实体类别名包扫描
type-aliases-package: com.demo.mybatis.entity
# 配置文件位置
config_location: classpath:mybatis-config.xml
数据库的配置需要大家根据自己的数据去修改,千万别直接复制使用哈,mybatis 部分的配置如果大家是使用我项目结构的话是 ok 的,但是如果自己创建的项目的话,那也需要根据自己的项目去做适当的修改,可以参考我的文件结构,这里就不解释为什么了
2.配置文件 mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
<!-- 如果数据为空的字段,默认该字段省略不显示,设置后查询数据为空是则返回null -->
<setting name="callSettersOnNulls" value="true"/>
<!-- 这个配置使全局的映射器启用或禁用缓存。系统默认值是true -->
<setting name="cacheEnabled" value="false"/>
<!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载。 系统默认值是true -->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- 允许或不允许多种结果集从一个单独的语句中返回(需要适合的驱动)。 系统默认值是true -->
<setting name="multipleResultSetsEnabled" value="true"/>
<!--使用列标签代替列名。不同的驱动在这方便表现不同。参考驱动文档或充分测试两种方法来决定所使用的驱动。 系统默认值是true -->
<setting name="useColumnLabel" value="true"/>
<!--配置默认的执行器。SIMPLE 执行器没有什么特别之处。REUSE 执行器重用预处理语句。BATCH 执行器重用语句和批量更新 系统默认值是SIMPLE -->
<setting name="defaultExecutorType" value="REUSE"/>
<!--设置超时时间,它决定驱动等待一个数据库响应的时间。 系统默认值是null -->
<setting name="defaultStatementTimeout" value="180"/>
<!-- 设置关联对象加载的形态,此处为按需加载字段(加载字段由SQL指 定),不会加载关联表的所有字段,以提高性能 -->
<setting name="aggressiveLazyLoading" value="false"/>
<!-- 允许使用自定义的主键值(比如由程序生成的UUID 32位编码作为键值),数据表的PK生成策略将被覆盖 -->
<setting name="useGeneratedKeys" value="true"/>
<!-- 给予被嵌套的resultMap以字段-属性的映射支持(NONE, PARTIAL, FULL) -->
<setting name="autoMappingBehavior" value="FULL"/>
<!-- 是否启用下划线与驼峰式命名规则的映射(如first_name => firstName) -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
<setting name="defaultFetchSize" value="200"/>
<!-- SESSION, STATEMENT -->
<setting name="localCacheScope" value="SESSION"/>
<!-- NULL, VARCHAR, OTHER -->
<setting name="jdbcTypeForNull" value="OTHER"/>
<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
<setting name="logPrefix" value="[mybatis]"/>
<!-- 打印查询语句 STDOUT_LOGGING, 不用显式开启,会自动查找日志实现-->
<!-- <setting name="logImpl" value="SLF4J"/>-->
</settings>
<typeHandlers>
</typeHandlers>
</configuration>
直接复制使用即可,文件位置参考我上面的文件结构图,也可自定义放置,位置跟 yml 配置中的位置一致就行
三.代码部分
3.1 实体
@Data
public class User {
private String id;
private Integer age;
private String name;
}
如果该项目作为 base 去使用的话,实体类需要添加注解 @TableName,主键需要添加注解 @Id 和 @TableId(type = IdType.ASSIGN_UUID),当然也需要添加额外的依赖:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.5.3.1</version>
</dependency>
3.2 持久层
@Mapper
public interface UserMapper {
List<User> findAll();
}
3.3 xml 文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.demo.mybatis.mapper.UserMapper">
<select id="UserMapper" resultType="com.demo.mybatis.entity.User">
select * from user u
</select>
</mapper>
3.4 控制层
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserMapper userMapper;
@GetMapping
public List<User> findAll(){
return userMapper.findAll();
}
}
3.5 测试接口
方法测试路径:http://localhost:8087/user
如果出现以下结果,说明集成成功!
[
{
"id": "aaa",
"age": 15,
"name": "zhangsan"
}
]
因为接口是查询,所以需要提前插入数据哈,也可以提前执行下面的 sql 语句
DROP TABLE IF EXISTS `user`
CREATE TABLE `user` (
`id` varchar(64) NOT NULL,
`age` int DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
INSERT INTO `user` (`id`, `age`, `name`) VALUES ('aaa', 15, 'zhangsan');
四.总结
集成过程不难,大家可以按照步骤来,有问题随时留言,都会看的,文章已经测试过是没问题的,欢迎大家建议指正...