目录
前言:
1.MyBatis是什么
2.为什么要学习MyBatis框架
3.MyBatis框架的搭建
3.1添加MyBatis框架
3.2设置MyBatis配置
4.根据MyBatis写法完成数据库的操作
5.MyBatis里面的增删改查操作
5.1插入语句
5.2修改语句
5.3delete语句
5.4查询语句
5.5like查询
5.6MyBatis注解方式实现多表查询
6.动态SQL的使用
6.1
6.2
6.3
6.4
6.5
结束语:
在前几节中小编重点与大家分享了有关于Spring Boot和Spring MVC的相关的一些基础知识,那么接下来小编就与大讲解一下有关于MyBatis的一些基础知识,那么经过前期的学习中让我们知道了在Spring中的一些基础操作,那么接下来我们就需要学习有关于如何将前端传递的数据保存起来,或者是查询数据库里面的一些数据。
MyBatis是一款优秀的持久层框架,它支持自定义的SQL、存储过程以及高级映射。它的底层是基于JDBC的,通过它可以实现更加简单的数据库的操作。MyBatis去除了几乎所有JDBC代码以及设置参数和获取结果集的工作,MyBatis可以通过简单的XML或注解来配置和映射原始类型、接口和Java POJO为数据库中的记录。简单来说MyBatis是更简单完成程序和数据库交互的工具,也就是更加简单的操作和读取数据库工具。大家也可以参考一下MyBatis的官网的定义☞https://mybatis.org/mybatis-3/zh/index.html
对于后端开发来说,程序是由以下两个重要的部分组成的:
而这两个重要的组成部分要通讯就要依靠数据库连接工具,那数据库连接工具有哪些呢?比如我们之前学习的JDBC,还有我们现在介绍的MyBatis,那么既然我们以及有了JDBC了为什么我们还要学习MyBatis呢?我们先来回顾一下我们之前学习JDBC的时候是怎么连接数据库的。
你会发现JDBC的操作步骤太过于繁琐了,所以我们就有了MyBatis,这就会让我们操作数据库的时候更加快捷方便。
创建一个Spring MVC的项目,和我们之前创建的步骤一样,只不过在添加依赖的时候多了下面两个。
注意:新建MyBatis启动时报错时正常的,因为未设置要连接的具体MySQL的详细信息。
①数据库相关的连接
# 设置数据库的相关连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/myblog2023_10_06?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
注意:如果使用 mysql-connector-java 是 5.x 之前的使用的是“ com.mysql.jdbc.Driver ” ,如果是大于 5.x 使用的是“ com.mysql.cj.jdbc.Driver ” 。
②xml保存路径和命名格式
# 设置 MyBatis XML 存放路径和命名格式
mybatis.mapper-locations=classpath:mybatis/*Mapper.xml
# 配置 MyBatis 执行时打印 SQL(可选配置)
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
logging.level.com.example.demo=debug
注意:里面的配置项的信息有些是需要根据自己的数据库来进行改动的。
上述的常用配置大家可以去我的Gitee中自行获取:配置文件: spring中的一些配置文件
在我们对数据库进行操作之前我们先来创建一个数据库。
如下Sql语句所示:
-- 创建数据库
drop database if exists myblog2023_10_06;
create database myblog2023_10_06 DEFAULT CHARACTER SET utf8mb4;
-- 使⽤数据数据
use myblog2023_10_06;
-- 创建表[⽤户表]
drop table if exists userinfo;
create table userinfo(
id int primary key auto_increment,
username varchar(100) not null,
password varchar(32) not null,
photo varchar(500) default '',
createtime datetime default now(),
updatetime datetime default now(),
`state` int default 1
) default charset 'utf8mb4';
-- 创建⽂章表
drop table if exists articleinfo;
create table articleinfo(
id int primary key auto_increment,
title varchar(100) not null,
content text not null,
createtime datetime default now(),
updatetime datetime default now(),
uid int not null,
rcount int not null default 1,
`state` int default 1
)default charset 'utf8mb4';
-- 创建视频表
drop table if exists videoinfo;
create table videoinfo(
vid int primary key,
`title` varchar(250),
`url` varchar(1000),
createtime datetime default now(),
updatetime datetime default now(),
uid int
)default charset 'utf8mb4';
-- 添加⼀个⽤户信息
INSERT INTO myblog2023_10_06.userinfo (`id`, `username`, `password`, `photo`,
`createtime`, `updatetime`, `state`) VALUES
(1, 'admin', 'admin', '', '2021-12-06 17:10:48', '2021-12-06 17:10:48', 1)
;
-- ⽂章添加测试数据
insert into articleinfo(title,content,uid)
values('Java','Java正⽂',1);
-- 添加视频
insert into videoinfo(vid,title,url,uid) values(1,'java title','http://ww
w.baidu.com',1);
那么根据MyBatis写法完成数据的操作常规写法包含了两个文件:
那么接下来我们就按照上述的两步来编写一下查询全部用户信息的代码。
①定义接口
②使用XML实现接口
测试代码展示:
package com.example.demo.dao;
import com.example.demo.model.Userinfo;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest //不可以省略,告诉当前的测试程序,目前项目是运行在Spring Boot容器中的
class UserMapperTest {
@Autowired
private UserMapper userMapper;
@Test
void getAll() {
List list = userMapper.getAll();
System.out.println(list);
}
}
结果展示:
这里注意一定要在测试代码中加上@SpringBootTest注解,否决就会报以下的错误。
当然在MyBatis中国也可以传递参数来查询。
如下所示:
定义接口:
这里使用注解@Param来表明传入的参数。
编写XML:
这里接收参数的时候使用${参数名}或者是也可以使用#{参数名} 的方式来进行参数的传递。
那么这里使用这两个的区别是什么呢?
使用${参数名}的方式是对其进行了及时执行。
而使用#{参数名}的方式是对其进行了预执行。
它的优点在于可以防止SQL注入,是安全的。
所以 ${参数名} VS #{参数名} 的区别在于:
那么${}可以实现的功能#{}都可以实现,并且${}还有SQL注入的风险,为什么还存在${}的写法呢?
这里就要提到${}的使用场景了,当业务中需要传递SQL命令的时候,就只能使用${}不能使用#{}了。但是他也有使用中的注意事项:如果要使用${},那么传递的参数一定要能被穷举,否则是不可以使用的。
测试代码:
结果展示:
大家也可以和小编一样使用MyBatis的一个插件MyBatisX,这样就可以更加方便的实现XML和对应接口之间的跳转了。
以上就是MyBatis的一个简单的使用案例了。
接下来当我们熟悉了MyBatis的基本使用方法之后我们就来继续探讨一下MyBatis的其他使用方式。
接下来我们来实现一下用户信息的增加、删除和修改的操作,对应使用MyBatis的标签如下所示:
具体的操作我们来看下面。
①定义接口
②编写XML中的SQL语句
③编写测试代码
④测试结果展示
当然我们也可以在数据库中看到插入的数据信息。
当然在编写插入操作的SQL语句的时候还有一些属性可以使用如下所示:
解释:
①定义接口
②编写XML中的SQL语句
③编写测试代码
④测试结果展示
在数据库中查看数据的修改情况。
①定义接口
②编写XML中的SQL语句
③编写测试代码
④测试结果展示
数据库中的表现:
标签:查询操作。
①定义接口
②编写XML中的SQL语句
③编写测试代码
④测试结果展示
和我之前在XML中编写方式不同的点是这里我们使用了
当类中的属性和数据库表中的字段名不一致时,那么查询的结果为null,解决方案:
①定义接口
②编写XML中的SQL语句
③编写测试代码
我们先来重新定义一个实体类。
package com.example.demo.model;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class Articleinfo {
private int id;
private String title;
private String content;
private LocalDateTime createtime;
private LocalDateTime updatetime;
private int uid;
private int rcount;
private int state;
}
①定义接口并使用@Select注解进行SQL语句的编写
②编写测试代码
③测试结果展示
使用注解最大的优点就是不需要我们在编写程序的时候跳来跳去了。
动态SQL是MyBatis的强大特征之一,它能够完成不同条件下的不同SQL的拼接。
在有些业务场景下会有必填字段和非必填字段,那么如果有些字段是不确定的字段传入,此时程序又该怎么实现呢?接下来就需要使用if标签来进行判断了,在if标签中有一个属性是test属性,它用来判断这个字段是否是需要填写的字段,如果是填写的字段则进行添加操作,如果不是则不进行添加。
①定义接口
②编写XML中的SQL语句
③编写测试代码
④测试结果展示
在之前的插入用户的功能中,只有一个sex字段可能是选填项,如果所有字段都是非必填项,就考虑使用
在
①定义接口
②编写XML中的SQL语句
③编写测试代码
④测试结果展示
当传入的用户对象需要根据属性做where条件查询时,此时我们就需要在SQL语句后面拼接上一句where条件查询语句,那么
①定义接口
②编写XML中的SQL语句
③编写测试代码
④测试结果展示
当然这里我们在编写XML里面的SQL语句的时候也可以将其换成
根据传入的用户对象属性来更新用户数据,可以使用
①定义接口
②编写XML中的SQL语句
③编写测试代码
④测试结果展示
对集合进⾏遍历时可以使⽤该标签。
①定义接口
②编写XML中的SQL语句
③编写测试代码
④测试结果展示
好了这节小编就给大分享到这里啦,希望这节对大家有关于MyBatis的基础知识的了解有一定帮助,想要学习的同学记得关注小编和小编一起学习吧!如果文章中有任何错误也欢迎各位大佬及时为小编指点迷津(在此小编先谢过各位大佬啦!)