2024最新搭建Mybatis配置教程【超详细】

为什么要学习mybatis

首先要弄清楚什么是mybatis?我们为什么要学mybatis

学习MyBatis可以帮助开发人员更高效地进行数据库操作,提高开发效率,并且可以使得应用程序更具可维护性和性能优势。

我们知道Java程序操作数据库是通过jdbc与数据库进行交互,那么说明mybatis有传统jdbc所没有的优势。

传统jdbc方式

// 1. 加载配置文件
Properties pro=new Properties();
pro.load(new FileReader("resource/jdbc.properties"));
// 2. 获取配置文件中连接数据库的信息
String url=pro.getProperty("url");
String user=pro.getProperty("user");
String password=pro.getProperty("password");
String driver=pro.getProperty("driver");
// 3. 加载数据库的驱动
Class.forName(driver);
// 4. 创建数据库的连接
Connection conn = DriverManager.getConnection(url, user, password);// 5. sql 语句
String sql = "select * from s_admin where username=? and password=?";
// 3. 创建执行sql的对象
ps = conn.prepareStatement(sql);
// 4. 给 ?赋值
ps.setString(1, username);
ps.setString(2, password);
// 5. 执行sql
ResultSet rs = ps.executeQuery();
// 6. 如果查询出数据,则返回该条数据
if (rs.next()) {Admin admin = new Admin();admin.setUsername(rs.getString("username"));admin.setPassword(rs.getString("password"));return admin;
// 7. 否则返回空
} else {return null;
}

我们可以看出来通过传统jdbc方式连接数据库比较繁琐,需要加载配置文件、获取配置文件信息、加载数据库驱动、创建数据库连接等一系列操作,还可能导致SQL查询代码混合在JAVA代码中导致代码冗长,开发的效率降低,同时也带来了维护上的一些问题。在实际的项目中SQL语句的变化可能很大,一旦发生变化就要修改JAVA代码,系统需要重新编译,不方便维护。如果映射为Java对象会比较方便。

这也是我们为什么要学习Mybatis的原因

Mybatis简介

Mybatis的开发文档地址:https://mybatis.net.cn/
首先我们要知道什么是Mybatis?Mybatis原是Apache的一个开源项目ibatis,2010年迁移到Google code改名为Mybatis,2013年迁移到GitHub上。
MyBatis 是一款优秀的持久层框架,支持定制化 SQL、存储过程以及高级映射。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

Mybatis解决的问题

  1. 解决数据库驱动的问题
  2. 创建JDBC中必须使用的Connection,Statement,Result对象
  3. 从xml中获取SQL,并执行SQL语句,把ResultSet结果转化为Java对象
  4. 关闭资源

如何使用Mybatis

下载Mybatis:https://github.com/mybatis/mybatis-3/releases
准备阶段:

数据库环境搭建

我这里使用的是Navicat管理工具,下载地址:https://www.navicat.com.cn/download/direct-download
image.png
创建数据库和表

CREATE TABLE `user` (`id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',`name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '姓名',`sex` varchar(1) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '性别',`age` int DEFAULT NULL COMMENT '年龄',PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

image.png
创建Java项目
image.png
注意这里的GroupID填写你的域名,作为组的唯一标识。
等待Maven依赖文件下载完成。在设置中可以看到Maven的版本,我这里是3.9.5
image.png
可以在这个网站上搜索Maven所支持mybatis的版本https://mvnrepository.com/

添加所需依赖

复制依赖文件到pom.xml文件中

<dependencies><!--  junit 测试  --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency><!--  mysql驱动  --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency><!--  mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.9</version></dependency>
</dependencies>

如果出现了像我这样的报错,重构Maven,换到安全版本即可。
image.png
image.png

配置核心文件

创建mybatis-config.xml文件,存放位置在src/main/resources目录下
image.png
核心文件内容,在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="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment></environments><mappers><mapper resource="org/mybatis/example/BlogMapper.xml"/></mappers>
</configuration>

复制内容到mybatis-config.xml中
image.png
我们需要修改的是红色圈里面的内容
下面我简单解释一下

  • <?xml version="1.0" encoding="UTF-8" ?>:指定了XML的版本和编码
  • ](http://mybatis.org/dtd/mybatis-3-config.dtd">):指定了XML的结构,引用了 MyBatis 的配置文件的 DTD 文件
  • :指定了事务管理器的类型为 JDBC,表示使用 JDBC 进行事务管理。
  • :指定了数据源的类型为 POOLED,表示使用连接池来管理数据库连接。
  • :设置数据库驱动的名称,${driver} 是一个占位符,通常在实际应用中会被具体的数据库驱动名称替换。
  • :设置数据库的 URL 地址,${url} 是一个占位符,通常在实际应用中会被具体的数据库 URL 地址替换。
  • :设置连接数据库的用户名,${username} 是一个占位符,通常在实际应用中会被具体的用户名替换。
  • :设置连接数据库的密码,${password} 是一个占位符,通常在实际应用中会被具体的密码替换。
  • :指定了映射器的资源,这里是一个 XML 文件的路径,表示 MyBatis 将加载该路径下的 BlogMapper.xml 文件作为映射器。

在这里我先不填写映射文件的位置
image.png

创建实体User类

创建一个User类
image.png
image.png
完成创建
image.png
注意:我们的字段名要和我们的属性名要保持一致。
image.png
添加对应的有参构造函数、无参构造函数、获取器、设置器、toSring()

创建Mapper接口

首先,什么是Mapper接口?

在 MyBatis 中,Mapper 接口是用于定义数据库操作的接口。Mapper 接口中的方法定义了对数据库的增删改查操作,而具体的 SQL 语句则是通过注解或者 XML 文件来进行配置和映射。

通常情况下,一个 Mapper 接口对应一个数据模型(如一个数据库表),它包含了针对该数据模型的各种操作方法。这些方法的名称和参数类型通常与具体的 SQL 语句相对应,使得调用者能够直观地理解该方法所执行的操作。

MyBatis 提供了多种方式来配置 Mapper 接口和 SQL 语句的映射关系,包括注解方式和 XML 文件方式。通过这些配置,MyBatis 能够将接口方法与对应的 SQL 语句关联起来,从而实现数据库操作的执行。

MyBatis相当于原来的DAO,区别是Mapper仅仅是接口,不需要提供实现类

在Java文件夹下创建cn.niutr.mybatis.mapper.UserMapper接口
image.png
我们为什么要创建这个接口?
Mybatis中有面向接口编程的功能,当我们调用接口中的方法时会自动匹配一个SQL语句并执行。

创建Mybatis的映射文件

我们知道Mybatis是一个ORM(Object Relational Mapping,对象 - 关系映射)框架。

  • Object:Java实体类对象
  • Relational:关系型数据库
  • Mapping:二者之间的对应关系
Java概念数据库概念
属性字段/列
对象记录/行

1、映射文件的命名规则: 表所对应的实体类的类名+Mapper.xml
例如:表user,映射的实体类为User,所对应的映射文件为UserMapper.xml
因此一个映射文件对应一个实体类,对应一张表的操作 MyBatis映射文件用于编写SQL,访问以及操作表中的数据 MyBatis映射文件存放的位置是src/main/resources/mappers目录下

我们在resources文件夹下创建一个mappers文件夹用来存储我们的映射文件,同时创建一个映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.example.BlogMapper"><select id="selectBlog" resultType="Blog">select * from Blog where id = #{id}</select>
</mapper>

映射文件在官方文档中也可以找到
复制映射文件到UserMapper.xml下
image.png
同时我们还要修改上面的内容,这里我简单解释一下:

  • :定义了一个 Mapper(映射器)元素,指定了命名空间为 “org.mybatis.example.BlogMapper”,这个命名空间通常与 Java 中的 Mapper 接口对应。

我们需要改的地方:
假如我们要执行一个插入操作,我们需要再UserMapper接口中添加对应的方法
image.png
同时我们还需要在XML中创建映射关系

2、MyBatis中可以面向接口操作数据,要保证两个一致:
① mapper接口的全类名和映射文件的命名空间(namespace)保持一致
② mapper接口中方法的方法名和映射文件中编写SQL的标签的id属性保持一致

image.png
表–实体类–mapper接口–映射文件
注意还要修改映射器资源位置
image.png
经过一些列操作之后,我们的Mybatis就已经配置完成了

通过Junit测试功能

首先我们要在test文件夹下的java目录创建一个MybatisTest类用于测试
image.png
接下来我们要创建一个测试方法

//读取MyBatis的核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new
SqlSessionFactoryBuilder();
//通过核心配置文件所对应的字节输入流创建工厂类SqlSessionFactory,生产SqlSession对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
//创建SqlSession对象,此时通过SqlSession对象所操作的sql都必须手动提交或回滚事务
//SqlSession sqlSession = sqlSessionFactory.openSession();
//创建SqlSession对象,此时通过SqlSession对象所操作的sql都会自动提交
SqlSession sqlSession = sqlSessionFactory.openSession(true);
//通过代理模式创建UserMapper接口的代理实现类对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//调用UserMapper接口中的方法,就可以根据UserMapper的全类名匹配元素文件,通过调用的方法名匹配
映射文件中的SQL标签,并执行标签中的SQL语句
int result = userMapper.insertUser();
sqlSession.commit();
System.out.println("结果:"+result);

创建结果如下:
image.png
插入成功!
image.png

加入log4j日志功能

添加所需依赖

添加依赖到pom.xml中,开发文档

<!--log4j-->
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.23.0</version>
</dependency>
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.23.0</version>
</dependency>

加入所需配置文件

log4j2的配置文件名为log4j2.properties,存放的位置是src/main/resources目录下

# log4j2.properties# Set to debug or trace if log4j initialization is failing
status = warn# Name of the configuration
name = ConsoleLogConfigDemo# Console appender configuration
appender.console.type = Console
appender.console.name = consoleLogger
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n# Root logger level
rootLogger.level = debug# Root logger referring to console appender
rootLogger.appenderRef.stdout.ref = consoleLogger

结果如下
image.png

MyBatis的增删改查

添加

<!--int insertUser();-->
<insert id="insertUser">
insert into t_user values(null,'admin','男',23)
</insert>

删除

<!--int deleteUser();-->
<delete id="deleteUser">
delete from user where id = 18
</delete>

修改

<!--int updateUser();-->
<update id="updateUser">
update user set name='yxc' where id = 18
</update>

查询一个实体类对象

<!--User getUserById();-->
<select id="getUserById" resultType="cn.niutr.mybatis.pojo.User">
select * from user where id = 22
</select>

查询所有用户信息

<select id="getAllUser" resultType="cn.niutr.mybatis.pojo.User">select * from user
</select>

如下测试文件

@Test
public void testCRUD() throws IOException {InputStream is = Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);SqlSession sqlSession = sqlSessionFactory.openSession(true);UserMapper mapper = sqlSession.getMapper(UserMapper.class);//int result = mapper.UpdateUser();//int result = mapper.deleteUser();//        User user = mapper.getUserById();//        System.out.println(user);List<User> allUser = mapper.getAllUser();for (User user : allUser) {System.out.println(user);}
}

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

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

相关文章

蓝桥杯——矩形拼接

矩形拼接 题目分析 对于一个矩形而言&#xff0c;我可以把它横着放&#xff0c;而可以把它竖着放&#xff0c;比如下图&#xff0c; 3个矩形的拼接情况可以通过在纸上画图模拟出来&#xff0c;情况有以下三种 ​ 图1 图3是4条边&#xff0c;即四边形。观察一下什么时候会是四…

IO(Linux)

文件系统 前言1. 回顾关于C文件部分函数2. 一些文件知识的共识3. 相对路径4. fwrite中的\0 一、文件描述符fd1. 概念2. 系统调用① open 和 close② write③ read 和 lseek 3. 缺省打开的fd 二、重定向1. 原理2. 系统调用dup23. stdout和stderr的区别4. 进程替换和原来进程文件…

【计算机考研】408学到什么程度才能考130?

408考130要比考研数学考130难的多 我想大部分考过408的考生都是这么认为的。408的难点在于他涉及的范围太广了&#xff0c;首先如果你要备考408&#xff0c;你要准备四门课程&#xff0c;分别是数据结构&#xff0c;计算机组成原理&#xff0c;操作系统和计算机网络。 这四门…

企业计算机服务器中了360勒索病毒如何解密,360后缀勒索病毒处理流程

对于众多的企业来说&#xff0c;企业的数据是企业发展的核心&#xff0c;越来越多的企业开始注重企业的数据安全问题&#xff0c;但随着网络技术的不断发展与应用&#xff0c;网络黑客的攻击加密手段也在不断升级。近期&#xff0c;云天数据恢复中心接到多家企业的求助&#xf…

设计模式—命令模式:探索【命令模式】的奥秘与应用实践!

命令模式 命令模式是一种行为设计模式&#xff0c;它的主要目的是将请求封装成一个对象&#xff0c;从而使得请求的发送者和接收者之间进行解耦。 在命令模式中&#xff0c;命令被封装为一个对象&#xff0c;包含了需要执行的操作以及执行这些操作所需的所有参数。 命令的发送者…

OpenGuass 之 where 1 = 0 处理流程代码走读

一. 前言 在OpenGuass中&#xff0c;如果where 条件中包含where 1 0 等固定为否条件的查询语句&#xff0c;在生成执行计划的时候&#xff0c;执行计划是BaseResult类型&#xff0c;此类型的执行计划不会进行物理数据扫描&#xff0c;如下所示&#xff1a; 对于非固定为否条件&…

【论文阅读】多传感器SLAM数据集

一、M2DGR 该数据集主要针对的是地面机器人&#xff0c;文章正文提到&#xff0c;现在许多机器人在进行定位时&#xff0c;其视角以及移动速度与车或者无人机有着较大的差异&#xff0c;这一差异导致在地面机器人完成SLAM任务时并不能直接套用类似的数据集。针对这一问题该团队…

latex中\documentclass[preprint,review,12pt]{elsarticle}的详细解释

在LaTeX中&#xff0c;\documentclass 是一个命令&#xff0c;用于指定文档所使用的文档类。文档类定义了文档的总体结构、格式和样式。elsarticle 是一个常用的文档类&#xff0c;它主要用于在Elsevier出版的期刊上提交论文。 详细解释 \documentclass[preprint,review,12pt…

Autosar Appl介绍

AUTOSAR架构中的应用层 AUTOSAR 应用层构成AUTOSAR 架构中的最顶层,被认为对所有车辆应用至关重要。AUTOSAR 标准使用“组件”概念指定应用层实现。 在谈论应用层实现时,应该考虑的三个最重要的部分是: AUTOSAR 应用软件组件这些组件的 AUTOSAR 端口AUTOSAR 端口接口 AUTOS…

浙江大学主办!2024年第7届信息通信与信号处理国际会议( ICICSP2024)征稿开启!

会议官网 IEEE | ICICSP 2024 学术会议查询-学术会议交流服务平台-爱科会易 (uconf.com)​www.uconf.com/

OpenChat:性能高达105.7%,第一个超越ChatGPT的开源模型?

OpenChat&#xff1a;性能高达105.7%&#xff0c;第一个超越ChatGPT的开源模型&#xff1f; 前几天开源模型第一还是是Vicuna-33B、WizardLM&#xff0c;这不又换人了。对于开源模型的风起云涌&#xff0c;大家见怪不怪&#xff0c;不断更新的LLM榜单似乎也没那么吸引人了。 …

在springboot项目中调用通义千问api多轮对话并实现流式输出

官网文档 阿里灵积提供了详细的官方文档 如何实现多轮对话 官方文档中提到只需要把每轮对话中返回结果添加到消息管理器中&#xff0c;就可以实现多轮对话。本质上就是将历史对话再次发送给接口。 如何实现流式输出 官方文档中提出使用streamCall()方法就可以实现流式输出&…

ViT的若干细节

之前只看了ViT的大概结构&#xff0c;具体的模型细节和代码实现知之甚少。随着ViT逐渐成为CV领域的backbone&#xff0c;有必要重新审视下。 patch -> token 为了将图片处理成序列格式&#xff0c;很自然地想到将图片分割成一个个patch&#xff0c;再把patch处理成token。 …

Linux学习:初始Linux

目录 1. 引子&#xff1a;1.1 简述&#xff1a;操作系统1.2 学习工具 2. Linux操作系统中的一些基础概念与指令2.1 简单指令2.2 ls指令与文件2.3 cd指令与目录2.4 文件目录的新建与删除指令2.5 补充指令1&#xff1a;2.6 文件编辑与拷贝剪切2.7 文件的查看2.8 时间相关指令2.9 …

【网站项目】202物流管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

不会代码的时候,如何使用Jmeter完成接口测试

1.接口测试简介 接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系统间的相互逻辑依赖关系等。 2.接口测试流程 接口测试的…

2024.3.1 小项目

1、机械臂 #include <myhead.h> #define SER_IP "192.168.125.32" //服务器端IP #define SER_PORT 8888 //服务器端端口号#define CLI_IP "192.168.68.148" //客户端IP #define CLI_PORT 9999 /…

Python matplotlib

目录 1、安装 matplotlib 2、绘制折线图 修改标签文字和线条粗细 校正图形 3、绘制散点图 绘制单点 绘制一系列点 自动计算数据 删除数据点的轮廓 自定义颜色 使用颜色映射 自动保存图表 4、随机漫步 创建 RandomWalk() 类 选择方向 绘制随机漫步图 给点着色 …

最简单的ubuntu远程桌面方法

最简单的ubuntu远程桌面方法 部署环境&#xff1a;Ubuntu 20.04 LTS 现在最常用的远程控制Linux系统的方法是通过XRDP、VNC等&#xff0c;但是安装配置过程繁琐复杂&#xff0c;经常出现各种问题导致连接失败&#xff0c;另外一方面延迟较高&#xff0c;操作卡顿。 经过我坚…

【Java项目介绍和界面搭建】拼图小游戏——键盘、鼠标事件

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏 …