一、什么是MyBatis
MyBatis中文网https://mybatis.net.cn/
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
二、MyBatisPlus与MyBatis的关系
MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。也就是说Mybatis拥有的功能,MybatisPlus全都拥有。所以SpringBoot在集合MyBatis-Plus 时,同时也集合了MyBatis。
三、maven依赖
1. SpringBoot整合mybatis的依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
2. SpringBoot整合mybatisPlus的依赖
<!--MybatisPlus中包含了mybatis --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.2</version> </dependency>
四、配置,application.yml (MybatisPlus的配置)
spring: datasource: druid: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/reggie?serverTimezone=UTC username: root password: yqqlm@gs1cl mybatis-plus: configuration: map-underscore-to-camel-case: true log-impl: org.apache.ibatis.logging.stdout.StdOutImpl mapper-locations: classpath*:/mapper/**/*.xml
五、创建Mapper接口
Mapper接口中的方法用来操作数据库,调用接口中的方法时,会根据方法名匹配到sql语句。
六、映射文件
1、映射文件的命名规则
表所对应的实体类的类名+Mapper.xml
例如:表dish,映射的实体类为Dish,所对应的映射文件为DishMapper.xml
因此一个映射文件对应一个实体类,对应一张表的操作。
Mybatis映射文件用于编写SQL,访问以及操作表中的数据
Mybatis映射文件默认存放的位置是classpath*:/mapper/**/*.xml
2. Mybatis中可以面向接口操作数据,要保证两个一致
- mapper接口的全类名和映射文件的命名空间(namespace)保持一致
- mapper接口中方法的方法名和映射文件中编写SQL的标签的id属性保持一致
@Mapper
public interface DishMapper extends BaseMapper<Dish> {
//Mybatis面向接口编程的两个一致
Dish getDishByName(@Param("name") String name);
}
3. 映射文件的标准格式
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.athorse.mapper.DishMapper">
<select id="getDishByName" resultType="com.athorse.entities.Dish">
select * from dish where name = #{name}
</select>
</mapper>
七、详解映射文件
1. select标签
<!--查询共嗯那个的标签必须设置resultType或者resaultMap
resultType:设置默认的映射关系,表字段名与实体类属性名一一对应
resaultMap:设置自定义的映射关系,表字段名与实体类属性名不一样表中id与实体类属性dishId,就需要自定义映射
-->
<select id="getDishByName" resultType="com.athorse.entities.Dish">
select * from dish where name = #{name}
</select>