MyBatis

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

MyBatis是一款优秀的持久层框架,用于简化jdbc的开发.
MyBatis本来是Apache的开源项目iBatis,2010年这个项目由apache迁移到了google code,并改名为MyBatis,2013年迁移到了github。
官网:https://mybatis.org/mybatis-3/zh/index.html
在这里插入图片描述


提示:以下是本篇文章正文内容,下面案例可供参考

一、Mybatis入门

快速入门

Mybatis操作数据就是在Java中编写sql语句,将这条语句发送到数据库系统执行,数据库系统再将执行的结果返回给Java程序

使用Mybatis查询所有用户数据
1 准备工作(创建SpringBoot 工程,数据库表,实体化类)
2 引入Mybatis相关依赖,配置Mybatis(数据库连接信息)
3 编写sql语句(注解/xml)

配置sql提示

默认在Mybatis中编写的sql语句是不识别的,可以做如下配置:
在这里插入图片描述

注意事项:
配置sql提示后,在输入sql语句时,不会提示表名原因是idea与数据库没有建立连接,不识别表信息。
解决方法:在idea中配置MySQL数据库连接

配置MySQL数据库连接
在这里插入图片描述

jdbc

在这里插入图片描述

数据库连接池

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

lombok

在这里插入图片描述
llombok在编译时,会自动生成对应的Java代码,我们使用Lombok时还要安装一个插件(idea自带的)

二、Mybatis基础增删改查

1、环境准备

在这里插入图片描述
准备工作

1 准备数据库表
2 创建SpringBoot工程,引入起步依赖(mybatis,lombok,mysql驱动)
3在application.properties中引入数据库连接信息
4 在pojo包创建实体类(实体类属性采用驼峰命名) 数据字段名_后面一个字母大写
5 准备Mapper接口EmpUser

在这里插入图片描述

2、删除

在这里插入图片描述
我们这里不能把id写死,这样我们只能删除id为17的数据,我们要把17更换为动态的,更换为占位符#{ mapper接口方法形参名} ,在sql预编译时,#{ mapper接口方法形参名} 会被替换为参数占位符?,给mapper接口方法传入参数时,?会被替换为相应的传入的参数,如果mapper接口方法只有一个参数,方法形参名什么变量名都可以,因为mapper接口方法只有一个形参只会把值注入占位符内,但是在真正的项目开发中还是和mapper接口方法参数名保持一致。
mapper接口方法形参类型最好是引用数据类型的,mapper接口方法可以有返回值,返回值是数值型数据,返回的操作了多少条数据
在这里插入图片描述

sql预编译

Mybatis底层执行了什么样的sql语句并不知道,在Mybatis框架中可以借助日志看到这些sql语句,
但是这些日志默认是关闭的,需要配置文件

在这里插入图片描述

Mybatis在执行时,会将sql语句和参数都发送给数据库服务器,数据库在执行sql语句时会用参数替换掉参数占位符?

在这里插入图片描述
为要采用预编译sql语句,而不采用拼接)
在这里插入图片描述

Java中编写了sql语句,要想执行这条sql语句,首先要连接数据库,然后将sql语句发送给数据库,数据接收到sql语句并不会马上执行sql语句,首先要对sql语法解析检查,优化sql,编译sql,然后才执行sql语句,Mysql数据库会将编译优化后的sql语句缓存起来,下一下执行sql语句时,Mysql数据库就会检查缓存里有没有编译好的sql语句,如果有就执行编译好的sql语句,如果没有就将这条sql语句编译好再将编译好的sql语句缓存起来,如果是预编译的sql语句在执行时会将

sql注入

sql注入是通过操作输入的数据来修改事先定义好的sql语句,以达到执行代码对服务器进行攻击的方法
在这里插入图片描述
参数占位符
在这里插入图片描述

3、新增

在这里插入图片描述
添加@Options注解可以返回自动生成的主键,keyProperty是指定返回的主键存放在emp的哪个属性中。

4、更新

根据主键id进行更新
在这里插入图片描述

5、查询

根据ID查询

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

条件查询

在这里插入图片描述
在这里插入图片描述

三、xml映射文件

在这里插入图片描述

在这里插入图片描述

四、Mybatis动态SQL

概念:随着用户的输入和外部条件的变化而变化的SQL语句,我们称为动态SQL。

if

<if>

<if>用于判断条件是否成立。使用test属性进行条件判断,如果条件为true,则拼接SQL语句
<where>:where元素只会在子元素有内容的情况下才会插入where语句。而且会自动去除子句开头的and或者or

在这里插入图片描述

if案例

在这里插入图片描述

如果只修改一个数据就会多一个逗号,就会报语法错误,这时候就要引入标签解决问题。

foreach

在这里插入图片描述

sql include

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值