Springboot学习五:MybatisPlus的快速上手

简单来说,ORM作为一个中间组件,让对象和关系型数据(数据库表)实行了可自动持久化的关系映射,即包含了存储,也包含了读取。

Mybatis则是一款支持数据持久层ORM框架,plus版本则在此之上做了增强,简化了开发。

使用前先在pom.xml中导入相关依赖

application.properties中添加如下配置文件

复制代码
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
//注意mysql8.0+版本前不用加.cj
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
//端口号根据自己的mysql调整,以及期望连接的数据库名称(在?前)
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=123456
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

启动类中添加注解,MapperScan扫描根目录下的mapper包

注解中添加mapper包的引用路径。

创建实体类User,匹配数据库内字段。并在类中添加getter,setter,toString(便于打印)方法。

创建Mapper包下的mapper类(数据访问层DAO),用于与数据库交互,执行SQL命令,此处为UserMapper。注意在类名前写上@Mapper注解,可以被系统扫描为Mapper类(若此前在启动类中添加了MapperScan,则此处无需再额外填写Mapper注解)

此处添加搜索语句,其中的user就是数据库中的user表。为了方便打印,后续的find返回结果类型为List<User>。此sql内容即访问并打印user表中的每一行数据,每一个User对象都是相同类型,所以利用List来作为列表存储,将多个User对象合并,即使是空集合,也会返回"[ ]"而非null。

以下是常见的sql语句以及注解功能。

随后编写controller类,此处期望使用UserMapper接口中的find方法,则需要引入一个UserMapper的对象,然后再通过@AutoWired注解将UserMapper的实例化对象为userMapper这个空对象自动注入属性。

复制代码
@Autowired
private UserMapper userMapper;

@Autowired 是 Spring 的自动依赖注入注解 ,核心是 "自动找 Bean 并赋值",替代手动 new 对象。即等同于此处改为:

复制代码
private UserMapper userMapper = new UserMapper();

然后在query 方法中引用userMapper的find方法,赋值给User类的List对象集合。

「注:MapperScan是在代码启动后自动的扫描Mapper层然后生成对应代理类并注册为spring bean,所以在启动前会存在爆红,找不到Mapper类对象的bean。

此时的代码是可以正常运行的,但若不想看到爆红,则需要在Mapper接口添加@Mapper注解,显式的标记为spring组件,或者在@Autowired后添加为@Autowired(required = false),告诉IDE这个bean不需要在编译时存在。」

访问localhost:8080/user,在控制台中得到返回结果:

一般作为前后端分离的项目,返回值应该为json的格式传给前端,所以此处的方法类型改为List,然后返回值是list对象,spring会自动转为json。此处浏览器访问则是json的字符串

示例@INSERT的方法:

先在Mapper接口中定义INSERT的sql语句及其插入的数据对应字段,应与数据库字段一致。然后在insert的抽象方法中添加User类对象user,前端传递数据如username,password时,spring自动生成User的对象,然后将数据打包自动赋给这个user对象,再通过controller中对应语句由mybatis读取数据传递给数据库

基于RESTful风格,添加数据应是POST类型。

此数据库中id设了主键自增,所以前端传递数据时无需传递id值,mysql会自动添加id值。

以上是mybatis的传统方法,mybatisplus则简化了Mapper的配置,仅需在Mapper接口后继承base mapper,即可使用其中的方法

ctrl加左键进入BaseMapper,可查看可用方法,此处的selectList需要添加规则参数,填null即查询所有。

同时在MyBatis-Plus 🚀 为简化开发而生官网中,官方也给出了很详尽的解释,比如在注解部分,提供了很多好用的注解:

@TableName("xxx")用来解决实体类与数据库表名不一致的情况,此处t_user是数据库表名(大小写spring会自动转换)

当主键自增时,@TableId(type=IdType.AUTO)注解能让对应的实体类对象"带上"主键,比如添加此注解后,打印输出对象时会输出id,而前端并未传入id。

@TableField("xx")可以修改为数据库中的字段名

相关推荐
Knight_AL2 小时前
为什么要用 ApplicationReadyEvent 来初始化 RabbitTemplate 回调?
spring boot
逆小舟2 小时前
【SWM320】学习使用GPIO
学习
盐焗西兰花2 小时前
鸿蒙学习实战之路-Share Kit系列(12/17)-判断应用是否被系统分享拉起
前端·学习·harmonyos
weixin_704266052 小时前
事务管理全解析:从ACID到Spring实现
java·数据库·spring
熙胤2 小时前
springboot与springcloud对应版本
java·spring boot·spring cloud
Be for thing3 小时前
Android 蓝牙 & WiFi 硬件原理 + 功耗与异常定位实战(手机 / 手表 / IoT 通用)
android·物联网·学习
J2虾虾3 小时前
SpringBoot 中给 @Autowired 搭配 @Lazy
java·spring boot·后端
今儿敲了吗3 小时前
41| 快速乘
数据结构·c++·笔记·学习·算法