MyBatis快速入门

2023-11-10

Mybatis概述

Mybatis概念

  • MyBatis 是一款优秀的持久层框架,用于简化 JDBC 开发
  • MyBatis 本是 Apache 的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 201311月迁移到Github
  • 官网:https://mybatis.org/mybatis-3/zh/index.html
持久层:
  • 负责将数据到保存到数据库的那一层代码。 以后开发我们会将操作数据库的Java代码作为持久层。而Mybatis就是对jdbc代码进行了封装。
  • JavaEE三层架构:表现层、业务层、持久层。
框架:
  • 框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型
  • 在框架的基础之上构建软件编写更加高效、规范、通用、可扩展


JDBC 缺点

硬编码
  • 注册驱动、获取连接
        上图标1 的代码有很多字符串,而这些是连接数据库的四个基本信息,以后如果要将 Mysql 数据库换成其他的关系型 数据库的话,这四个地方都需要修改,如果放在此处就意味着要修改我们的源代码。
  • SQL语句
        上图标2 的代码。如果表结构发生变化, SQL 语句就要进行更改。这也不方便后期的维护。
操作繁琐
  •  手动设置参数
  • 手动封装结果集
        上图标4 的代码是对查询到的数据进行封装,而这部分代码是没有什么技术含量,而且特别耗费时间的。

Mybatis 优化

  • 硬编码可以配置到配置文件
  • 操作繁琐的地方mybatis自动完成

Mybatis快速入门

需求:查询user表中所有的数据

  •  创建user表,添加数据
create database mybatis;
use mybatis;
drop table if exists tb_user;
create table tb_user (
id int primary key auto_increment ,
username varchar ( 20 ) ,
password varchar ( 20 ) ,
gender char ( 1 ) ,
addr varchar ( 30 )
) ;
INSERT INTO tb_user VALUES ( 1 , 'zhangsan' , '123' , ' ' , ' 北京 ' ) ;
INSERT INTO tb_user VALUES ( 2 , ' 李四 ' , '234' , ' ' , ' 天津 ' ) ;
INSERT INTO tb_user VALUES ( 3 , ' 王五 ' , '11' , ' ' , ' 西安 ' ) ;
  •  创建模块,导入坐标

 在创建好的模块中的 pom.xml 配置文件中添加依赖的坐标

<dependencies>
<!--mybatis 依赖 -->
<dependency>
<groupId> org.mybatis </groupId>
<artifactId> mybatis </artifactId>
<version> 3.5.5 </version>
</dependency>
<!--mysql 驱动 -->
<dependency>
<groupId> mysql </groupId>
<artifactId> mysql-connector-java </artifactId>
<version> 5.1.46 </version>
</dependency>
<!--junit 单元测试 -->
<dependency>
<groupId> junit </groupId>
<artifactId> junit </artifactId>
<version> 4.13 </version>
<scope> test </scope>
</dependency>
<!-- 添加 slf4j 日志 api -->
<dependency>
<groupId> org.slf4j </groupId>
<artifactId> slf4j-api </artifactId>
<version> 1.7.20 </version>
</dependency>
<!-- 添加 logback-classic 依赖 -->
<dependency>
<groupId> ch.qos.logback </groupId>
<artifactId> logback-classic </artifactId>
<version> 1.2.3 </version>
</dependency>
<!-- 添加 logback-core 依赖 -->
<dependency>
<groupId> ch.qos.logback </groupId>
<artifactId> logback-core </artifactId>
<version> 1.2.3 </version>
</dependency>
</dependencies>

 注意:需要在项目的 resources 目录下创建logback的配置文件

  • 编写 MyBatis 核心配置文件 -- > 替换连接信息 解决硬编码问题

 在模块下的 resources 目录下创建mybatis的配置文件 mybatis-config.xml ,内容如下:

<?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>
<typeAliases>
<package name = "com.itheima.pojo" />
</typeAliases>
<!--
environments :配置数据库连接环境信息。可以配置多个 environment ,通过 default 属性切换不同的
environment
-->
<environments default = "development" >
<environment id = "development" >
<transactionManager type = "JDBC" />
<dataSource type = "POOLED" >
<!-- 数据库连接信息 -->
<property name = "driver" value = "com.mysql.jdbc.Driver" />
<property name = "url" value = "jdbc:mysql:///mybatis?useSSL=false" />
<property name = "username" value = "root" />
<property name = "password" value = "1234" />
</dataSource>
</environment>
<environment id = "test" >
<transactionManager type = "JDBC" />
<dataSource type = "POOLED" >
<!-- 数据库连接信息 -->
<property name = "driver" value = "com.mysql.jdbc.Driver" />
<property name = "url" value = "jdbc:mysql:///mybatis?useSSL=false" />
<property name = "username" value = "root" />
<property name = "password" value = "1234" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- 加载 sql 映射文件 -->
<mapper resource = "UserMapper.xml" />
</mappers>
</configuration>
  •  编写 SQL 映射文件 --> 统一管理sql语句,解决硬编码问题

 在模块的 resources 目录下创建映射配置文件 UserMapper.xml ,内容如下:

 <?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 namespace = "test" >
<select id = "selectAll" resultType = "com.itheima.pojo.User" >
select * from tb_user;
</select>
</mapper>

 com.itheima.pojo 包下创建 User

 public class User {

private int id ;
private String username ;
private String password ;
private String gender ;
private String addr ;
// 省略了 setter getter
}

 com.itheima 包下编写 MybatisDemo 测试类

public class MyBatisDemo {

public static void main ( String [] args ) throws IOException {
//1. 加载 mybatis 的核心配置文件,获取 SqlSessionFactory
String resource = "mybatis-config.xml" ;
InputStream inputStream = Resources . getResourceAsStream ( resource );
SqlSessionFactory sqlSessionFactory = new
SqlSessionFactoryBuilder (). build ( inputStream );
//2. 获取 SqlSession 对象,用它来执行 sql
SqlSession sqlSession = sqlSessionFactory . openSession ();
//3. 执行 sql
List < User > users = sqlSession . selectList ( "test.selectAll" ); // 参数是一个字符串,该
字符串必须是映射配置文件的 namespace.id
System . out . println ( users );
//4. 释放资源
sqlSession . close ();
        }
}

 解决SQL映射文件的警告提示:

  • 产生的原因:Idea和数据库没有建立连接,不识别表信息。但是大家一定要记住,它并不影响程序的执行。
  • 解决方式:在Idea中配置MySQL数据库连接

IDEA中配置MySQL数据库连接

  • 点击IDEA右边框的 Database ,在展开的界面点击 + 选择 Data Source ,再选择 MySQL

 

  •  在弹出的界面进行基本信息的填写

 

  •  点击完成后就能看到如下界面

 

 而此界面就和 navicat 工具一样可以进行数据库的操作。也可以编写SQL语句

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MyBatis快速入门 的相关文章

  • Maven 2:如何将当前项目版本打包在WAR文件中?

    我正在使用 Maven 2 构建我的 Java 项目 并且正在寻找一种向用户呈现 pom xml 当前版本号的方法 例如使用 Servlet 或 JSP 据我所知 最好的方法是 Maven 将版本号作为文本文件打包到 WAR 中 这使我能够
  • Hashmap并发问题

    我有一个哈希图 出于速度原因 我希望不需要锁定 假设我不介意过时的数据 同时更新它和访问它会导致任何问题吗 我的访问是获取 而不是迭代 删除是更新的一部分 是的 这会导致重大问题 一个例子是向散列映射添加值时可能发生的情况 这可能会导致表重
  • 将 Hibernate 对象序列化为 JSON 时抛出异常

    好吧 我正在使用 Hibernate 将一个小型数据库加载到一些表示表的类并与数据库交互 一切都很好 我真的可以看到所有结果 而且我没有任何空字段 所有这些都已被使用 这里我展示了 主 类 表 import javax persistenc
  • 在哪里可以获得有关 Java FitNesse 和 Slim 的一些教程? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 ChannelExec 的命令未执行 - Jsch

    我正在使用 Jsch 在服务器中创建一个文件并执行一些命令 对于文件创建 它工作正常 但是对于命令执行 则不然 它保持状态 1 仍在处理它 并永远保持该状态 这种情况发生在 shell 执行或我尝试成为 root 时 请按照以下方法操作 p
  • 尝试使用 JRI 将 R 与我的 Java 应用程序集成,但出现错误。谁能解释一下原因和解决办法吗?

    我需要将 Java 与 R 集成来运行一些数学命令并使用 R 的功能进行绘图 以下部分代码给出了错误 public static void main String args HelloRWorld r new HelloRWorld r h
  • 字符串池可以包含两个具有相同值的字符串吗? [复制]

    这个问题在这里已经有答案了 字符串池可以包含两个具有相同值的字符串吗 String str abc String str1 new String abc Will the second statement with new operator
  • Java Microsoft Excel API [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 容器中的 JVM 计算处理器错误?

    最近我又做了一些研究 偶然发现了这一点 在向 OpenJDK 团队抱怨之前 我想看看是否有其他人观察到这一点 或者不同意我的结论 因此 众所周知 JVM 长期以来忽略了应用于 cgroup 的内存限制 众所周知 现在从 Java 8 更新某
  • 如何在 Eclipse 中使用其他外部 jar 依赖项创建不可运行/不可执行的 jar

    我无法通过 Eclipse 导出向导创建普通的 jar 不可运行 不可执行 它仅创建 jar 文件 但不会导出依赖的 jar 从而在从其他类调用导出的 jar 的方法时出现错误 请帮助 非常感谢 kurellajunior的建议 它是通过使
  • Jenkins 的代码覆盖率 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 Java 中将弯音发送到 MIDI 音序器

    我了解启动和运行 MIDI 音序器的基础知识 并且希望能够在播放过程中增加 减小序列的音高 但弯音是发送到合成器而不是音序器的消息 我尝试将音序器的接收器设置为合成器的发射器 当我发送弯音短消息时 音序器保持相同的音调 但随后合成器以新的弯
  • 如何找到被点击的JLabel并从中显示ImageIcon?

    这是我的代码 我想知道哪个l单击 然后在新框架中显示该 ImageIcon e getSource 不起作用 final JFrame shirts new JFrame T shirts JPanel panel new JPanel n
  • Hibernate HQL:将对值作为 IN 子句中的参数传递

    我面临一个问题 如何使用 IN 子句将查询中的成对值的参数传递给 HQL 例如 select id name from ABC where id reg date in x y 并且参数是不同的数据类型string id 和reg date
  • Android Gradle 同步失败:无法解析配置“:classpath”的所有工件

    错误如下 Caused by org gradle api internal artifacts ivyservice DefaultLenientConfiguration ArtifactResolveException Could n
  • Java:由 HTTP 连接创建的等待连接线程存活时间很长

    我有一个服务器端代码 用于检查 SOAP 服务是否已启动 代码如下 String response while response length 0 try final URL url new URL DummySoapServiceURL
  • 摩尔斯电码 至 英语

    我现在的问题是让 摩尔斯电码转英语 正常工作 将英语转换为莫尔斯电码的第一部分工作正常 我知道以前已经有人问过这个问题 但我不知道我做错了什么 我知道我需要在某个地方进行拆分 但我只是不确定将其放在代码中的何处 现在 莫尔斯电码到英语的部分
  • 为什么范围为“provided”的依赖项会隐藏 Maven 中的传递依赖项?

    我的 Maven 项目中有三个模块 这稍微简化了 model包含JPA注释的实体类 坚持实例化一个实体管理器并调用它的方法 应用创建类的实例model 设置一些值并将它们传递给坚持 model and 坚持显然取决于javax persis
  • 如何在不同版本的Google App Engine中使用自定义域名?

    我使用谷歌应用程序引擎作为我的 Android 和 Web 应用程序的服务器 我使用 Android Studio 开发了 Android 应用程序 并使用 Eclipse 开发了 Web 应用程序 我在应用程序引擎中部署了两个版本 第一个
  • 如何捕获 try-with-resource 语句中 close 方法抛出的异常

    我正在读关于try with resourceJava 中的语句可用于指定任意数量的资源 try Resource1 res1 initialize code Resource1 res2 initialize code statement

随机推荐

  • 利用多线程和 C++ 实现一个简单的 HTTP 服务器

    前言 服务器是现代软件不可或缺的一部分 而服务器的技术也是非常复杂和有趣的方向 随着操作系统不断地发展 服务器的底层架构也在不断变化 本文介绍一种使用 C 和 多线程实现的简单 HTTP 服务器 首先我们先来看一下如何创建一个服务器 int
  • IOCP机制与网络代理服务器实现方法

    请求问题 采用IOCP多线程控制模型建立高效网络代理服务器思想 能够较好地代理服务器中的多线程竞争问题 本文在比较基于该模型的两种编程方案的基础上 给出了基于Windows2000的网络代理服务器的设计与代理实现过程 关键词 完成端口重叠I
  • javadoc是什么

    Javadoc是什么 官方回答 Javadoc is a tool for generating API documentation in HTML format from doc comments in source code 译 Jav
  • 超简单! Flutter便捷添加资源图片,自动生成2x,x

    超简单 Flutter便捷添加资源图片 自动生成2x x https juejin im post 5e959da6e51d4546c349e52f 简书 https www jianshu com p 6df4663a7a14 注意 该插
  • C++11多线程:condition_variable头文件

  • VSCODE 使用插件 Doxygen Documentation Generator

    VSCODE 使用插件 Doxygen Documentation Generator 文章目录 VSCODE 使用插件 Doxygen Documentation Generator 1 安装插件 Doxygen Documentatio
  • QT5.14.2 Windows10下安装和配置

    QT5 14 2 Windows10下安装和配置 Qt下载 Qt安装 Qt创建一个项目 Qt下载 Qt的最新版本已更新 Qt6 5版本 但已改为登录Qt账号并在线安装 在线安装替换源 清华大学开源软件镜像站 本片选用最后的可离线安装的 ex
  • [论文阅读] (04) 人工智能真的安全吗?浙大团队外滩大会分享AI对抗样本技术

    外滩大会 AI安全 智能时代的攻守道 Deep Learning Security From the NLP Perspective 浙江大学 秀璋带你读论文 系列主要是督促自己阅读优秀论文及听取学术讲座 并分享给大家 希望您喜欢 由于作者
  • Labelme安装及使用教程

    Labelme安装教程 基于anaconda 1 创建anaconda虚拟环境labelme conda create n labelme python 3 6 完成之后如图所示 由于我已经创建了labelme故这里用labelme1代替
  • 产品思维用户思维

    用户思维是一种关注用户需求 体验和价值的思维方式 将用户放在产品设计 开发和提供服务的核心位置 它强调了理解用户在不同场景下的需求 提供与之相匹配的解决方案 从而帮助用户实现他们的目标 描述一个用户时 可以从不同角度来考虑 按人口属性描述用
  • 什么是搜索引擎?

    搜索引擎 搜索引擎是指根据一定的策略 运用特定的计算机程序从互联网上搜集信息 在对信息进行组织和处理后 为用户提供检索服务 将用户检索相关的信息展示给用户的系统 搜索引擎包括全文索引 目录索引 元搜索引擎 垂直搜索引擎 集合式搜索引擎 门户
  • 排序算法-选择排序

    属性 基本思想 每一次从待排序的数据元素中选出最小 或最大 的一个元素 存放在序列的起始位置 直到全部待排序的数据元素排完 过程 在元素集合array i array n 1 中选择关键码最大 小 的数据元素 若它不是这组元素中的最后一个
  • 刷脸支付完全融入了我们的日常生活

    现金支付的假币 丢失等问题层出不穷 随着现金交易出现的不便 银行卡的出现成为人们支付方式的一大转变 智能手机的发展和网络科技的进步催生了网络支付方式 AI智能技术的不断发展又让人们迎来了一场刷脸支付的新革命 刷脸支付是指用户在购物后的支付认
  • rabbitmq 连接报错 An unexpected connection driver error occured(亲测)

    在服务器上安装了一个RabbitMq 并新创建了一个用户授予了管理员角色 登录控制台查看一切正常 兴高采烈启动项目进行连接 结果一盆冷水下来 报如下错误 o s a r l SimpleMessageListenerContainer Fa
  • git中format-patch和chery-pick的区别和联系

    chery pick 把其他分支的一次或多次commit 在当前分支上重演 典型的使用场景 其他分支有很多提交 但是你只对其中的一部分感兴趣 这时候可以使用chery pick 只挑选其他分支感兴趣的commit 合并到自己的分支中 for
  • mybatis if-else(写法)

  • Debian GNU/Linux 中以源码方式安装Odoo 14(社区版)

    Odoo是一种流行的开源商务应用程序套件 可帮助公司管理和运营其业务 也可用于在线教学 它包括广泛的应用程序 Debian GNU Linux 是社区版服务器的代表 本文将介绍如何在Debian GNU Linux中以源码方式安装和部署Od
  • 垃圾回收之CMS GC

    一 六个阶段 阶段 1 Initial Mark 初始标记 这个阶段伴随着 STW 暂停 初始标记的目标是标记所有的 根对象 包括根对象直接引用的对象 以及被年轻代中所 有存活对象所引用的对象 老年代单独回收 阶段 2 Concurrent
  • 剑指 Offer 57. 和为s的两个数字(java+python)

    输入一个递增排序的数组和一个数字s 在数组中查找两个数 使得它们的和正好是s 如果有多对数字的和等于s 则输出任意一对即可 示例 1 输入 nums 2 7 11 15 target 9 输出 2 7 或者 7 2 示例 2 输入 nums
  • MyBatis快速入门

    Mybatis概述 Mybatis概念 MyBatis 是一款优秀的持久层框架 用于简化 JDBC 开发 MyBatis 本是 Apache 的一个开源项目iBatis 2010年这个项目由apache software foundatio