MyBatis深入分析数据库交互与关系映射
作者:从零开始的-CodeNinja之路
前言
在应用分层学习时,我们了解到web应用程序⼀般分为三层,即:Controller、Service、Dao.之前的案例中,请求流程如下:浏览器发起请求,先请求Controller,Controller接收到请求之后,调用Service进行业务逻辑处理,Service再调用Dao,真实的数据从数据库中是读取.
什么是MyBatis
MyBatis是⼀款优秀的持久层框架,用于简化JDBC的开发。
在上面我们提到⼀个词:持久层
持久层:指的就是持久化操作的层,通常指数据访问层(dao),是用来操作数据库的.
简单来说:MyBatis是更简单完成程序和数据库交互的框架,也就是更简单的操作和读取数据库工具
Mybatis操作数据库的步骤:
- 准备工作(创建springboot工程、数据库表准备、实体类
- 引入Mybatis的相关依赖,配置Mybatis(数据库连接信息)
- 编写SQL语句(注解/XML)
- 测试
MyBatis准备工作
(创建工程、数据库表准备、实体类)
创建springboot工程,并导入mybatis的起步依赖、mysql的驱动包
Mybatis是⼀个持久层框架,具体的数据存储和数据操作还是在MySQL中操作的,所以需要添加MySQL驱动
项目工程创建完成后,项目管理器会自动在pom.xml⽂件中,导入Mybatis依赖和MySQL驱动依赖
配置数据库
Mybatis中要连接数据库,需要数据库相关参数配置
- MySQL驱动类
- 登录名
- 密码
- 数据库连接字符串
如果是application.yml⽂件,配置内容如下:(一定要注意空格和对齐,没对齐就报错,直接进行Copy即可,手写极其容易出错)
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/java_blog_spring?characterEncoding=utf8&useSSL=false
username: root
password: 232122
driver-class-name: com.mysql.cj.jdbc.Driver
mvc:
favicon:
enable: false
profiles:
active: devmybatis:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
map-underscore-to-camel-case: truelogging:
file:
name: logs/springboot.log
logback:
rollingpolicy:
max-file-size: 1KB
file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i
level:
com:
example:
demo: debug
如果是application.properties⽂件,配置内容如下:
#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver#数据库连接的url
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false#连接数据库的用户名
spring.datasource.username=root#连接数据库的密码
spring.datasource.password=root
编写SQL语句(注解/XML)
数据准备
在自己的数据库中,创建用户表,并创建对应的实体类User
代码如下:(直接进行Copy即可,手写太过麻烦)
-- 创建数据库 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,实体类的属性名与表中的字段名⼀⼀对应
例如:数据库的字段名是user_name,在idea中我们就要创建userName的变量来接收,前面我们已经导入了驼峰自动转换,所以不必担心在数据库交互时的连接问题
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; }
写持久层代码
Mybatis的持久层接⼝规范⼀般都叫XxxMapper
@Mapper注解:表示是MyBatis中的Mapper接⼝
- 程序运行时,框架会自动生成接⼝的实现类对象(代理对象),并给交Spring的IOC容器管理
- @Select注解:代表的就是select查询,也就是注解对应方法的具体实现内容.
在上面的测试中,我们需要创建持久层接⼝UserInfoMapper
import 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 userinfo") public List<UserInfo> queryAllUser(); }
上述代码中我是使用了一个xml的方式(就是加注解)来操作数据库的
测试
使用Idea自动生成测试类
在需要测试的Mapper接⼝中,右键->Generate->Test
选择要测试的方法,点击OK
书写测试代码
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//注意,此处的SpringBootTest必须填上,它是为了引入前面所写代码引入的注解 class UserInfoMapperTest { @Autowired private UserInfoMapper userInfoMapper; @Test void queryAllUser() { List<UserInfo> userInfoList = userInfoMapper.queryAllUser(); System.out.println(userInfoList); } }
总结
Mybatis操作数据库的步骤:
- 准备工作(创建springboot工程、数据库表准备、实体类)
- 引入Mybatis的相关依赖,配置Mybatis(数据库连接信息)
- 编写SQL语句(注解/XML)
- 测试
以上就是MyBatis深入分析数据库交互与关系映射的详细内容,更多关于MyBatis数据库交互的资料请关注脚本之家其它相关文章!