【SSM】MyBatis(一.基础)
创始人
2025-05-30 00:33:19

文章目录

  • 1.ORM
  • 2. 数据库表
  • 3. 入门程序
    • 3.1 创建项目
    • 3.2 开发
    • 3.3 一个比较完整规格的mybatis程序
    • 3.4 测试案例 junit
    • 3.5 对第一个mybatis使用junit测试
    • 3.6 集成日志框架logback
    • 3.7mybatis工具类编写

1.ORM

Object(JVM中的Java对象)
Relational(关系型数据库)
Mapping(映射)

在这里插入图片描述

  • mybatis是一个半自动化的ORM,可以将数据库中的一条记录映射到一个Java对象,但是sql语句要自己写,所有说是半自动化。
  • Hibernate是一个全自动化的ORM,不用自己写sql语句。

2. 数据库表

DROP TABLE IF EXISTS `t_car`;
CREATE TABLE `t_car`  (`id` bigint(20) NOT NULL COMMENT '自然主键',`car_num` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '汽车编号',`brand` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '汽车品牌',`guide_price` decimal(10, 2) NULL DEFAULT NULL COMMENT '厂商指导价',`produce_time` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '生产日期',`car_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '汽车类型,燃油车 新能源 氢能源',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;SET FOREIGN_KEY_CHECKS = 1;

在这里插入图片描述

3. 入门程序

3.1 创建项目

(1)创建一个名为mybatis的空Project
在这里插入图片描述
(2)修改使用JDK17
在这里插入图片描述
(3)修改指向自己下载的maven3.8.8

在这里插入图片描述

3.2 开发

(1)新建maven模块

在这里插入图片描述
(2)resources
放到这个包下面的一般是配置文件,资源,直接放到这里等同于放到类的根目录之下。
在这里插入图片描述
(3)指定打包方式

jar

(4)引入依赖

	org.mybatismybatis3.5.10mysqlmysql-connector-java5.1.37

(5)编写mybatis核心配置文件:mybatis-config.xml

官网例子:
在这里插入图片描述

(6)编写XxxxMapper.xml文件
官网例子:
在这里插入图片描述

(7)在mybatis-config.xml文件中指定XxxxMapper.xml文件的路径




(8)编写MyBatis程序。

在这里插入图片描述

(9)mybatis的事务管理

* 在mybatis-config.xml文件中,可以通过以下的配置进行mybatis的事务管理
* type属性的值包括两个:JDBC(jdbc)MANAGED(managed)type后面的值,只有以上两个值可选,不区分大小写。
* 在mybatis中提供了两种事务管理机制:第一种:JDBC事务管理器第二种:MANAGED事务管理器
* JDBC事务管理器:mybatis框架自己管理事务,自己采用原生的JDBC代码去管理事务:conn.setAutoCommit(false); 开启事务。....业务处理...conn.commit(); 手动提交事务使用JDBC事务管理器的话,底层创建的事务管理器对象:JdbcTransaction对象。如果你编写的代码是下面的代码:SqlSession sqlSession = sqlSessionFactory.openSession(true);表示没有开启事务。因为这种方式压根不会执行:conn.setAutoCommit(false);在JDBC事务中,没有执行conn.setAutoCommit(false);那么autoCommit就是true。如果autoCommit是true,就表示没有开启事务。只要执行任意一条DML语句就提交一次。* MANAGED事务管理器:mybatis不再负责事务的管理了。事务管理交给其它容器来负责。例如:spring。我不管事务了,你来负责吧。对于我们当前的单纯的只有mybatis的情况下,如果配置为:MANAGED那么事务这块是没人管的。没有人管理事务表示事务压根没有开启。没有人管理事务就是没有事务。* JDBC中的事务:如果你没有在JDBC代码中执行:conn.setAutoCommit(false);的话,默认的autoCommit是true。* 重点:以后注意了,只要你的autoCommit是true,就表示没有开启事务。只有你的autoCommit是false的时候,就表示开启了事务。

(10)小结
在这里插入图片描述

MyBatisIntroductionTest.java

package com.sdnu.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.FileInputStream;
import java.io.InputStream;public class MyBatisIntroductionTest {public static void main(String[] args) throws Exception{//获取SqlSessionFactoryBuilder对象SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();//获取SqlSessionFactory对象//Resources.getResourceAsStream默认就是从类的根路径下开始查找资源//一般情况下,一个数据库对应一个SqlSessionFactory对象InputStream is = Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);//获取SqlSession对象SqlSession sqlSession = sqlSessionFactory.openSession();//执行SQL语句// 返回值是影响数据库表中的记录条数int count = sqlSession.insert("insertCar");System.out.println("插入了几条记录?" + count);//手动提交sqlSession.commit();}
}

mybatis-config.xml





CarMapper.xml



insert into t_car(id, car_num, brand, guide_price, produce_time, car_type)values (null, '1003', '丰田霸道', 30.00, '2000-10-11', '燃油车')

3.3 一个比较完整规格的mybatis程序

package com.sdnu.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.IOException;/*** 采用正规的方式写Mybatis*/
public class MyBatisCompleteTest {public static void main(String[] args) {SqlSession sqlSession = null;try {SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));//开启会话,底层开启事务sqlSession = sqlSessionFactory.openSession();//执行sql语句,处理相关业务int count = sqlSession.insert("insertCar");System.out.println(count);//执行到这里,没有发送异常,提交事务sqlSession.commit();} catch (Exception e) {if(sqlSession != null){sqlSession.rollback();}e.printStackTrace();} finally {if(sqlSession != null){sqlSession.close();}}}
}

3.4 测试案例 junit

加入junit依赖

    junitjunit4.13.2test

要测试的类

package com.sdnu.junit.service;public class MathService {public int sum(int a, int b){return a + b;}public int sub(int a, int b){return a - b;}
}

测试方法:

package com.sdnu.junit.service;import org.junit.Assert;
import org.junit.Test;public class MathServiceTest {@Testpublic void sum(){//单元测试有两个重要的方法//一个是实际值(被测试方法真正执行的结果),一个是期望值(期望得到的结果)MathService mathService = new MathService();//实际值int actual = mathService.sum(1, 2);//期望值int expected = 33;//加断言测试结果Assert.assertEquals(expected, actual);}@Testpublic void sub(){MathService mathService = new MathService();int actual = mathService.sub(10, 5);int expected = 5;Assert.assertEquals(expected, actual);}
}

在这里插入图片描述

3.5 对第一个mybatis使用junit测试

添加依赖

        junitjunit4.13.2test

测试程序

package com.sdnu.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 org.junit.Test;public class CarMapperTest {@Testpublic void testInsertCar(){SqlSession sqlSession = null;try {SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));//开启会话,底层开启事务sqlSession = sqlSessionFactory.openSession();//执行sql语句,处理相关业务int count = sqlSession.insert("insertCar");System.out.println(count);//执行到这里,没有发送异常,提交事务sqlSession.commit();} catch (Exception e) {if(sqlSession != null){sqlSession.rollback();}e.printStackTrace();} finally {if(sqlSession != null){sqlSession.close();}}}
}

3.6 集成日志框架logback

在这里插入图片描述

logback日志框架实现了slf4j标准。(沙拉风:日志门面。日志标准。)第一步:引入logback的依赖。ch.qos.logbacklogback-classic1.2.11第二步:引入logback所必须的xml配置文件。这个配置文件的名字必须叫做:logback.xml或者logback-test.xml,不能是其它的名字。这个配置文件必须放到类的根路径下。不能是其他位置。主要配置日志输出相关的级别以及日志具体的格式。

3.7mybatis工具类编写

SqlSessionUtil.java

package com.sdnu.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;import java.io.IOException;/*** mybatis工具类*/
public class SqlSessionUtil {//工具类的构造方法一般是是私有化的//工具类的一般方法一般是静态方法private static SqlSessionFactory sqlSessionFactory;private SqlSessionUtil(){}static {try {sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));} catch (IOException e) {throw new RuntimeException(e);}}public static SqlSession openSession(){return sqlSessionFactory.openSession();}
}

测试

    @Testpublic void testInsertCarByUtil(){SqlSession sqlSession = SqlSessionUtil.openSession();int count = sqlSession.insert("insertCar");System.out.println(count);sqlSession.commit();sqlSession.close();}

相关内容

热门资讯

重磅!2025陆家嘴论坛6月1... 《国际金融报》记者获悉,5月30日,上海市政府举行新闻发布会,上海市委金融办、中国人民银行办公厅、上...
零基础入门学习Python 0... 目录 1.函数的参数  2.函数文档 3.返回值  4. 局部变量全局变量 5.内嵌函数 6.闭包...
剧本中的灭世海啸即将到来?特朗... 欢迎来到:自说自话的总裁两周前,94岁的巴菲特在退休直播中说,美元,将「下地狱」,我们不会投资。这句...
sdbusplus:servi... 有的时候需要在service(记做s1)的method内访问其他serv...
EEPROM芯片(24c02)... 1、前言 (1)本文主要是通过24c02芯片来讲解I2C接口的EEPROM操作方法,...
鼓励中长期资金指数化投资!上证... 文/王兆寰2025年5月30日下午,上海证券交易所与中证指数公司公布优化上证380指数编制方案,并发...
龙虎榜丨机构今日买入这15股,... 盘后数据显示,5月30日龙虎榜中,共33只个股出现了机构的身影,15只股票呈现机构净买入,18只股票...
年轻人的“茅台”新高不断!重仓... 今年以来,新消费概念股走势强劲。港股的泡泡玛特(国内潮玩行业龙头)今年来新高不断,截至2025年5月...
履新超130天,荣耀CEO李健... 5月下旬,一系列新品发布浪潮席卷而来。中端智能手机市场本就是国内各大厂商的战略要地,如今竞争再度白热...
岷山环能IPO:全员被批“学历... 近日,北交所官网显示,岷山环能高科股份公司(以下简称“岷山环能”)IPO提交注册。据悉,岷山环能20...
【TDengine】一篇文章带... 目录 1、通过docker方式安装 2、相关步骤解释 3、停止运行taos与卸载 1、通过doc...
华人健康并购狂飙:24倍溢价、... 本报(chinatimes.net.cn)记者于娜 见习记者 赵文娟 北京报道在医药零售行业整体放缓...
“国产版ChatGPT”文心一... 文章目录前言实验结果一、文学创作问题1 :《三体》的作者是哪里人?问题2:...
上海试点不动产信托登记,相关税... 继北京之后,上海也开始探索不动产信托财产登记确权新机制。中共上海市委金融委员会办公室、 国家金融监督...
德邦证券董事会改组后“换帅”,... 德邦证券 视觉中国 资料图德邦证券股份有限公司(下称“德邦证券”)步入国有实控阶段后,同步“换帅”...
连续盈利后,理想要靠纯电车赚钱... 增程市场进入红海后,覆盖新能源市场中更多品类,以及进入下沉市场是理想汽车下一步重心文|陈亮 蒋雨彤编...
字节短剧大地震:红果吞并抖音团... 2025年5月29日,抖音集团宣布成立“短剧版权中心”,整合旗下抖音短剧、红果短剧相关BD团队(商务...
算法基础课 算法基础课 第一章 基础算法(一) 1.快速排序——分治[O(n log...
通用航空ETF基金今日上市 低... 中证网讯 5月30日,华夏国证通用航空产业ETF(基金简称:通用航空ETF基金,基金代码:15923...
马斯克放豪言:特斯拉人形机器人... IT之家 5 月 30 日消息,SpaceX 和特斯拉的 CEO 埃隆・马斯克在今日的“Road t...
iOS_performSele... 看一下以下方法的执行结果: 例1:全局并发队列中执行异步任务 dispa...
来了!新型浮动费率基金| 一文... 首批新型浮动费率基金,本周开卖!这是公募改革方案发布后率先推出的创新产品,是将基金公司与投资者利益深...
刷题笔记之十三(有假币、最难的... 目录 1. 求正数数组的最小不可组成和 2. 有假币 3. 继承时先调用父类的构造方法;类中的成员变...
县城的万达广场,王健林才舍不得... 来源:源Sight记者:王言流动危机下,王健林似乎铁了心要将家底一卖到底。近日,国家市场监管总局披露...
三度递表终闻锣响 手回集团今日... 南方财经全媒体记者 林汉垚 北京报道三闯港交所终圆梦。5月30日,历经两次递表折戟后,小雨伞保险经纪...
后“531时代”来袭!隆基绿能... “物竞天择,适者生存。一款产品‘打天下’的时代已经终结,光伏市场已经进化到组件差异化的时代,分布式市...
英伟达吞下45亿美元“哑巴亏”... 出品 | 虎嗅科技组作者 | 丸都山编辑 | 苗正卿头图 | 视觉中国一份喜忧参半的财报,却罕见地让...
授之以渔篇-论文目录设置、双边... 文章目录细说风云自定义目录页眉、页码空白页删除缘起 细说风云 因为平日使用WPS比较习惯࿰...
基于jeecgboot的大屏设...      之前主要是讲了数据源的录入与数据库测试功能,但保存这块没有说,...
江丰电子,8年狂飙14倍,全国... 2017年6月,江丰电子登陆资本市场,发行价4.64元;截至2025年5月29日,按后复权计算,江丰...