一、什么是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>

2. MyBatis获取参数值的两种方式

MyBatis获取参数值的两种方式:${}和#{}

${}的本质就是字符串拼接,#{}的本质就是占位符赋值。

${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引号;但是#{}使用占位符赋值的方式拼接sql,此时为字符串类型或者日期类型的字段进行赋值时,可以自动添加单引号

3. mybatis获取参数的各种情况

  1. mapper接口方法的参数为单个字面量类型:可以通过${}和#{}以任意的名称获取参数值,但是要注意${}的单引号问题
  2. mapper接口方法的参数为多个时:此时mybatis会将这些参数放在一个map集合中,以两种方式进行存储1)以arg0,arg1...为键,以参数为值 2)以param0,param1...为键,以参数为值;因此只需要通过#{}和${}以键的方式访问值即可。
  3. 若mapper接口方法的参数有多个时,可以手动将这些参数放在一个map中存储,通过#{}和${}以键的方式访问值即可。
  4. mapper接口方法的参数是实体类类型的参数:只需要通过#{}和${}以属性的方式访问属性值即可。
  5. 使用@param注解命名参数:此时mybatis会将这些参数放在一个map集合中,以两种方式进行存储1)以@Param注解的值为键,以参数为值 2)以param0,param1...为键,以参数为值;因此只需要通过#{}和${}以键的方式访问值即可。

总结:1)实体类类型的参数以属性的方式访问属性值

            2)单个或多个参数时,使用@Param注解

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐