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 list = userInfoMapper.selectAll();
log.info(list.toString());
}
}
打印的日志如下 :
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 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 list = userInfoMapper.selectAll();
log.info(list.toString());
}
@Test
void selectOne() {
log.info(userInfoMapper.selectOne(1).toString());
}
}
这里有个小提醒 : 开发规范中,使用 Mybatis 对数据库进行操作的操作类,也叫XXXXMapper
比如 :
删除分为逻辑删除和物理删除 :
逻辑删除 : 比如一个数据中有一个变量为是否删除,想要删除就把这个变量设为0,没删除就设为1
物理删除 : 从硬盘中删除了,也就是delete
企业中比较推荐逻辑删除,因为物理删除很难挽回,删错了就麻烦了