Mybatis的使用步骤

1、使用Mybatis的原因

使用持久层技术将Java中的数据使用SQL语句存储到关系型数据库中

2、Mybatis概念:

MyBatis是一个半ORM的数据库持久化框架,它是三层架构中持久层的技术

  • ORM:对象关系映射(Object Relational Mapping,简称ORM):是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术
  • 半ORM(半映射):不是通过完整的映射方式,需要自己写sql语句

3、JDBC概念

JDBC是Java连接数据库的唯一技术

  • Sun公司官方定义的一套操作所有关系型数据库的规范,其实就是提供了一堆interface接口
  • 各个数据库厂商去实现这套接口,提供数据库驱动Jar包
  • 开发者可以使用这套JDBC接口进行编程,真正执行的代码是驱动Jar包中的实现类

driver-class-name:数据库连接四大参数中的驱动类型名称就是在告诉JDBC,使用的是MySql数据库

4、Java与数据库的对应关系

Java

数据库

实体类

字段

字段/列

实例对象

记录/行

5、Mybatis基础应用

  1. 搭建springboot项目,选择版本后还要选择Web、MyBatis、MySql、lombok依赖
  2. 导入依赖后,在pom.xml文件中修改好版本,删除MyBatis的测试依赖
  3. 准备好数据库表,在domain包下写一个实体类,字段与数据库表的字段一致,在类上加注解@Data,就不需要再写get和set方法
  4. 使用idea连接数据库,主要是输入username、password、url、driver四大参数
  5. 编写yml配置文件
spring:
  # 数据库连接四大参数
  datasource:
    username: root // 数据库用户名
    password: 123456 // 数据库密码
    url: jdbc:mysql://localhost:3306/mybatis // 数据库表的路径 
    driver-class-name: com.mysql.cj.jdbc.Driver // 配置JDBC驱动

// mybatis运行日志输出到控制台
mybatis:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  1. 写mapper接口,需要写在mapper的包下,接口名要使用实体类名+Mapper结尾,CRUD四大注解:MyBatis分为注解方式和XML映射文件方式

注解

说明

标注位置

@Select("SQL语句")

标识要执行查询的SQL语句

SQL语句对应的持久层接口方法上

@Update("SQL语句")

标识要执行修改的SQL语句

SQL语句对应的持久层接口方法上

@Insert("SQL语句")

标识要执行新增的SQL语句

SQL语句对应的持久层接口方法上

@Delete("SQL语句")

标识要执行删除的SQL语句

SQL语句对应的持久层接口方法上

  1. 单元测试

6、注解CRUD

  1. 查询单个: @select,需要接收参数使用 #{参数名称}
  2. 新增:@insert,新增时传递的是一个对象,#{字段名称}可以根据字段名称从对象中获取参数
  3. 修改:@update,也需要接收参数,通过根据参数添加where判断条件
  4. 删除:@delete,需要接收参数,一般都是id

7、XML映射文件-CRUD

在Mybatis中使用XML映射文件方式开发,需要符合一定的规范

  • XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下,保持同包同名,放在resources资源文件夹下,创建文件夹时要使用/分开包名
  • XML映射文件的namespace属性与Mapper接口全限定名保持一致
  • XML映射文件中sql语句的id与Mapper接口中的方法名一致,并保持返回类型一致。一个标签对应Mapper接口一个方法
  1. 创建XML映射文件包:(创建有mapper快捷生产模版可以使用)

mybatis官方xml文档声明和dtd约束

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="">
    
</mapper>
  1. 编写sql语句,要选择对应的CRUD标签,同时id属性和resultType要符合要求
  • id:映射文件中唯一,是SQL语句的唯一标识,与Mapper接口方法必须保持一致
  • resultType:此SQL的返回值类型,与Mapper接口方法的返回值类型必须保持一致,如果是List集合类型就是List集合的泛型,而不是集合类型

8、新增返回主键ID

在insert新增方法中,有三个属性

  • useGeneratedKeys: true:开启返回自增主键 false:关闭返回自增主键,默认值
  • keyProperty:此属性表示将Id返回到传递进来的对象的那个字段,一般都填写id字段
  • keyColumn:此属性表示数据库中的那一列是主键,如果主键列在数据库表中是第一列,默认可以不写

9、模糊查询

  • 模糊查询:通过一个字符或者多个字符去匹配某个字段值,叫做模糊查询
  • concat('','',''):MySql中的拼接函数,可以在值的前后拼接指定值,我们利用这个函数帮助我们拼接前后百分号

10、获取参数的两种方式

  • ${}:本质上是字符串拼接,如果参数类型是字符串或者是时间类型那么需要手动添加单引号,很大程度上可以防止SQL注入
  • #{}:本质上是占位符赋值,也被称为预编译,如果参数类型是字符串或者是时间类型那么会自动加单引号
  • 在某些特殊场合下只能用${},不能用#{},比如表名不确定时、排序字段不确定时、分组字段不确定时

11、动态表名

当数据在多张表时,我们查询数据表名就不固定了,那么就需要将表名通过参数的形式传递到SQL中,此时我们可以使用${}的方式获取参数作为表名

  • 在mapper中写接口

  • 编写XML映射文件

12、MyBatisX插件

MybatisX是一款基于 IDEA 的快速开发插件,方便在使用MyBatis以及MyBatis-Plus开始时简化繁琐的重复操作,提高开发速率

MyBatisX功能

  • XML跳转:Mapper接口方法与XML映射文件SQL语句之间快速定位
  • 代码生成:可以根据数据库表生成Mapper接口、XML映射文件、Service层代码
  • 自动生成映射方法

13、Lombok

  • Lombok是一个实用的Java类库,可以通过简单的注解来简化和消除一些必须有但显得很臃肿的Java代码
  • 通过注解的形式自动生成构造器、Getter/Setter、Equals、HashCode、toString等方法,并可以自动化生成日志变量,简化java开发、提高效率

注解

作用

@Getter/@Setter

为所有的属性提供get/set方法

@ToString

会给类自动生成易阅读的toString方法

@EqualsAndHashCode

根据类所拥有的非静态字段自动重写Equals方法和HashCode方法

@Data

提供了更综合的生成代码功能(@Getter+@Setter+@ToString+@EqualsAndHashCode)

@NoArgsConstructor

为实体类生成无参的构造器方法

@AllArgsConstructor

为实体类生成除了static修饰的字段之外带有各参数的构造器方法

@Slf4j

自动生成一个名为 log 的日志对象,用于在程序中输出日志信息

14、MyBatis动态标签

1、if标签

  • 需求:根据学员名称和年龄查询数据
  • 第一步:编写条件对象
    • 条件对象:条件查询时,如果有多个条件通常会封装一个对象用于存储条件数据
    • 条件对象命名规则:query.XxxQuery
    • 如果是字符串类型需要判断Null以及空格,其他类型只需要判断Null值即可

2、where标签

    • where标签可以解决不确定if标签中表达式是否成立所引发的问题,它有两个功能
    • 如果where标签中的条件成立,那么会自动加上where关键字
    • 会自动去掉标签中条件语句前面多余的and或者是or关键字

3、sql&include标签

sql标签用于抽取公共可以复用的sql语句,再通过indlude标签的refid属性进行引用

标签

说明

属性

sql

用于抽取公共的SQL块

id:此sql块的唯一名称

include

用于引入抽取的公共SQL块

refid:要引入的SQL块id

4、set标签

set标签是在我们进行update操作时使用,可以解决修改条件不确定时引发的问题,通常和if标签搭配使用,它有两个功能

  • 如果set标签中的条件成立,那么会自动加上set关键字
  • 会自动去掉标签中条件语句中多余的逗号

5、特殊符号处理

在XML中不能直接写特殊字符,会与标签字符产生冲突,所以通常使用CDATA代码段处理

<![CDATA[ 带有特俗符号的sql语句 ]]>

  • 大于等于 <![CDATA[ >= ]]>
  • 小于等于 <![CDATA[ <= ]]>
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值