MyBatis操作数据库(入门)

本节目标

  • 使用MyBatis完成简单的增删改查操作,参数传递
  • 掌握MyBatis的两种写法:注解和XML方式
  • 掌握MyBatis相关的日志配置

前言

        在应用分层学习中,我们了解web应用程序一般分为三层,即Controller、Service、Dao。在之前的案例中,请求流程如下:浏览器发起请求,先请求Controller,Controller接收到请求之后,调用Service进行业务逻辑处理,Service再调用Dao,但是Dao层的数据是Mock的,真实的数据应该从数据库中读取。

        我们学习MySQL数据库时,已经学习了JDBC来操作数据库,但是JDBC操作太复杂了。

JDBC操作示例回顾

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

从上述流程可以看出,对于JDBC来说,整个操作非常的繁琐,那么有没有一种方法,可以更简单、更方便的操作数据库呢?


目录

前言

一、什么是MyBatis?

二、MyBatis入门 

2.1 准备工作

2.1.1 创建工程

2.1.2 数据准备 

2.2 配置数据库连接字符串 

2.3 写持久层代码

三、MyBatis的基本操作 

3.1 打印日志 

3.2 参数传递 

3.3 增(Insert) 

3.4 删(Delete)

3.5 改(update) 

3.6 查(select)

3.6.1 起别名

3.6.2 结果映射 

3.6.3 开启驼峰命名(推荐) 

四、MyBatis XML配置文件 

4.1 配置连接字符串和MyBatis

4.2 写持久层代码 

4.2.1 添加mapper接口

4.2.2 添加UserinfoXmlMapper.xml 

4.3 增删改查操作 

4.3.1 增(Insert)

4.3.2 删(Delete)

4.3.3 改(Update) 

4.3.4 查(Select)

五、多表查询 

六、#{}和${}

6.1 #{}和${}使用

6.2 #{}和${}区别 

6.3 #{}的优势 

6.4 排序功能

6.5 like查询


一、什么是MyBatis?

  • MyBatis是一款优秀的持久层框架,用于简化JDBC的开发
  • MyBatis本是Apache的一个开源项目iBatis,2010年这个项目由apache迁移到google code,并改名为MyBatis。

持久层:指的就是持久化操作的层,通常指数据访问层(dao),用来操作数据库的。

简单来说MyBatis是更简单完成程序和数据库交互的框架,也就是更简单的操作和读取数据工具

二、MyBatis入门 

MyBatis操作数据库的步骤:

  • 准备工作(创建springboot工程、数据库表准备,实体类)
  • 引入MyBatis的相关依赖,配置MyBtis(数据库连接信息)
  • 编写SQL语句(注解/XML)
  • 测试

2.1 准备工作

2.1.1 创建工程

创建springbboot工程,并导入MyBatis的依赖,MySQL的驱动包

2.1.2 数据准备 

创建用户表,并创建对应的实体类UserInfo

-- 创建数据库
DROP DATABASE IF EXISTS mybatis_test;

CREATE DATABASE mybatis_test DEFAULT CHARACTER SET utf8mb4;

-- 使用数据数据
USE mybatis_test;

-- 创建表[用户表]
DROP TABLE IF EXISTS userinfo;
CREATE TABLE `userinfo` (
        `id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
        `username` VARCHAR ( 127 ) NOT NULL,
        `password` VARCHAR ( 127 ) NOT NULL,
        `age` TINYINT ( 4 ) NOT NULL,
        `gender` TINYINT ( 4 ) DEFAULT '0' COMMENT '1-男 2-女 0-默认',
        `phone` VARCHAR ( 15 ) DEFAULT NULL,
        `delete_flag` TINYINT ( 4 ) DEFAULT 0 COMMENT '0-正常, 1-删除',
        `create_time` DATETIME DEFAULT now(),
        `update_time` DATETIME DEFAULT now(),
        PRIMARY KEY ( `id` ) 
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4; 

-- 添加用户信息
INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
VALUES ( 'admin', 'admin', 18, 1, '18612340001' );
INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
VALUES ( 'zhangsan', 'zhangsan', 18, 1, '18612340002' );
INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
VALUES ( 'lisi', 'lisi', 18, 1, '18612340003' );
INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
VALUES ( 'wangwu', 'wangwu', 18, 1, '18612340004' );

创建对应的实体类UserInfo

import lombok.Data;

import java.util.Date;

@Data
public class Userinfo {
    private Integer id;
    private String username;
    private String password;
    private Integer age;
    private Integer gender;
    private String phone;
    private Integer deleteFlag;
    private Date createTime;
    private Date updateTime;

}

2.2 配置数据库连接字符串 

MyBatis中要连接数据库,需要数据库相关参数配置

  • MySQL驱动类
  • 登录名
  • 密码
  • 数据库连接字符串 

 如果是application.yml文件,配置内容如下:

#数据库连接配置
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
    username: root
    password: 111111
    driver-class-name: com.mysql.cj.jdbc.Driver

2.3 写持久层代码

在项目中,创建持久层接口UserInfoMapper 

import com.example.MyBatis.model.UserInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface UserInfoMapper {
    @Select("select * from userinfo")
    List<UserInfo> getUserInfoAll();
}

MyBatis的持久层接口规范一般都叫xxxMapper

@Mapper注解:表示是MyBatis中的Mapper接口

  • 程序运行时,框架会自动生成接口的实现类对象(代理对象),并交给Spring的IOC容器管理
  • @Select注解:代表的就是select查询,也就是注解对应方法的具体实现内容

使用IDEA自动生成测试类

1、在需要测试的Mapper接口中,右键->Generate->Test

2、书写测试代码

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import static org.junit.jupiter.api.Assertions.*;

@SpringBootTest
class UserInfoMapperTest {
    @Autowired
    private UserInfoMapper userInfoMapper;

    @Test
    void getUserInfoAll() {
        System.out.println(userInfoMapper.getUserInfoAll());
    }
}

测试类上添加了注解@SpringBootTest,在测试类在运行时,就会自动加载Spring的运行环境。我们通过@Autowired这个注解,注入我们要测试的类,就可以开始进行测试了。

运行结果如下:

三、MyBatis的基本操作 

        上面我们学习了MyBatis的查询操作,接下来我们学习MyBatis的增,删,改操作,在学习这些操作之前,我们先来学习MyBatis日志打印。

3.1 打印日志 

在MyBatis当中我们可以借助日志,查看sql语句的执行、执行传递的参数以及执行结果。

在配置文件中进行配置即可

mybatis:
  configuration: # 配置打印 MyBatis⽇志
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

重新运行程序,可以看到SQL执行内容,以及传递参数和执行结果。

3.2 参数传递 

需求:查询id=2的用户,对应的SQL语句就是:select * from userinfo where id = 2

但是这样的话,只能查找id=2的数据,所以SQL语句中的id值不能写成固定的值,需要变为动态的数值。解决办法:在方法中添加一个参数,将方法中的参数,传给SQL语句,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值