【SSM框架】Mybatis详解04(源码自取),构建完整项目并且测试框架

简介: 我们已经学会用Maven快速构建管理项目了,这篇文章就正式构建一个完整的项目。通过这个案例可以复习maven的使用,自行创建项目,使用MyBatis框架并进行测试。

✨前言


我们已经学会用Maven快速构建管理项目了,这篇文章就正式构建一个完整的项目。


通过这个案例可以复习maven的使用,自行创建项目,使用MyBatis框架并进行测试。


文章目录


完善项目构建


在idea中添加数据库的可视化


为了我们在编写程序进行测试的时候更加的方便,我们在idea中添加数据库可视化。

按着以下步骤就可以实现。

这里需要注意一下,我们先进行测试一下,一定要注意自己的数据库驱动是否与自己的数据库版本相对应,以免出现无法操作数据库的问题


添加jdbc.properties属性文件(数据库的配置)

这一步呢,是为了使得我们的框架可以通过java连接到数据库,进而进行一系列增删改查的操作

注意这里有个小细节,jdbc.driverclass的值在jdbc的一次大改版中有变化哦,如果版本过高就不是这个哦,网上可以查到这里就不列出来了。自己动手也很重要。


添加SqlMapConfig.xml文件,Mybatis的核心配置文件

接下来就要开始配置框架的核心配置文件了。

<?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>
<!--   读取属性文件(jdbc.properties)
    属性:
        resources:从resouces目录下找指定名称的文件加载
        url:使用绝对路径加载属性文件
-->
<properties resource="jdbc.properties"></properties>
<!--    配置数据库的环境变量(数据库链接配置)
        default:使用下面的environment标签下的id属性进行指定配置
-->
<!--    <settings>-->
<!--        <setting name="" value=""/>-->
<!--    </settings>-->
<environments default="development">
<!--    开发时再公司使用的数据库配置
        id;就是提供给environment的default属性使用
        -->
    <environment id="development">
<!--        配置事务管理器
            type:指定事务管理的方式
                JDBC:事务的控制交给管理员来处理
                MANAGED:由容器(Spring)来管理事务
-->
        <transactionManager type="JDBC"></transactionManager>
<!--        配置数据源:
            type:指定不同的配置方式
                JNDI:java命名目录接口,在服务器端进行数据库连接池的管理
                POOLED:使用数据库连接池
                UNPOOLED:不使用数据库连接池
-->
        <dataSource type="POOLED">
<!--      配置数据库连接的基本参数
            private String driver;
            private String url;
            private String username;
            private String password;
-->
            <property name="driver" value="${jdbc.driverclassName}"/>
            <property name="url" value="${jdbc.url}"/>
            <property name="username" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>
        </dataSource>
    </environment>
<!--在家时候数据库配置-->
<!--    <environment id="home">-->
<!--        <transactionManager type=""></transactionManager>-->
<!--        <dataSource type=""></dataSource>-->
<!--    </environment>-->
<!--&lt;!&ndash;上线的数据库配置&ndash;&gt;-->
<!--    <environment id="online">-->
<!--        <transactionManager type=""></transactionManager>-->
<!--        <dataSource type=""></dataSource>-->
<!--    </environment>-->
</environments>
<!--    注册mappe.xml文件
        resouces:从resouces目录下找指定名称的文件注册
        url:使用绝对路径注册
        class:动态代理方式下的注册
-->
    <mappers>
        <mapper resource="StudentMapper.xml"></mapper>
    </mappers>
</configuration>


标签的解释在注释里哦。

这里有个注意的小节点,标签的顺序不可以随意更改哦!!!要时刻注意。

创建实体类Student,用来封装数据

这里的实体类,为了方便数据的封装,建议按照数据库进行构建哦。

当然我就是调皮不愿意按着数据库来,也可以,后面又解决办法哦。


package com.longlong.pojo;
import java.util.Objects;
/**
 * @Author DELL longlong
 * @Date 2022/7/1 14:51
 * @Version 1.0
 * @Function 实体类
 */
public class Student {
    private Integer id;
    private String name;
    private String email;
    private Integer age;
    public Student() {
    }
    public Student(String name, String email, Integer age) {
        this.name = name;
        this.email = email;
        this.age = age;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return Objects.equals(id, student.id) && Objects.equals(name, student.name) && Objects.equals(email, student.email) && Objects.equals(age, student.age);
    }
    @Override
    public int hashCode() {
        return Objects.hash(id, name, email, age);
    }
    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", email='" + email + '\'' +
                ", age=" + age +
                '}';
    }
}

添加完成学生表的增删改查的功能的StudentMapper.xml文件

这个文件呢,就是写我们的sql语句了,你以为和之前一样吗。

不不不,这就很简便了,一起看看吧。


<?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">
<!--mapper:是整个文件的打标签,用来区分开始和结束xml文件
    属性:
        namespace:指定命名空间(相当于包名),用来区分不同mapper.xml
        文件中的相同id
-->
<mapper namespace="ll">
<!--    完成查询全部学生的功能
        List<Student> getAll();
        resultType:指定查询返回的结果集的类型,如果是集合,则必须是泛型
        parameterType:如果有参数,则通过他来完成指定参数的类型
-->
    <select id="getAll" resultType="com.longlong.pojo.Student" >
        select *
        from student
    </select>
</mapper>

这里的功能很简单只有查询全部的简单功能,后面我们会完成更多的复杂功能。


创建测试类,进行功能测试


终于迎来了我们的最后一步,功能测试。

可能小伙伴们还体会不到,这到底有什么简便的。

不要着急,跟着我多做几个功能就可以体会到了


package com.longlong.test;
import com.longlong.pojo.Student;
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.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
/**
 * @Author DELL longlong
 * @Date 2022/7/3 19:32
 * @Version 1.0
 * @Function
 */
public class Mytest {
   @Test
    public void testGetAll() throws IOException {
       InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
       SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
       SqlSession sqlSession = factory.openSession();
       List<Student> list = sqlSession.selectList("ll.getAll");
//       list.forEach(student -> System.out.println(student));
       for (Student student : list){
           System.out.println(student);
       }
       System.out.println("OK");
      sqlSession.close();
   }
}

测试结果展示

这里小编遇到了一个Mysql数据库时区的问题,有时间也会把解决方法上传到博客中。


✨总结


今天我们完成了第一次使用mybatis框架,并且成功了。开心呢!!!

下面就要深入学习配置文件的标签和属性,运行过程,作用!!!

下面我们会完善更多复杂功能并且介绍标签和属性的用法和规则!!!

本次源码放在代码仓库gitee,自取链接

相关文章
|
6天前
|
SQL Java 数据库连接
MyBatis 框架入门理论与实践
MyBatis 框架入门理论与实践
23 6
|
3天前
|
Web App开发 IDE 测试技术
【专栏】深入理解自动化测试框架 Selenium 的核心组件
【4月更文挑战第27天】Selenium 是一款广泛使用的自动化测试框架,核心组件包括 WebDriver(与浏览器交互的接口,支持多浏览器测试),IDE(可视化的测试脚本录制和编辑工具)和 Grid(分布式测试,实现多机器并行测试)。通过这些组件,开发者能高效、稳定地进行自动化测试,但需注意浏览器兼容性、脚本维护和性能问题。理解并掌握这些组件的使用,能提升测试效率和质量。
|
1天前
|
前端开发 JavaScript 测试技术
深入探索自动化测试框架:Selenium与Appium的对比分析
【4月更文挑战第29天】 在快速迭代的软件发展环境中,自动化测试已成为确保软件质量和加速产品上市的关键步骤。本文将重点探讨两种广泛使用的自动化测试框架——Selenium和Appium,通过对比它们的核心特性、适用场景及执行效率,为软件开发和测试团队提供选择指南。文章不仅分析了各自的技术架构和脚本语言支持,还讨论了它们在处理Web应用和移动应用测试时的优缺点,旨在帮助读者根据项目需求做出更加明智的选择。
|
3天前
|
敏捷开发 监控 Java
深入理解与应用软件自动化测试框架
【4月更文挑战第27天】 在软件开发的生命周期中,确保代码质量和功能的正确性是至关重要的。随着敏捷开发方法的普及和产品迭代速度的加快,传统的手动测试方法已经难以满足快速交付的需求。本文将重点讨论软件自动化测试框架的构建与实施,旨在为读者提供一种提高测试效率、确保测试质量的有效途径。我们将介绍自动化测试的基本概念、关键优势以及面临的挑战,并通过具体的案例分析,展示如何根据项目特点选择合适的测试框架,以及如何设计、执行和维护自动化测试脚本。
|
4天前
|
Web App开发 IDE 测试技术
深入理解自动化测试框架Selenium的设计与实践
【4月更文挑战第27天】在软件开发周期中,确保代码质量和功能正确性至关重要。随着敏捷开发的普及和持续集成/持续部署(CI/CD)的实践,自动化测试已成为现代开发工作流程的核心部分。本文将探讨一个广泛使用的开源自动化测试工具——Selenium,并剖析其设计原理、架构以及在实际中的应用。我们将通过具体案例分析,展示如何有效利用Selenium进行跨浏览器测试,并讨论在真实环境中可能遇到的挑战及解决方案。
|
5天前
|
SQL 缓存 Java
|
5天前
|
JavaScript API
【vue】分环境构建(开发/测试/生产)配置
【vue】分环境构建(开发/测试/生产)配置
11 1
|
6天前
|
敏捷开发 监控 Java
深入理解自动化测试:框架选择与实践策略
【4月更文挑战第24天】 在软件开发的复杂多变的环境中,自动化测试已经成为确保产品质量和加速迭代的关键工具。本文将探讨自动化测试框架的选择要素,并结合具体案例分析如何根据项目需求定制有效的自动化测试策略。我们将讨论几个流行的自动化测试框架,如Selenium、Appium和JUnit,并比较它们在不同测试场景下的适用性。通过本文,读者将获得构建和维护自动化测试框架时的实用见解,以及如何优化测试流程以提升效率和准确性。
|
7天前
|
SQL Java 数据库连接
Java从入门到精通:3.1.2深入学习Java EE技术——Hibernate与MyBatis等ORM框架的掌握
Java从入门到精通:3.1.2深入学习Java EE技术——Hibernate与MyBatis等ORM框架的掌握
|
11天前
|
Web App开发 JavaScript 前端开发
深入理解自动化测试框架Selenium的设计与实现
【4月更文挑战第20天】 在软件测试领域,自动化测试已成为提升测试效率和确保产品质量的关键手段。Selenium作为一款广泛使用的开源自动化测试框架,其设计精巧且功能强大,为Web应用提供了一种灵活、高效的测试解决方案。本文将深入探讨Selenium的核心架构与实现细节,解析其如何通过模拟用户操作来执行测试用例,以及它如何适应不断变化的Web技术标准。通过对Selenium内部机制的剖析,旨在帮助测试工程师更好地掌握该工具,并在测试实践中发挥其最大效能。