MyBatis(二)MyBatis入门程序

news2024/11/18 20:27:08

一、版本

软件版本:

  • IntelliJ IDEA:2022.1.4
  • Navicat for MySQL:16.0.14
  • MySQL数据库:8.0.30

组件版本:

  • MySQL驱动:8.0.30
  • MyBatis:3.5.10
  • JDK:Java17
  • JUnit:4.13.2
  • Logback:1.2.11

二、 MyBatis下载

gitHub下载地址:https://github.com/mybatis/mybatis-3

 

 

 

如上图:框架一般都是以jar包的形式存在。后续的项目使用maven直接引入,所以这个jar我们不需要。官方手册需要。

 三、MyBatis入门程序开发步骤

1、写代码前准备:

(1)准备数据库表:汽车表t_car,字段包括:

  • id:主键(自增)【bigint】
  • car_num:汽车编号【varchar】
  • brand:品牌【varchar】
  • guide_price:厂家指导价【decimal类型,专门为财务数据准备的类型】
  • produce_time:生产时间【char,年月日即可,10个长度,'2022-10-11'】
  • car_type:汽车类型(燃油车、电车、氢能源)【varchar】

(2)使用navicat for mysql工具建表

(3)使用navicat for mysql工具向t_car表中插入两条数据,如下:

 

(4)创建Project:建议创建Empty Project,设置Java版本以及编译版本等 

 

(5)设置IDEA的maven

(6)创建Module:普通的Maven Java模块

2、开发步骤:参考 MyBatis中文网步骤即可

步骤1:打包方式:jar(不需要war,因为mybatis封装的是jdbc。)pom.xml文件下编写

<groupId>com.powernode</groupId>
<artifactId>mybatis_001_introduction</artifactId>
<version>1.0-SNAPSHOT</version>
<!--打包方式-->
<packaging>jar</packaging>

 步骤2:引入依赖(mybatis依赖 + mysql驱动依赖)pom.xml文件下编写


<!--mybatis核心依赖-->
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.5.10</version>
</dependency>
<!--mysql驱动依赖-->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>8.0.30</version>
</dependency>

步骤3:在resources根目录下新建mybatis-config.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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/powernode"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--sql映射文件创建好之后,需要将该文件路径配置到这里-->
        <mapper resource=""/>
    </mappers>
</configuration>

注意1:mybatis核心配置文件的文件名可以是任意的,大家通常命名为mybatis-config。

注意2:mybatis核心配置文件存放的位置也可以随意。一般情况会放在resources根下,相当于放到了类的根路径下。

注意3:从官方的文档中理解从 XML 中构建 SqlSessionFactory:①:在mybatus中有一个对象叫SqlSessionFactory,SqlSessionFactory对象的创建需要这个XMl。

注意4:mybatis中的两个主要配置文件:

①:mybatis-config.xml(核心配置文件,主要配置链接数据库的信息等,仅一个)

②:XxxxMapper.xml(这个文件是专门用来编写SQL语句的配置文件,一个表一个)

步骤4:在resources根目录下新建CarMapper.xml配置文件(可以参考mybatis手册拷贝)

<?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先随意写一个-->
<mapper namespace="insertCar">
    <!--insert sql:保存一个汽车信息-->
    <insert id="insertCar">
        insert into t_car
            (id,car_num,brand,guide_price,produce_time,car_type)
        values
            (null,'133','名爵-7',12.34,'2023-10-15','氢能源')
    </insert>
</mapper>

注意1:sql语句最后结尾可以不写“;”

注意2:CarMapper.xml文件的名字不是固定的。可以使用其它名字。

注意3:CarMapper.xml文件的位置也是随意的。这里选择放在resources根下,相当于放到了类的根路径下。

步骤5:将CarMapper.xml文件路径配置到mybatis-config.xml:

 注意:因为resource是自动从跟目录下查找,所以直接复制过来就可以

步骤6:编写MyBatisIntroductionTest代码

  • 在mybatis中,负责执行SQL语句的对象:SqlSession
  • SqlSession:是专门用来执行SQL语句的,是一个Java程序和数据库之间的一次会话。
  • 生成SqlSession对象:需要先用sqlSessionFactoryBuilder对象的build方法获取SqlSessionFactory对象,再通过SqlSessionFactory工厂来生产SqlSession对象。
  • mybatis的核心对象包括:
  • SqlSessionfactionBuilder
  • SqlSessionFactory
  • SqlSession

SqlSessionfactionBuilder --> SqlSessionFactory--> SqlSession

写代码:

package com.powernode.mybatis.test;

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 java.io.InputStream;

/**
 * @author wuw
 * @since 2023-01-31 15:07:13
 */
public class MyBatisIntroductionTest {
    public static void main(String[] args) {
        SqlSession sqlSession = null;
        try {
            // 1.创建SqlSessionFactoryBuilder对象
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
            // 2.创建SqlSessionFactory对象
            SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));
            // 3.创建SqlSession对象
            sqlSession = sqlSessionFactory.openSession();
            // 4.执行SQL
            int count = sqlSession.insert("insertCar");
            System.out.println("更新了几条记录:" + count);
            // 5.提交
            sqlSession.commit();
        } catch (Exception e) {
            // 回滚
            if (sqlSession != null) {
                sqlSession.rollback();
            }
            e.printStackTrace();
        } finally {
            // 6.关闭
            if (sqlSession != null) {
                sqlSession.close();
            }
        }
    }
}

注意1:默认采用的事务管理器是:JDBC。JDBC事务默认是不提交的,需要手动提交。

步骤7:运行程序,查看运行结果,以及数据库表中的数据

 

 四、引入JUnit

JUnit是专门做单元测试的组件。

  • 在实际开发中,单元测试一般是由我们Java程序员来完成的。
  • 我们要对我们自己写的每一个业务方法负责任,要保证每个业务方法在进行测试的时候都能通过。
  • 测试的过程中涉及到两个概念:
  • 期望值
  • 实际值

  • 期望值和实际值相同表示测试通过,期望值和实际值不同则单元测试执行时会报错。
  • 这里引入JUnit是为了代替main方法。

一、使用JUnit步骤:

第一步:创建新模块:

 第二步:引入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.powernode</groupId>
    <artifactId>junit-test</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <dependencies>
    <!--junit依赖-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

</project>

第三步:

  • 编写单元测试类【测试用例】,测试用例中每一个测试方法上使用@Test注解进行标注。
  • 测试用例的名字以及每个测试方法的定义都是有规范的:
  • 测试用例的名字:XxxTest
  • 测试方法声明格式:public void test业务方法名(){}
// 测试用例
public class CarMapperTest{
    
    // 测试方法
    @Test
    public void testInsert(){}
    
    @Test
    public void testUpdate(){}
    
}

建包写方法:

 在test建相应的包和测试类并测试

 五、引入日志框架logback

  • 引入日志框架的目的是为了看清楚mybatis执行的具体sql。
  • 启用标准日志组件,只需要在mybatis-config.xml文件中添加以下配置:【可参考mybatis手册】

mybatis-config.xml文件配置:

<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
  <version>1.2.11</version>
  <scope>test</scope>
</dependency>

标准日志也可以用,但是配置不够灵活,可以集成其他的日志组件,例如:log4j,logback等。

  • logback是目前日志框架中性能较好的,较流行的,所以我们选它。

引入logback的步骤:

第一步:引入logback相关依赖:mybatis.config.xml文件

<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
  <version>1.2.11</version>
  <scope>test</scope>
</dependency>

第二步:引入logback相关配置文件(必须:①:文件名叫做logback.xml或logback-test.xml,②:放到类路径当中)

<?xml version="1.0" encoding="UTF-8"?>

<configuration debug="false">
    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>

    <!--mybatis log configure-->
    <logger name="com.apache.ibatis" level="TRACE"/>
    <logger name="java.sql.Connection" level="DEBUG"/>
    <logger name="java.sql.Statement" level="DEBUG"/>
    <logger name="java.sql.PreparedStatement" level="DEBUG"/>

    <!-- 日志输出级别,logback日志级别包括五个:TRACE < DEBUG < INFO < WARN < ERROR -->
    <root level="DEBUG">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="FILE"/>
    </root>

</configuration>

 

  • 再次执行单元测试方法testInsertCar,查看控制台是否有sql语句输出

 六、MyBatis工具类SqlSessionUtil的封装

  • 每一次获取SqlSession对象代码太繁琐,封装一个工具类
package com.powernode.mybatis.utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

/**
 * @author wuw
 * @since 2023-02-01 13:18:48
 */
public class SqlSessionUtil {

    private static SqlSessionFactory sqlSessionFactory;

    /**
     * 类加载时初始化sqlSessionFactory对象
     */
    static {
        try {
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
            sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 每调用一次openSession()可获取一个新的会话,该会话支持自动提交。
     *
     * @return 新的会话对象
     */
    public static SqlSession openSession() {
        return sqlSessionFactory.openSession(true);
    }
}
  • 测试工具类,将testInsertCar()改造
  • @Test
    public void testInsertCar(){
        SqlSession sqlSession = SqlSessionUtil.openSession();
        // 执行SQL
        int count = sqlSession.insert("insertCar");
        System.out.println("插入了几条记录:" + count);
        sqlSession.close();
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/191911.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实景三维模型道路中有很多破损车辆,有没有可以一键修除或去掉的办法?

在超大规模实景三维数据生产中&#xff0c;三维模型质量会受到移动物体这类客观因素的影响&#xff0c;常常造成道路模型严重扭曲以及纹理的错位。 1.三维场景重建中的移动车辆问题 车辆作为日常出行重要的交通工具&#xff0c;会出现在城市场景中的各个角落且不断移动。由于…

【方案】契约锁电子签章在50多个行业的详细应用场景

2022年&#xff0c;契约锁电子签章持续深入政府机关、集团、高校、医院、金融、工程、汽车、能源、食品、检测等各行业中大型组织&#xff0c;在与各类管理软件集成应用中&#xff0c;不断丰富签署场景&#xff0c;实现了300多种业务文件电子签署应用&#xff0c;持续助力组织数…

数据结构与算法:优先级队列(堆)

1.优先级队列 1.定义 前面介绍过队列&#xff0c;队列是一种先进先出(FIFO)的数据结构&#xff0c;但有些情况下&#xff0c;操作的数据可能带有优先级&#xff0c;一般出队列时&#xff0c;可能需要优先级高的元素先出队列&#xff0c;该中场景下&#xff0c;使用队列显然不…

【Rust】16. 智能指针

智能指针&#xff08;smart pointers&#xff09;是一类数据结构&#xff0c;他们的表现类似指针&#xff0c;但是也拥有额外的元数据和功能引用是一类只借用数据的指针&#xff1b;相反&#xff0c;在大部分情况下&#xff0c;智能指针拥有他们指向的数据 16.1 Box<T>&a…

1610_PC汇编语言_整形的表达

全部学习汇总&#xff1a; GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 前面对于汇编有了一个基本的了解&#xff0c;这一章节主要是看一下汇编视角下的数据表达以及计算方式。 1. 整形会有有符号和无符号两种&#xff0c;一般都是用最高…

快上车,程序狗好用的奇淫技巧

文章目录前言&#x1f34a;缘由⏲️本文阅读时长&#x1f3af;主要目标正文&#x1f9d9;‍♂️1.魔术橡皮擦&#x1f415;2.狗屁不通文章生成器&#x1f95e;3.easypdf&#x1f97d;4.Md2All&#x1f32e;5.CSDN开发助手&#x1f468;‍&#x1f4bb;6.猿如意&#x1f9e9;7.P…

Three.js 初阶基础篇(二)

系列文章目录 我今天又来了更新了&#xff01;&#xff01;&#xff01;今天主要还是回顾一下昨天的一内容&#xff0c;在昨天的基础上又重新梳理了一下&#xff0c;创建动态3D正方体的流程&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 文章目录…

VMware虚拟机安装Linux教程

一、centos7下载 1、centos7的下载 官网下载地址: https://www.centos.org/download/ 2、点击x86_64 二、虚拟机下载与安装 1、VMware虚拟机下载 官网地址: https://www.vmware.com/cn/products/workstation-player.html 打开下载好的.exe文件 安装位置默认在 C 盘下…

【JavaSE】运算符

运算符BIT-3 运算符1. 什么是运算符2. 算数运算符2.1 基本四则运算符2.2 增量运算符2.3 自增/自减运算符3. 关系运算符4. 逻辑运算符&#xff08;重点&#xff09;4.1 逻辑与&&4.2 逻辑或||4.3 逻辑非&#xff01;4.4 短路求值5. 位运算符5.1 按位与&5.2 按位或|5.…

【借助pf4j实现基于spring-boot的插件化开发

借助pf4j实现基于spring-boot的插件化开发背景场景项目地址&结构Demo运行背景 Jenkins、SonarQube等Java实现的Web应用都有插件体系&#xff0c;一般来说都是先从插件市场下载一个插件&#xff0c;然后系统要求重启(某些功能可以不用重启)&#xff0c;插件功能就能在页面上…

SRM-供应商管理系统搭建指南

1、简介1.1、案例简介本文将介绍&#xff0c;如何搭建SRM-供应商管理。1.2、应用场景供应商可注册、提交、修改自己的基本信息及工商信息&#xff0c;上传资质档案、管理产品及样品信息&#xff1b;企业对供应商是否成为合格供应商或淘汰供应商进行准入流程的审批。2、设置方法…

软件设计(四)--MTBF、MTTF、MTTR

软件设计&#xff08;三&#xff09;https://blog.csdn.net/ke1ying/article/details/128808681 31、结构化开发中&#xff0c;过程设计 主要包含对数据结构和算法的设计。 体系结构设计&#xff1a;定义软件的主要结构元素及其关系。 数据设计&#xff1a;基于实体联系图&a…

高压放大器在多波长干涉相位同步解调方法研究中的应用

实验名称&#xff1a;基于激光相位分立调制的多波长干涉相位同步解调方法研究 研究方向&#xff1a;激光测量 测试目的&#xff1a; 在长度测量中&#xff0c;绝对距离测量&#xff08;ADM&#xff09;可实现高精度、大范围和瞬时距离测量&#xff0c;与相对位移测量&#xff0…

Dynamsoft Barcode Reader 9.6.1 for NET Crack

Dynamsoft Barcode Reader以每分钟 500 的速度扫描条码 Dynamsoft Barcode Reader具有灵活 API 的强大条码扫描器 SDK Dynamsoft Barcode Reader无论它是模糊的、扭曲的、黑暗的、遥远的还是移动的&#xff0c;我们都可以扫描它。快速地。 业界最快扫描解码&#xff0c;适用于…

一次线上超时问题,看Ribbon 超时机制

一、线上问题 项目上线后&#xff0c;一段时间内运行都没有问题&#xff0c;突然运营人员说&#xff0c;某个接口一直失败。遂查看线上日志&#xff1a; spring-cloud-openfeign 通过服务名调用的&#xff0c;服务发现没有找到可用服务实例&#xff1f;这是第一反应&#xff0…

如何添加PDF书签?学会这三种方法

随着PDF文档和书籍已经成为我们工作和生活中不可或缺的一部分&#xff0c;许多PDF书签制作器和编辑器应运而生。了解使用 Windows、Mac 兼容或在线软件免费将书签添加到 PDF的多种方法。 什么是 PDF 书签&#xff1f; PDF 文件中的书签与印刷书籍中的纸质或织物书签的工作方式…

1609_PC汇编语言_汇编简介以及first例程后续

全部学习汇总&#xff1a; GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 看了一下&#xff0c;当前看的这个章节还剩下几页没有看完。看完之后&#xff0c;做一个简单的整理。 在上一篇笔记中我提到了关于DJGPP的疑惑&#xff0c;也自己找…

RocketMQ源码-NameServer架构设计及启动流程

本文我们来分析NameServer相关代码&#xff0c;在正式分析源码前&#xff0c;我们先来回忆下NameServer的功能&#xff1a; NameServer是一个非常简单的Topic路由注册中心&#xff0c;其角色类似Dubbo中的zookeeper&#xff0c;支持Broker的动态注册与发现。主要包括两个功能&…

【每日阅读】前端进阶知识点1

如何更改网页中语言属性值 声明当前语言类 html标签更改属性值 lang属性中不区分大小写 en-us en-US 一致 具体可使用 window,document.querySelector(“html”)?.setAttribute(“lang”,newValue); qs库 qs是一个流行的查询参数序列化和解析库。可以将一个普通的object序列…

09_FreeRTOS任务调度器

目录 开启任务调度器vTaskStartScheduler函数 xPortStartScheduler开启任务调度器函数 启动第一个任务 prvStartFirstTask开启第一个任务函数 vPortSVCHandler SVC中断服务函数 出栈/压栈汇编指令详解 开启任务调度器vTaskStartScheduler函数 作用:用于启动任务调度器,…