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")可以修改为数据库中的字段名

相关推荐
Amazing_Cacao1 天前
深度观察 | 从“产区玄学”到“液态战场”:精品巧克力的终极试金石
学习
爱敲代码的小鱼1 天前
springboot(2)从基础到项目创建:
java·spring boot·spring
深蓝海拓1 天前
S7-1500PLC学习笔记:MOVE_BLK、MOVE_BLK_VARIANT、BLKMOV的区别
笔记·学习·plc
darkhorsefly1 天前
玩24算的益处
学习·游戏·24算
i220818 Faiz Ul1 天前
动漫商城|基于springboot + vue动漫商城系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·动漫商城系统
深蓝海拓1 天前
S7-1500学习笔记:用户自定义数据类型(UDT)
笔记·学习·plc
罗罗攀1 天前
PyTorch学习笔记|神经网络的损失函数
人工智能·pytorch·笔记·神经网络·学习
aP8PfmxS21 天前
从零学习Kafka:数据存储
分布式·学习·kafka
ybwycx1 天前
SpringBoot下获取resources目录下文件的常用方法
java·spring boot·后端
卓怡学长1 天前
m315基于java的水果网上商城的开发与设计
java·数据库·spring·tomcat·maven·intellij-idea