Mybatis快速入门

Mybatis

  • Mybatis 简介
  • 1.Mybatis 基础使用
    • 1.1 安装依赖
    • 1.2 从 XML 中构建 SqlSessionFactory
    • 1.3 从 SqlSessionFactory 中获取 SqlSession 执行sql
  • 2.基于 Spring Boot 使用 Mybatis
    • 2.1 创建 Spring Boot demo 项目
    • 2.2 编写相关代码
  • 3.Mybatis 增删改查
    • 3.1 查(select)
    • 3.2 增
    • 3.3 删
    • 3.4 改
  • 4. 动态SQL
    • 4.1 if
    • 4.2 choose、when、otherwise 标签
    • 4.3 foreach 标签
    • 4.4 where trim set
      • trim
      • set
      • where

Mybatis 简介

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

1.Mybatis 基础使用

1.1 安装依赖

<dependency>
  <groupId>org.mybatisgroupId>
  <artifactId>mybatisartifactId>
  <version>3.2.1version>
dependency>

1.2 从 XML 中构建 SqlSessionFactory

每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例

String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

XML 配置文件中包含了对 MyBatis 系统的核心设置,包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器(TransactionManager)。


DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
     
    <environments default="development">
         
        <environment id="development">
            
            <transactionManager type="JDBC"/>
            
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test"/>
                <property name="username" value="root"/>
                <property name="password" value="120125hzy."/>
            dataSource>
        environment>
    environments>
    <mappers>
        
        <mapper resource="UserMapper.xml"/>
    mappers>
configuration>

1.3 从 SqlSessionFactory 中获取 SqlSession 执行sql

既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。

创建 UserMapper.java

public interface UserMapper {
    // @Param 是 MyBatis 中用于给方法参数起别名的注解。这个注解主要用于在 XML 映射文件中引用参数时,提供一个明确的名称。
    User selectUser(@Param("id") int id);
}

创建 UserMapper.xml


DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hzy.mybatis.UserMapper">
    <select id="selectUser" resultType="com.hzy.mybatis.User">
        select * from user where id=${id}
    select>
mapper>

UserMapper.java 与 UserMapper.xml 是一一对应的

获取 SqlSession 执行sql

    public static void main(String[] args) throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        try (SqlSession session = sqlSessionFactory.openSession()) {
            UserMapper mapper = session.getMapper(UserMapper.class);
            User user = mapper.selectUser(1);
            System.out.println(user);
        }
    }

Mybatis快速入门_第1张图片

与 上篇文章 讲的 JDBC 的操作流程:

1. 创建数据库连接池 DataSource
2. 通过 DataSource 获取数据库连接 Connection
3. 编写要执行带 ? 占位符的 SQL 语句
4. 通过 Connection 及 SQL 创建操作命令对象 Statement
5. 替换占位符:指定要替换的数据库字段类型,占位符索引及要替换的值
6. 使⽤ Statement 执行 SQL 语句
7. 查询操作:返回结果集 ResultSet,更新操作:返回更新的数量
8. 处理结果集
9. 释放资源

相比,Mybatis 简单了许多,但还是要手动配置一些核心组件如如 SqlSessionFactoryDataSourceTransactionManager 等。

所以我们一般基于 SpringBoot 使用 Mybatis 来简化开发。

2.基于 Spring Boot 使用 Mybatis

Spring Boot 是一个现代的、约定大于配置的框架,通过 Spring Boot 的自动配置和约定来简化整体架构,大大减少了手动配置的需求,提高了开发效率。

在 Spring Boot 中,只需在配置文件中指定数据库连接等少量信息,Spring Boot 将会根据约定自动配置 MyBatis 相关组件,包括创建 SqlSessionFactoryDataSourceTransactionManager 等。

2.1 创建 Spring Boot demo 项目

选择数据库修改依赖

Mybatis快速入门_第2张图片

2.2 编写相关代码

配置文件

Spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 120125hzy.
    type:  com.alibaba.druid.pool.DruidDataSource
mybatis:
 type-aliases-package: com.hzy.demo.pojos # 指定MyBatis实体类的包路径,使得在XML文件中可以直接使用类名而不是全限定名。
 configuration:
   log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 日志
   map-underscore-to-camel-case: true #  将数据库字段的下划线命名方式映射为Java驼峰命名方式
   

pojos.User

@Data
public class User {
    private int id;
    private String name;
    private Double balance;
    private String homeAddr;
}

mapper.UserMapper

@Mapper
public interface UserMapper {
    User selectUser(@Param("id") int id);
}

UserMapper.xml


DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hzy.demo.mapper.UserMapper">
    
    <select id="selectUser" resultType="User">
        select * from user2 where id=${id}
    select>
mapper>

测试代码

	@Test
	void test01(){
		User user = userMapper.selectUser(1);
		System.out.println(user);
	}

在这里插入图片描述

当前的目录结构

Mybatis快速入门_第3张图片

需要注意的是 UserMapper 和 UserMapper.xml 文件的路径要相同,不同会报错

在这里插入图片描述

或者在配置文件中指定 Mapper.xml 文件的目录

mybatis:
  mapper-locations: classpath:/mybatis/mappers/*.xml

在这里插入图片描述

3.Mybatis 增删改查

3.1 查(select)

MyBatis 使用