Mybatis基本常识
安装
要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于类路径(classpath)中即可。
如果使用 Maven 来构建项目,则需将下面的依赖代码置于 pom.xml 文件中:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>x.x.x</version>
</dependency>
SqlSessionFactoryBuilder就是MyBatis程序的核心对象,具体解释可以阅读入门_MyBatis中文网
Mybatis创建基本流程
POJO (Plain Old Java Object)指的是普通Java对象
创建一张表
可以使用navicat来创建
创建新的模块,导入坐标
注意看红框部分,新的模块创建好,在pom.xml文件中导入坐标
导入mybatis依赖,mysql依赖
如果要导入外部xml文件,要把外部文件复制到resources中
alt+鼠标左键可以整列编辑
MySql代码快速入门
Mapper代理开发
- 解决原生代码中的硬编码问题
- 简化后期执行sql
-
第一步 UserMapper这个接口名称,跟sql的映射文件UserMapper.xml同名
-
第二步
接口全限定名
- 第三步
这个方法的名字就是SQL映射文件
(UserMapper.xml)中sql语句的id,保持参数和返回值类型一致。select * from ...查询后返回的是一个集合,所以类型不应该是User,而应该是List<User>。如果写User那就只返回了一个对象。
包扫描的方式简化sql映射文件的加载
MyBatis和Spring整合
MyBatis核心配置文件详解
项目代码
查询所有数据
id是指定了UserMapper中的方法,不能随便命名。
遇上数据库列名和代码中名字不一致的情况
-
第一种命名方式,简单粗暴
-
用resultMap来命名
查看详情按钮
占位符的用法
MySQL设置模糊查询
- 散装参数
- 对象参数
- Map参数 Map参数需要New一个HashMap,其他跟对象参数的操作方法基本一致
解决传递参数不是全部都有的情况
如果只传递了前面两个参数值,那么后面的参数没有接收到,前面的SQL语句中有逗号出现,会报错。
接下来就要讲动态SQL了
动态SQL
多条件动态查询
单条件动态查询
添加数据、修改字段、删除数据
<insert useGeneratedKeys="true" keyProperty="id">
-
用
set标签是不知道哪个传递的字段是最后一个,为了避免,问题导致语法错误,用set标签括起来 -
用
foreach标签,从数组中查找item,separator,表示不同元素之间用,分割,如果不加separator,在下一行#{id}中加,会导致语法错误,因为不知道传几个#{id} -
或者
where id in ()这里,也可以不写括号,将括号写进open和close里面,如下图所示:
MyBatis参数传递
有多个参数时,一定要加上@Param
collection 默认数组都是写array,如果想要换成别的名字,可以在方法的参数括号中写上@Param("{name}")
注解开发
简单的用注解,复杂的还是配置文件
IService
IService 不是 Spring Boot 自带的接口,它是 MyBatis-Plus(一个基于 MyBatis 的增强工具) 框架中定义的核心接口。
MyBatis-Plus 为了简化 CRUD 操作,提供了一套通用的服务层接口和实现类:
IService<T>:通用服务接口,定义了常见的 CRUD 方法(如save、remove、update、list等)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,可以通过继承 IService 和 ServiceImpl 快速实现服务层功能,减少重复代码。