Mybatis学习笔记

49 阅读3分钟

Mybatis基本常识

my1.jpg

安装

要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于类路径(classpath)中即可。

如果使用 Maven 来构建项目,则需将下面的依赖代码置于 pom.xml 文件中:

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>x.x.x</version>
</dependency>

11.jpg

SqlSessionFactoryBuilder就是MyBatis程序的核心对象,具体解释可以阅读入门_MyBatis中文网

Mybatis创建基本流程

POJO (Plain Old Java Object)指的是普通Java对象 my2.jpg

创建一张表

可以使用navicat来创建

my3.jpg

创建新的模块,导入坐标

注意看红框部分,新的模块创建好,在pom.xml文件中导入坐标 my4.jpg

导入mybatis依赖,mysql依赖

my5.jpg

my6.jpg

如果要导入外部xml文件,要把外部文件复制到resources中

alt+鼠标左键可以整列编辑

MySql代码快速入门

mysql1.jpg

Mapper代理开发

  • 解决原生代码中的硬编码问题
  • 简化后期执行sql mysql2.jpg
  1. 第一步 UserMapper这个接口名称,跟sql的映射文件UserMapper.xml同名 mapper1.jpg

  2. 第二步

接口全限定名 image.png

  1. 第三步 这个方法的名字就是SQL映射文件(UserMapper.xml)中sql语句的id,保持参数和返回值类型一致。 select * from ...查询后返回的是一个集合,所以类型不应该是User,而应该是List<User>。如果写User那就只返回了一个对象。 image.png

mapper4.jpg

包扫描的方式简化sql映射文件的加载 mapper3.jpg

MyBatis和Spring整合

11.jpg

22.jpg

MyBatis核心配置文件详解

coreconf1.jpg

项目代码

查询所有数据

insert1.jpg

mapper1.jpg

id是指定了UserMapper中的方法,不能随便命名。

mapper2.jpg

mysql1.jpg

遇上数据库列名和代码中名字不一致的情况

  1. 第一种命名方式,简单粗暴 rename.jpg

  2. 用resultMap来命名 rm.jpg

查看详情按钮

MySQL1.jpg

占位符的用法

MySQL2.jpg

mysql3.jpg

mysql4.jpg

MySQL设置模糊查询

mysql5.jpg

mysql6.jpg

  1. 散装参数
  2. 对象参数
  3. Map参数 Map参数需要New一个HashMap,其他跟对象参数的操作方法基本一致

1731503860125.jpg

解决传递参数不是全部都有的情况

如果只传递了前面两个参数值,那么后面的参数没有接收到,前面的SQL语句中有逗号出现,会报错。

接下来就要讲动态SQL了 mysql7.jpg

动态SQL

mysql8.jpg

多条件动态查询

mysql7.jpg

mysql8.jpg

单条件动态查询

mysql9.jpg

select1.jpg

添加数据、修改字段、删除数据

<insert useGeneratedKeys="true" keyProperty="id">

mysql1.jpg

  • set标签是不知道哪个传递的字段是最后一个,为了避免,问题导致语法错误,用set标签括起来 mysql2.jpg

  • foreach标签,从数组中查找itemseparator,表示不同元素之间用分割,如果不加separator,在下一行#{id}中加会导致语法错误,因为不知道传几个#{id} mysql3.jpg

  • 或者where id in ()这里,也可以不写括号,将括号写进openclose里面,如下图所示: mysql4.jpg

MyBatis参数传递

有多个参数时,一定要加上@Param

collection 默认数组都是写array,如果想要换成别的名字,可以在方法的参数括号中写上@Param("{name}") param1.jpg

array1.jpg

array2.jpg

param2.jpg

注解开发

简单的用注解,复杂的还是配置文件

111.jpg

IService

IService 不是 Spring Boot 自带的接口,它是 MyBatis-Plus(一个基于 MyBatis 的增强工具) 框架中定义的核心接口。

MyBatis-Plus 为了简化 CRUD 操作,提供了一套通用的服务层接口和实现类:

  • IService<T>:通用服务接口,定义了常见的 CRUD 方法(如 saveremoveupdatelist 等)
  • ServiceImpl<M extends BaseMapper<T>, T>IService 接口的默认实现类,需要传入对应的 BaseMapper
  • 使用示例:
// 定义服务接口,继承
IService public interface UserService extends IService<User> { 
// 可以添加自定义方法 
} // 实现服务接口,继承
ServiceImpl @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { 
// 直接使用父类提供的CRUD方法,或实现自定义方法 
} 

总结IService 是 MyBatis-Plus 的特性,并非 Spring Boot 原生提供。如果项目中使用了 MyBatis-Plus,可以通过继承 IServiceServiceImpl 快速实现服务层功能,减少重复代码。