Springboot学习笔记(4)MybatisPlus

1. MybatisPlus

1.1 ORM介绍

        ORM(Object Relational Mapping,对象关系映射)是为了解决面向对象与关系数据库存在的互不匹配现象的一种技术。

        比如,将java中的对象传递到关系型数据库中去,或者将关系型数据库传递到java大对象中去,这样一个映射关系,需要一个中间组件的接入。这个映射既包含了存储,又包含了读取。

        ORM通过使用描述对象和数据库之间映射的元数据将程序中的对象自动持久化到关系数据库中。

        ORM框架的本质是简化编程中操作数据库的编码。

1.2 MyBatis-Plus介绍 及配置

        MyBatis是一款优秀的数据持久层ORM框架,被广泛地应用于应用系统。

        MyBatis能够非常灵活地实现动态SQL,可以使用XML或注解来配置和映射原生信息,能够轻松地将Java的POJO(Plain Ordinary Java Object,普通的Java对象)与数据库中的表和字段进行映射关联。

        MyBatis-Plus是一个 MyBatis 的增强工具,在 MyBatis 的基础上做了增强,简化了开发。

1.2.1添加依赖

注:MyBatis-Plus配置版本问题很恶心

在pom.xml文件中配置dependency

        <!--MyBatisPlus依赖--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.2</version></dependency><!--mysq1驱动依赖 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency><!--数据连接池 druid--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.20</version></dependency>
1.2.2配置数据库相关信息

在application.properties配置

spring.datasource.type = com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mapper?useSSL=false&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
1.2.3添加@MapperScan注解

在org/example/mp_demo/MpDemoApplication.java中添加注解

package org.example.mp_demo;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@MapperScan("org.example.mp_demo.mapper")//扫描器,告诉他扫描哪个包
public class MpDemoApplication {public static void main(String[] args) {SpringApplication.run(MpDemoApplication.class, args);}}

1.3 Mybatis CRUD注解

如下所示:

conroller为所编写的控制器,User是class,UserMapper是接口

1.3.1 控制器
@RestController
public class UserController {@Autowired//注入userMapper  但是直接声明会导致其为空,因此加上注解@Autowired让其不为空private UserMapper userMapper;//如果要用Mapper,提前声明一下就好了,Mybatis会帮我们自动配置↑↑↑@GetMapping("/user")public List query(){List<User> list = userMapper.find();System.out.println(list);return list;}}
1.3.2 User类
public class User {private int id;private int name;private int password;private int birthday;public int getId() {return id;}public void setId(int id) {this.id = id;}public int getName() {return name;}public void setName(int name) {this.name = name;}public int getPassword() {return password;}public void setPassword(int password) {this.password = password;}public int getBirthday() {return birthday;}public void setBirthday(int birthday) {this.birthday = birthday;}@Overridepublic String toString() {return "User{" +"id=" + id +", name=" + name +", password=" + password +", birthday=" + birthday +'}';}
}

mysql数据库mapper中的user:

运行得到:(网页自动转化成json格式)

 

1.3.3 UserMapper接口
@Mapper //声明这是一个Mapper组件,会让MapperScan扫描mapper包,找到这个Mapper组件
public interface UserMapper  {//查询所有用户@Select("select * from user")//这个sql语句对自动去找配置文件application.properties中的mapper数据库//会自动发select到的数据放到List里面去。public List<User> find();@Insert("insert into user values (#{id},#{name},#{password},#{birthday})")public int insert(User user);//返回值代表插入了几条记录,如果插入失败则返回0}
1.3.4 CRUD操作

 1.4 MyBatis-Plus

当我们选用了MyBatis-Plus后,以上编写的均可以不写。

        接口UserMapper改动:继承BaseMapper,MyBatis-Plus可以自动根据这个类User找到user表,帮我们做增删改查。

@Mapper //声明这是一个Mapper组件,会让MapperScan扫描mapper包,找到这个Mapper组件
public interface UserMapper extends BaseMapper<User> {//MyBatis-Plus可以自动根据这个类User找到user表,帮我们做增删改查。//    //查询所有用户
//    @Select("select * from user")
//    //这个sql语句对自动去找配置文件application.properties中的mapper数据库
//    //会自动发select到的数据放到List里面去。
//    public List<User> find();
//
//    @Insert("insert into user values (#{id},#{name},#{password},#{birthday})")
//    public int insert(User user);//返回值代表插入了几条记录,如果插入失败则返回0
}

         控制器改动:

@RestController
public class UserController {@Autowired//注入userMapper  但是直接声明会导致其为空,因此加上注解@Autowired让其不为空private UserMapper userMapper;//如果要用Mapper,提前声明一下就好了,Mybatis会帮我们自动配置↑↑↑@GetMapping("/user")public List query(){List<User> list = userMapper.selectList(null);//selectList()该函数查询,括号内是查询条件,没有就填nullSystem.out.println(list);return list;}@PostMapping("/user")public String save(User user){int i = userMapper.insert(user);if(i > 0){return "插入成功";}else {return "插入失败";}}
}
1.4.1 表名类名不一致

        如果数据库数据表名字和class类名不一致该怎么办?

@TableName("t_user")
public class User {private int id;private int name;private int password;private int birthday;
1.4.2 表名类名属性不一样

         如果数据库数据表属性名字和class类里的属性不一致该怎么办?

public class User {private int id;@TableField("nickname")private int name;private int password;private int birthday;
1.4.3 类里的名称数据库不存在
    private int id;@TableField("nickname")private int name;private int password;private int birthday;@TableField(exist = false)private int age;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1551316.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

HarmonyOS Next系列之水波纹动画特效实现(十三)

系列文章目录 HarmonyOS Next 系列之省市区弹窗选择器实现&#xff08;一&#xff09; HarmonyOS Next 系列之验证码输入组件实现&#xff08;二&#xff09; HarmonyOS Next 系列之底部标签栏TabBar实现&#xff08;三&#xff09; HarmonyOS Next 系列之HTTP请求封装和Token…

Webpack 打包后文件过大,如何优化?

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介Webpack 打包后文件过大&#xff0c;如何优化&#xff1f;1. 代码分割&#xff08;Code Splitting&#xff09;1.1 概念1.2 Webpack 的 SplitChunksPlugin示例配置&#xff1a; 1.3 按需加载&#xff08;Lazy Loading&#xff09;示…

【无人机设计与技术】四旋翼无人机的建模

摘要 本项目的目标是通过 Simulink 建模和仿真&#xff0c;研究四旋翼无人机的建模、姿态控制、定点位置控制及航点规划功能。无人机建模包含了动力单元模型、控制效率模型和刚体模型&#xff0c;并运用这些模型实现了姿态控制和位置控制。姿态控制为无人机的平稳飞行提供基础…

字体文件压缩

技术点 npm、html、font-spider 实现原理 个人理解&#xff1a;先引入原先字体&#xff0c;然后重置字符为空&#xff0c;根据你自己填充文字、字符等重新生成字体文件&#xff0c;因此在引入的时候务必添加自己使用的文字、字符等&#xff01;&#xff01;&#xff01; 实…

高校体育场小程序|高校体育场管理系统系统|体育场管理系统小程序设计与实现(源码+数据库+文档)

高校体育场管理系统小程序 目录 体育场管理系统小程序设计与实现 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道…

ClickHouse入库时间与实际相差8小时问题

原因一&#xff1a;服务端未修改默认时区 解决方案&#xff1a; 1、找 ClickHouse 配置文件 config.xml&#xff0c;通常位于 /etc/clickhouse-server/ 目录。 2、编辑 config.xml 文件&#xff0c;找到 <timezone> 标签。如果标签不存在&#xff0c;需要手动添…

unity一键注释日志和反注释日志

开发背景&#xff1a;游戏中日志也是很大的开销&#xff0c;虽然有些日志不打印但是毕竟有字符串的开销&#xff0c;甚至有字符串拼接的开销&#xff0c;有些还有装箱和拆箱的开销&#xff0c;比如Debug.Log(1) 这种 因此需要注释掉&#xff0c;当然还需要提供反注释的功能&am…

避免学术欺诈!在ChatGPT帮助下实现严格引用并避免抄袭

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 当今的学术环境中&#xff0c;保持学术诚信至关重要。随着ChatGPT等技术的发展&#xff0c;写作变得更加高效&#xff0c;但也增加了不当使用的风险。严格的引用和避免抄袭不仅是学术道…

C++基础---类和对象(上)

1.类的定义 C程序设计允许程序员使用类&#xff08;class&#xff09;定义特定程序中的数据类型。这些数据类型的实例被称为对象 &#xff0c;这些实例可以包含程序员定义的成员变量、常量、成员函数&#xff0c;以及重载的运算符。语法上&#xff0c;类似C中结构体&#xff0…

Jmeter常用函数、逻辑控制器

目录 一、Jmeter常用函数 counter函数 machineName函数 machineIP函数 Random函数 RandomString函数 RandomDate函数 time函数 二、逻辑控制器 IF控制器 循环控制器 foreach控制器 仅一次控制器 事务控制器 聚合报告 随机控制器 随机顺序控制器 一、Jmeter常用…

趣味运动会分组记分指南

团队比赛时如何记分&#xff1f; 趣味运动会的组织过程中&#xff0c;分组和记分是两个关键环节。云分组小程序提供了一个高效的解决方案&#xff0c;无论是随机分组还是内定分组&#xff0c;都能轻松实现。系统还能自动统计积分和排名&#xff0c;极大简化了组织者的工作。 分…

如何在Python中计算移动平均值?

在这篇文章中&#xff0c;我们将看到如何在Python中计算移动平均值。移动平均是指总观测值集合中固定大小子集的一系列平均值。它也被称为滚动平均。 考虑n个观测值的集合&#xff0c;k是用于确定任何时间t的平均值的窗口的大小。然后&#xff0c;移动平均列表通过最初取当前窗…

Android Studio | 无法识别Icons.Default.Spa中的Spa

编写底部导航栏&#xff0c;涉及到Spa部分出现报红&#xff1a; 解决办法&#xff1a;在build.gradle.kts中引入图标依赖 dependencies {implementation "androidx.compose.material:material-icons-extended:<version>" }

Linux相关概念和重要知识点(9)(父进程、子进程、进程状态)

1.父进程、子进程 &#xff08;1&#xff09;父进程 CLI本质上是一款命令行界面的软件&#xff0c;是用户调用接口层面的程序&#xff08;上层&#xff0c;可以和系统调用接口做沟通&#xff09;&#xff0c;CLI和GUI是同级别的。用户的操作都是建立在CLI和GUI之上的。 但是…

SPI驱动OLED

OLED像素发光原理 OLED-有机发光半导体&#xff0c;在有机高分子聚合物的两端施加电压可发光,LED基于金属硅片发光&#xff0c;而OLED可以附于玻璃、塑料&#xff0c;可以用OLED做出曲面屏折叠屏&#xff0c;不同于LCD&#xff0c;OLED没有背光板&#xff0c;每个像素可以独立…

墙绘产品展示:基于SpringBoot的解决方案

5 系统实现 系统实现部分就是将系统分析&#xff0c;系统设计部分的内容通过编码进行功能实现&#xff0c;以一个实际应用系统的形式展示系统分析与系统设计的结果。前面提到的系统分析&#xff0c;系统设计最主要还是进行功能&#xff0c;系统操作逻辑的设计&#xff0c;也包括…

scrapy 爬取微博(五)【最新超详细解析】: 爬取微博文章

1 读取配置参数 爬取微博文章首先需要读取settings.py中的设置的配置变量&#xff0c;然后编写爬虫&#xff0c;读取的配置变量主要有爬取的关键词、时间范围、爬取区域等。 class WeiboSearchSpider(scrapy.Spider):name weibo_searchallowed_domains [weibo.com]settings…

记一次J1900主板短路报废

记一次J1900主板短路报废 一、主板样貌 J1900的CPU&#xff0c;板载4GB内存&#xff0c;64GB固态&#xff0c;双千M&#xff0c;又HDMI。就是这个电源线&#xff0c;右上角是用线连接的。 二、缘由 前两天接了一个转接板&#xff0c;为了给新增的机械硬盘供电。上午刚测试…

演讲干货整理:泛能网能碳产业智能平台基于 TDengine 的升级之路

在 7 月 26 日的 TDengine 用户大会上&#xff0c;新奥数能 / 物联和数据技术召集人袁文科进行了题为《基于新一代时序数据库 TDengine 助力泛能网能碳产业智能平台底座升级》的主题演讲。他从泛能网能碳产业智能平台的业务及架构痛点出发&#xff0c;详细分享了在数据库选型、…

【最新华为OD机试E卷-支持在线评测】字符串分割转换(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 💻 ACM金牌🏅️团队 | 大厂实习经历 | 多年算法竞赛经历 ✨ 本系列打算持续跟新华为OD-E/D卷的多语言AC题解 🧩 大部分包含 Python / C / Javascript / Java / Cpp 多语言代码 👏 感谢大家的订阅➕ 和 喜欢�…