文章只是演示如何集成 mybatis,并非 plus,而且只是集成,类似一个 demo,所以文章只适用于初学 mybatis 的同学
文章目录
前言
文章内部已经处理了部分的依赖冲突,并且类似于纯净版本,大家可以直接把项目拉取下来作为自己的 base 去用
项目 gitee 链接
一、依赖
在 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%2B8username: 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"?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><settings><settingname="logImpl"value="STDOUT_LOGGING"/><!-- 如果数据为空的字段,默认该字段省略不显示,设置后查询数据为空是则返回null --><settingname="callSettersOnNulls"value="true"/><!-- 这个配置使全局的映射器启用或禁用缓存。系统默认值是true --><settingname="cacheEnabled"value="false"/><!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载。 系统默认值是true --><settingname="lazyLoadingEnabled"value="true"/><!-- 允许或不允许多种结果集从一个单独的语句中返回(需要适合的驱动)。 系统默认值是true --><settingname="multipleResultSetsEnabled"value="true"/><!--使用列标签代替列名。不同的驱动在这方便表现不同。参考驱动文档或充分测试两种方法来决定所使用的驱动。 系统默认值是true --><settingname="useColumnLabel"value="true"/><!--配置默认的执行器。SIMPLE 执行器没有什么特别之处。REUSE 执行器重用预处理语句。BATCH 执行器重用语句和批量更新 系统默认值是SIMPLE --><settingname="defaultExecutorType"value="REUSE"/><!--设置超时时间,它决定驱动等待一个数据库响应的时间。 系统默认值是null --><settingname="defaultStatementTimeout"value="180"/><!-- 设置关联对象加载的形态,此处为按需加载字段(加载字段由SQL指 定),不会加载关联表的所有字段,以提高性能 --><settingname="aggressiveLazyLoading"value="false"/><!-- 允许使用自定义的主键值(比如由程序生成的UUID 32位编码作为键值),数据表的PK生成策略将被覆盖 --><settingname="useGeneratedKeys"value="true"/><!-- 给予被嵌套的resultMap以字段-属性的映射支持(NONE, PARTIAL, FULL) --><settingname="autoMappingBehavior"value="FULL"/><!-- 是否启用下划线与驼峰式命名规则的映射(如first_name => firstName) --><settingname="mapUnderscoreToCamelCase"value="true"/><settingname="defaultFetchSize"value="200"/><!-- SESSION, STATEMENT --><settingname="localCacheScope"value="SESSION"/><!-- NULL, VARCHAR, OTHER --><settingname="jdbcTypeForNull"value="OTHER"/><settingname="lazyLoadTriggerMethods"value="equals,clone,hashCode,toString"/><settingname="logPrefix"value="[mybatis]"/><!-- 打印查询语句 STDOUT_LOGGING, 不用显式开启,会自动查找日志实现--><!-- <setting name="logImpl" value="SLF4J"/>--></settings><typeHandlers></typeHandlers></configuration>
直接复制使用即可,文件位置参考我上面的文件结构图,也可自定义放置,位置跟 yml 配置中的位置一致就行
三.代码部分
3.1 实体
@DatapublicclassUser{privateString id;privateInteger age;privateString 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 持久层
@MapperpublicinterfaceUserMapper{List<User>findAll();}
3.3 xml 文件
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.demo.mybatis.mapper.UserMapper"><selectid="UserMapper"resultType="com.demo.mybatis.entity.User">
select * from user u
</select></mapper>
3.4 控制层
@RestController@RequestMapping("/user")publicclassUserController{@AutowiredprivateUserMapper userMapper;@GetMappingpublicList<User>findAll(){return userMapper.findAll();}}
3.5 测试接口
方法测试路径:http://localhost:8087/user
如果出现以下结果,说明集成成功!
[{"id":"aaa","age":15,"name":"zhangsan"}]
因为接口是查询,所以需要提前插入数据哈,也可以提前执行下面的 sql 语句
DROPTABLEIFEXISTS`user`CREATETABLE`user`(`id`varchar(64)NOTNULL,`age`intDEFAULTNULL,`name`varchar(255)DEFAULTNULL,PRIMARYKEY(`id`))ENGINE=InnoDBDEFAULTCHARSET=utf8mb3;INSERTINTO`user`(`id`,`age`,`name`)VALUES('aaa',15,'zhangsan');
四.总结
集成过程不难,大家可以按照步骤来,有问题随时留言,都会看的,文章已经测试过是没问题的,欢迎大家建议指正...
版权归原作者 xiaoyao857 所有, 如有侵权,请联系我们删除。