掌握后端接口开发:软件测试学习笔记中的数据库与ORM框架

发表时间: 2024-05-07 17:35

本文转自测试人社区,原文链接:jck28 - 小柒 - 后端接口开发 - 数据库与ORM框架 - 学习笔记 - 测试人社区

一,ORM介绍

1.1 概念

  • Object Relational Mapping, 对象关系映射
  • 作用是在关系型数据库和对象之间做一个映射, 这样在具体操作数据库的时候,不需要编写SQL语句,只要操作对象就可以了

二,Mybatis

2.1 需求

  • 通过mybatis 查询数据库 user表的所有记录
  • 封装到User对象中
  • 打印到控制台上

2.2 实现步骤

(1) 创建数据库及user表

(2) 创建maven工程,导入依赖(MySQL驱动、mybatis、junit)

<dependency>			<groupId>org.junit.jupiter</groupId>			<artifactId>junit-jupiter-api</artifactId>			<version>5.8.2</version>			<scope>test</scope>		</dependency>		<dependency>			<groupId>org.projectlombok</groupId>			<artifactId>lombok</artifactId>			<version>RELEASE</version>			<scope>compile</scope>		</dependency><!-- mysql连接 -->		<dependency>			<groupId>mysql</groupId>			<artifactId>mysql-connector-java</artifactId>			<version>8.0.28</version>		</dependency>		<!--mybatis坐标-->		<dependency>			<groupId>org.mybatis</groupId>			<artifactId>mybatis</artifactId>			<version>3.5.9</version>		</dependency>

(3) 编写 TestUser实体类 ,对应属性有Get/Set方法

package com.example.mybatisTest.entity;import lombok.Getter;import lombok.Setter;import lombok.ToString;import java.time.LocalDateTime;@Getter@Setter@ToStringpublic class TestUser {    /**     * 主键     */    private Integer id;    /**     * 用户名     */    private String userName;    /**     * 密码     */    private String password;    /**     * 邮箱     */    private String email;    /**     * 自动生成用例job名称 不为空时表示已经创建job     */    private String autoCreateCaseJobName;    /**     * 执行测试job名称 不为空时表示已经创建job     */    private String startTestJobName;    /**     * 默认Jenkins服务器     */    private Integer defaultJenkinsId;    /**     * 创建时间     */    private LocalDateTime createTime;    /**     * 更新时间     */    private LocalDateTime updateTime;}

(4) 编写 TestUserMapper.xml映射配置文件(ORM思想)

  • 映射配置文件命名规则为 :实体类名+Mapper.xml
  • 写 mapper 标签内的sql语句不用加结尾;
  • 有多个xml文件有相同id的情况下,mapper标签上添加namespace 属性
  • 映射配置
  • select 标签的 resultType 属性就是返回结果类型声明
  • resultType 对应的值为实体类的全路径 –> 包名.类名
  • 根据数据库的字段名和实体类属性名的对应关系,调用set方法来自动完成映射封装
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"        "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--  namespace:命名空间,与sql标签的id属性共同构成唯一标识--><mapper namespace="findUser">    <!--  resultType:返回结果类型,完成自动的映射封装,value为对应封装的实体类全路径(包名+类名)-->    <select id ="findAll" resultType="com/example/mybatisTest/entity/TestUser">  <!--这里建立映射关系-->        SELECT * FROM test_user    </select></mapper>

(5) 编写 sqlMapConfig.xml核心配置文件

数据库环境配置

  • environment 运行环境有多种:生产环境、开发环境、测试环境、灰度 对事务管理器进行配置 transactionManager:JDBC 是否使用 连接池 dataSource:POOLED 数据库连接配置:property,driver,url,username,password

映射关系配置的引入(引入映射配置文件的路径)

  • 核心配置文件的约束头和映射配置文件的约束头不一样 核心配置文件的根标签是 configuration
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"        "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>    <!--配置连接数据库的环境--><!--    default - 默认环境配置-->    <environments default="development">        <environment id="development"><!--            transactionManager - 事务管理器-->            <transactionManager type="JDBC"/><!--            dataSource - 数据库的连接池 POOLED - 表示使用mybatis的连接池; UNPOOLED - 不用mybatis的连接池,每次都用新的连接 -->            <dataSource type="POOLED"><!--                配置数据库连接属性-->                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>                <property name="url" value="jdbc:mysql://110.40.250.165:3307/turorials?characterEncoding=UTF-8&useUnicode=true&useSSL=false&serverTimezone=GMT"/>                <property name="username" value="root"/>                <property name="password" value="root"/>            </dataSource>        </environment>        <environment id="test">            <transactionManager type="JDBC"/>            <dataSource type="POOLED">                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>                <property name="url" value="jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC"/>                <property name="username" value="root"/>                <property name="password" value="1111"/>            </dataSource>        </environment>    </environments><!--    mapper映射关系引入-->    <mappers>        <mapper resource="TestUserMapping.xml"/>        <mapper resource="TestUser2Mapping.xml"/>    </mappers></configuration>

(6) 编写测试代码

package com.ceshiren;import com.ceshiren.entity.TestUser;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.junit.jupiter.api.Test;import java.io.IOException;import java.io.InputStream;import java.util.List;public class MybatisTest {    @Test    void mybatisTest(){        try {//          (1) 加载核心配置文件            InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");//          (2) 获取sqlSessionFactory工厂对象            SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);//          (3) 获取sqlSession会话对象            SqlSession sqlSession = build.openSession();//          (4) 执行sql(获取TestUserMapping文件配置的数据sql,s为 namespace + id            List<Object> selectList = sqlSession.selectList("findUser.findAll", TestUser.class);//          (5) 打印结果            selectList.forEach(System.out::println);//          (6) 释放资源            sqlSession.close();        } catch (IOException e) {            e.printStackTrace();        }    }}

软件测试开发免费视频教程分享 - 公众号 - 测试人社区