一、什么是MyBatis
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>
2. MyBatis获取参数值的两种方式
MyBatis获取参数值的两种方式:${}和#{}
${}的本质就是字符串拼接,#{}的本质就是占位符赋值。
${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引号;但是#{}使用占位符赋值的方式拼接sql,此时为字符串类型或者日期类型的字段进行赋值时,可以自动添加单引号
3. mybatis获取参数的各种情况
- mapper接口方法的参数为单个字面量类型:可以通过${}和#{}以任意的名称获取参数值,但是要注意${}的单引号问题
- mapper接口方法的参数为多个时:此时mybatis会将这些参数放在一个map集合中,以两种方式进行存储1)以arg0,arg1...为键,以参数为值 2)以param0,param1...为键,以参数为值;因此只需要通过#{}和${}以键的方式访问值即可。
- 若mapper接口方法的参数有多个时,可以手动将这些参数放在一个map中存储,通过#{}和${}以键的方式访问值即可。
- mapper接口方法的参数是实体类类型的参数:只需要通过#{}和${}以属性的方式访问属性值即可。
- 使用@param注解命名参数:此时mybatis会将这些参数放在一个map集合中,以两种方式进行存储1)以@Param注解的值为键,以参数为值 2)以param0,param1...为键,以参数为值;因此只需要通过#{}和${}以键的方式访问值即可。
总结:1)实体类类型的参数以属性的方式访问属性值
2)单个或多个参数时,使用@Param注解