当前位置: 首页 > article >正文

Mybatis 的操作(要结合上个博客一起)续集

Mybatis 是一款优秀的 持久性 框架,用于简化 JDBC 的开发

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

简单来说 Mybatis 是更简单完成程序和数据库交互的框架

Mybatis 的写法有两种 :

1.xml

2.注解

这两者各有利弊,后面进行总结

Mybatis 要如何去使用呢?

1.引入 Mybatis 依赖,还有对应数据库的依赖,比如 Mysql

2.配置数据库相关信息

3.定义 java 对象

4.写实现

实现的代码的解析(上一篇博客里的代码)

 接下来我们学习单元测试的写法

在需要写单元测试的类中,也就是UserInfoMapper 这个类里面右键选择 generate 然后选择 test

然后把下面三个勾选上再点击OK,@Before 和@After 也可以不选,这两个的意思就是测试方法运行前执行和测试方法运行后执行,在这里我们也一起看看这两个注解

 

这样就生成了测试方法

package com.example.mybatisdemo.mapper;

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

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

class UserInfoMapperTest {

    @BeforeEach
    void setUp() {
    }

    @AfterEach
    void tearDown() {
    }

    @Test
    void selectAll() {
    }
}

我们用日志的方法对其进行测试

package com.example.mybatisdemo.mapper;

import com.example.mybatisdemo.model.UserInfo;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;

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

@Slf4j
@SpringBootTest//---------启动Spring 容器
class UserInfoMapperTest {
    @Autowired
    private UserInfoMapper userInfoMapper;
    @BeforeEach//----------在每个测试方法之前执行
    void setUp() {
        log.info("setup");
    }

    @AfterEach//----------在每个测试方法之后执行
    void tearDown() {
        log.info("After");
    }

    @Test//-----------测试方法
    void selectAll() {
        List<UserInfo> list = userInfoMapper.selectAll();
        log.info(list.toString());
    }
}

打印的日志如下 :  

 第四行就是select  * 的内容,太长了没截完

Mybatis 常见的错误 : 

1.

2.

3. 

4. 

5. 

如果我们想要打印 Mybatis 相关日志,我们也可以在application.xml进行配置

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

再次运行代码

 这样我们就能看到完整的工作流程,方便我们进行调试和找错

条件查询

package com.example.mybatisdemo.mapper;

import com.example.mybatisdemo.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> selectAll();

    @Select("select * from userInfo where id = #{id}")
    UserInfo selectOne(Integer id);

}

然后一样的右键选择generate 然后test,再进行勾选

package com.example.mybatisdemo.mapper;

import com.example.mybatisdemo.model.UserInfo;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

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

@Slf4j
@SpringBootTest
class UserInfoMapperTest {
    @Autowired
    private UserInfoMapper userInfoMapper;
    @Test
    void selectAll() {
        List<UserInfo> list = userInfoMapper.selectAll();
        log.info(list.toString());
    }

    @Test
    void selectOne() {
        log.info(userInfoMapper.selectOne(1).toString());
    }
}

这里有个小提醒 : 开发规范中,使用 Mybatis 对数据库进行操作的操作类,也叫XXXXMapper

比如 : 

 

 删除分为逻辑删除和物理删除 :

逻辑删除 : 比如一个数据中有一个变量为是否删除,想要删除就把这个变量设为0,没删除就设为1

物理删除 : 从硬盘中删除了,也就是delete 

企业中比较推荐逻辑删除,因为物理删除很难挽回,删错了就麻烦了


http://www.kler.cn/a/154511.html

相关文章:

  • Elasticsearch Queries
  • (动态规划基础 打家劫舍)leetcode 198
  • 算法基础学习——快排与归并(附带java模版)
  • MATLAB中extractAfter函数用法
  • 【Rust自学】15.1. 使用Box<T>智能指针来指向堆内存上的数据
  • 全程Kali linux---CTFshow misc入门(14-24)
  • 抓包 Hook 工具Objection
  • Leecode 【一】
  • 2023年AI时代中小企业智能化发展报告
  • Go 语言中 sync 包的近距离观察
  • MySQL表连接详解:解析内连接与外连接的使用方法
  • 【Element-ui】Element-ui是什么?如何安装
  • YOLOv8改进 | 2023 | 给YOLOv8换个RT-DETR的检测头(重塑目标检测前沿技术)
  • javascript的Proxy
  • HNU-青蛙与蚊子
  • 【动态规划】LeetCode-LCR166.珠宝的最高价值
  • 深度学习常用指令(Anaconda、Python)
  • Unity-链接MySql5.7
  • c语言编程题经典100例——(56~60例)
  • 【Python-随笔】使用Python实现屏幕截图
  • 安卓密码框、EditText
  • 基于 HarmonyOS 的用户登录界面实现
  • Pytorch:torch.optim详解
  • 【kafka实践】11|消费位移提交
  • vue之mixin混入
  • 005、简单页面-容器组件