提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
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案例
如果只修改一个数据就会多一个逗号,就会报语法错误,这时候就要引入标签解决问题。