MyBatis(上)

发布时间:2026/7/25 2:56:07
MyBatis(上) 1. 什么是MyBatis?• MyBatis是⼀款优秀的持久层框架⽤于简化JDBC的开发。• MyBatis本是Apache的⼀个开源项⽬iBatis2010年这个项⽬由apache迁移到了googlecode并 且改名为MyBatis。2013年11⽉迁移到Github.• 官⽹MyBatis中⽂⽹ 在上⾯我们提到⼀个词持久层• 持久层指的就是持久化操作的层,通常指数据访问层(dao),是⽤来操作数据库的.简单来说MyBatis是更简单完成程序和数据库交互的框架也就是更简单的操作和读取数据库⼯具 接下来我们就通过⼀个⼊⻔程序让⼤家感受⼀下通过Mybatis如何来操作数据库2. MyBatis⼊⻔Mybatis操作数据库的步骤1. 准备⼯作(创建springboot⼯程、数据库表准备、实体类)2. 引⼊Mybatis的相关依赖配置Mybatis(数据库连接信息)3. 编写SQL语句(注解/XML)4. 测试2.1 准备⼯作2.1.1 创建⼯程创建springboot⼯程并导⼊mybatis的起步依赖、mysql的驱动包Mybatis是⼀个持久层框架,具体的数据存储和数据操作还是在MySQL中操作的,所以需要添加 MySQL驱动 项⽬⼯程创建完成后⾃动在pom.xml⽂件中导⼊Mybatis依赖和MySQL驱动依赖 版本会随着SpringBoot版本发⽣变化 SpringBoot3.X对⽤MyBatis版本为3.X对应关系参考:https://mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/!--Mybatis 依赖包-- dependency groupIdorg.mybatis.spring.boot/groupId artifactIdmybatis-spring-boot-starter/artifactId version3.0.3/version /dependency !--mysql驱动包-- dependency groupIdcom.mysql/groupId artifactIdmysql-connector-j/artifactId scoperuntime/scope /dependency2.1.2 数据准备创建⽤⼾表,并创建对应的实体类User2.1.2 数据准备 创建⽤⼾表,并创建对应的实体类User -- 使⽤数据数据 USE mybatis_test; -- 创建表[⽤⼾表] DROP TABLE IF EXISTS user_info; CREATE TABLE user_info ( 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() ON UPDATE now(), PRIMARY KEY ( id ) ) ENGINE INNODB DEFAULT CHARSET utf8mb4; -- 添加⽤⼾信息 INSERT INTO mybatis_test.user_info( username, password, age, gender, phone ) VALUES ( admin, admin, 18, 1, 18612340001 ); INSERT INTO mybatis_test.user_info( username, password, age, gender, phone ) VALUES ( zhangsan, zhangsan, 18, 1, 18612340002 ); INSERT INTO mybatis_test.user_info( username, password, age, gender, phone ) VALUES ( lisi, lisi, 18, 1, 18612340003 ); INSERT INTO mybatis_test.user_info( 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? characterEncodingutf8useSSLfalse username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver注意事项 如果使⽤MySQL是5.x之前的使⽤的是com.mysql.jdbc.Driver如果是⼤于5.x使⽤的 是“com.mysql.cj.jdbc.Driver”.如果是application.properties⽂件,配置内容如下:#驱动类名称 spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver #数据库连接的url spring.datasource.urljdbc:mysql://127.0.0.1:3306/mybatis_test? characterEncodingutf8useSSLfalse #连接数据库的⽤⼾名 spring.datasource.usernameroot #连接数据库的密码 spring.datasource.passwordroot2.3 写持久层代码在项⽬中,创建持久层接⼝UserInfoMapperimport com.example.demo.model.UserInfo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; import java.util.List; Mapper public interface UserInfoMapper { //查询所有⽤⼾ Select(select username, password, age, gender, phone from user_info) public ListUserInfo queryAllUser(); }Mybatis的持久层接⼝规范⼀般都叫XxxMapper Mapper注解表⽰是MyBatis中的Mapper接⼝• 程序运⾏时,框架会⾃动⽣成接⼝的实现类对象(代理对象)并给交Spring的IOC容器管理• Select注解代表的就是select查询也就是注解对应⽅法的具体实现内容.2.4 单元测试在创建出来的SpringBoot⼯程中在src下的test⽬录下已经⾃动帮我们创建好了测试类我们可以 直接使⽤这个测试类来进⾏测试.import com.example.demo.mapper.UserInfoMapper; import com.example.demo.model.UserInfo; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import java.util.List; SpringBootTest class DemoApplicationTests { Autowired private UserInfoMapper userInfoMapper; Test void contextLoads() { ListUserInfo userInfoList userInfoMapper.queryAllUser(); System.out.println(userInfoList); } }测试类上添加了注解SpringBootTest该测试类在运⾏时就会⾃动加载Spring的运⾏环境. 我们通过Autowired这个注解,注⼊我们要测试的类,就可以开始进⾏测试了运⾏结果如下:返回结果中,可以看到,只有SQL语句中查询的列对应的属性才有赋值使⽤Idea⾃动⽣成测试类 除此之外,也可以使⽤Idea⾃动⽣成测试类1. 在需要测试的Mapper接⼝中,右键-Generate-Test2. 选择要测试的⽅法,点击OK3. 书写测试代码import com.example.demo.model.UserInfo; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import java.util.List; SpringBootTest class UserInfoMapperTest { Autowired private UserInfoMapper userInfoMapper; Test void queryAllUser() { ListUserInfo userInfoList userInfoMapper.queryAllUser(); System.out.println(userInfoList); } }记得加SpringBootTest 注解,加载Spring运⾏环境运⾏结果: