第1讲:MyBatis简介与入门

news2024/9/22 1:10:57

目录

  1. 了解MyBatis
  2. 掌握MyBatisHibernate的区别
  3. 安装使用MyBatis
  4. 了解MyBatis的基本构架
  5. 掌握以XMLJava使用MyBatis
  6. 掌握MyBatisXML配置文件的使用
  7. 完成第一个MyBatis程序的编写

什么是MyBatis

  • MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。
  • MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
  • MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

MyBatis的发展历史

  • MyBaits的前身是Apache的一个开源项目iBatis
  • 2010年这个项目由Apache Software Foundation 迁移到了 Google Code 并且改名为MyBatis
  • 201311月迁移到GitHub,目前MyBaits是由GitHub维护的

MyBatisHibernateJDBC的对比

  • MyBatisHibernate都是ORM框架,都是对JDBC的封装,能够简化DAO层代码的编写
  • MyBatis是基于SQL的半自动化ORM框架,使用原生SQL,支持对SQL的高度定制,弱化了表间关联关系的使用
  • Hibernate是面向对象的ORM框架,可使用原生SQL, HQL,严重依赖于表间的关联关系
  • MyBatis相比Hibernate拥有更好的性能
  • MyBatis只需要提供DAO接口,DAO接口的实现类会由MyBatis自动生成
  • Hibernate需要开发者编写DAO接口的实现类
  • MyBatis一般与SpringMVC, Spring结合使用,组成”SSM”框架
  • Hibernate一般与Struts2, Spring结合使用,组成”SSH”框架

MyBatis的使用场景

  • SpringMVCSpring框架整合的应用
  • 追求高度定制化SQL的应用
  • 对性能有一定要求的应用
  • 大部分的互联网项目会选择使用”SSM”框架

MyBatis的安装使用

下载JAR包的方式

只需要把下载的 zip 文件里的 mybatis-x.x.x.jar 加入到 Classpath 路径中(本课程中使用 3.4.5 版本)。下载地址: Releases · mybatis/mybatis-3 · GitHub

        Maven构建的方式

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.4.5</version>
</dependency>

注意:同时需要把数据库驱动JAR引用到项目中,本课程中使用的是MySQL5.5及以上版本

MyBatis的基本构架

MyBatis的基本架构

  • SqlMapConfig.xml此文件作为MyBatis的全局配置文件,配置了MyBatis的运行环境等信息。mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句,此文件需要在SqlMapConfig.xml中加载。
  • 通过MyBatis环境等配置信息构造SqlSessionFactory(即会话工厂)
  • 由会话工厂创建SqlSession即会话,操作数据库需要通过SqlSession进行。
  • MyBatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。
  • MappedStatement也是MyBatis一个底层封装对象,它包装了MyBatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个MappedStatement对象,sql的id即是MappedStatement的id。
  • MappedStatementsql执行输入参数进行定义,包括HashMap基本类型、pojo,Executor通过MappedStatement在执行sql前将输入的Java对象映射至sql中,输入参数映射就是JDBC编程中对PreparedStatement设置参数。
  • MappedStatementsql执行输出结果进行定义,包括HashMap基本类型、pojo,Executor通过MappedStatement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于JDBC编程中对ResultSet的解析处理过程。

MyBatis的核心类

  • SqlSessionFactoryBuilderSqlSession工厂构建器,使用SqlSessionFactoryBuilder创建SqlSessionFactory类的实例,一旦创建了 SqlSessionFactory类的实例就不再需要SqlSessionFactoryBuilder了。
  • SqlSessionFactorySqlSession工厂类,用于创建SqlSession类实例的工厂。 SqlSessionFactory类的实例一旦被创建就应该在应用的运行期间一直存在,不能对它进行清除或重建。
  • SqlSessionSql会话,用于获取Mapper映射。SqlSession类的实例是非线程安全的,当访问完数据库后需要及时关闭SqlSession
  • Mapper 映射器是创建用来绑定映射语句的接口。映射器接口的实例是从 SqlSession 中获得的。一个映射器实例对应一个SQL映射文件。
  • Mapper映射器就是MVC框架中的DAO接口。
以上四个核心类的关系为:
  1.         1、由SqlSessionFactoryBuilder创建SqlSessionFactory
    1.         2、由SqlSessionFactory获取SqlSession
      1.         3、由SqlSession获取Mapper映射器(DAO接口)实例
        1.         4、由Mapper映射器(DAO接口)实例调用指定的SQL语句

创建即将使用的数据库及数据库表

创建d_mybatis数据库:

create database if not exists d_mybatis default charset utf8 collate utf8_general_ci;

创建t_department部门数据表:

create table t_department (

  id int primary key auto_increment,

  title varchar(20) not null,

  des varchar(200)

);

Java代码开始使用MyBatis

  • 第一步:在com.gs.bean包中创建t_department表对应的JavaBean对象Department,提供属性的getter/setter方法,并重写toString()方法,此处省略JavaBean的创建代码
  • 第二步:在com.gs.mybatis包中使用MyBatis提供的PooledDataSource创建数据源,并封装成一个工具类
  • package com.mybatis;
    
    import org.apache.ibatis.datasource.pooled.PooledDataSource;
    
    import javax.sql.DataSource;
    
    public class DataSourceFactory {
    
        public static DataSource getDataSource(){
            //驱动
            String driver="com.mysql.jdbc.Driver";
            //连接字符串
            String url="jdbc:mysql://localhost:3306/practice?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true";
            //用户名
            String username="root";
            //密码
            String password="1234";
            return  new PooledDataSource(driver,url,username,password);
        }
    }
    
  • 第三步:在 com.gs.dao 包中创建 Mapper 映射器接口也即 DAO 接口 DepartmentDAO
  • 第四步:在com.gs.mybatis包中编写一个MyBatisJava类,在main方法中使用数据源和SqlSessionFactoryBuilder获取SqlSessionFactory

  • 第五步:由SqlSessionFactory获取SqlSession

  • 第六步:由SqlSession获取映射器接口并调用方法执行相应的SQL语句

  • 第七步:在第六步中,获取到了DepartmentDAO接口,并调用listAll方法,但是listAll究竟会执行哪个SQL呢?此时我们需要在com.gs.dao包中创建Mapper映射器接口对应的SQL映射文件DepartmentDAO.xml

说明 1 xml 映射文件名与 DAO 接口名相同,并且此文件与 DepartmentDAO 接口类在同一个包中
说明 2 <mapper> 标签的 namespace 属性值必须是对应的 DAO 接口类的全限定名
说明 3 <select> 标签的 id 属性值必须与 DAO 接口中的方法名相同且唯一
说明 4 MyBatis 会自动生成 DAO 接口的实现类,不需要开发者手动实现。 MyBatis 使用 DAO 接口调用方法时,通过与之对应的映射文件就可以唯一确定需要运行的 SQL 语句
说明5:如果是maven项目,xml文件要放在resources对应的文件夹
  • 第八步:执行第四步到第六步写完的main方法,查看结果,发现已经把所有的Department信息都查询出来了。注意:执行前请先往数据库表增加几条记录

XML配置文件开始使用MyBatis

  • 第一步:在src根目录下创建jdbc.properties配置文件,存储DataSource数据源信息
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.driverUrl=jdbc:mysql://localhost:3306/d_mybatis?useUnicode=true&amp;characterEncoding=utf-8
jdbc.user=root
jdbc.password=root
  • 第二步:在com.gs.dao包中创建Mapper映射器接口对应的SQL映射文件DepartmentDAO.xml,可直接使用前面Java代码中创建好的DepartmentDAO.xml
  • 第三步:在src根目录中添加MyBatisXML配置文件mybatis.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>
    <properties resource="jdbc.properties" /> <!-- 引用jdbc配置文件 -->
    <environments default="development">
       <environment id="development">
            <transactionManager type="JDBC"/> <!-- 声明jdbc事务处理 -->
           <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driverClassName}"/>
               <property name="url" value="${jdbc.driverUrl}"/>
                <property name="username" value="${jdbc.user}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/gs/dao/DepartmentDAO.xml"/> <!-- 引用Mapper接口的sql映射文件 -->
    </mappers>
</configuration>
  • 第四步:在com.gs.dao包中创建Mapper映射器接口也即DAO接口DepartmentDAO。可直接使用前面Java代码中创建好的DepartmentDAO接口
  • 第五步:在com.gs.mybatis包中编写一个MyBatisXML类,在main方法中由MyBatis配置文件和SqlSessionFactoryBuilder获取SqlSessionFactory

  • 第六步:由SqlSessionFactory获取SqlSession

  • 第七步:由SqlSession获取映射器接口并调用方法执行相应的SQL语句

  • 第八步:执行第四步到第六步写完的main方法,查看结果,发现已经把所有的Department信息都查询出来了。

两种使用MyBatis方式的区别

使用 Java 代码和 XML 配置文件的方式使用 MyBatis ,唯一的区别就在于数据源和 MyBatis 的配置上,前者使用纯 Java 代码,而后者通过 XML 文件来配置,我们推荐使用 XML 配置文件的方式。在后期框架的整合过程中也都是使用 XML 配置文件。

本人从事软件项目开发20多年,2005年开始从事Java工程师系列课程的教学工作,录制50多门精品视频课程,包含java基础,jspweb开发,SSH,SSM,SpringBoot,SpringCloud,人工智能,在线支付等众多商业项目,每门课程都包含有项目实战,上课PPT,及完整的源代码下载,有兴趣的朋友可以看看我的在线课堂

讲师课堂链接:https://edu.csdn.net/lecturer/893

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

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

相关文章

TortoiseSVN安装教程结合内网穿透实现公网提交文件到本地SVN服务器

文章目录 前言1. TortoiseSVN 客户端下载安装2. 创建检出文件夹3. 创建与提交文件4. 公网访问测试 前言 TortoiseSVN是一个开源的版本控制系统&#xff0c;它与Apache Subversion&#xff08;SVN&#xff09;集成在一起&#xff0c;提供了一个用户友好的界面&#xff0c;方便用…

uni-app:实现滚动条效果

效果 前&#xff08;这里使用到了强制不换行white-space: nowrap;&#xff09; 后 核心代码 overflow: auto; 或 overflow-x: auto; /* 横向滚动条 */ 注&#xff1a;使用 overflow: auto 属性时&#xff0c;如果内容没有超出容器的宽度或高度&#xff0c;则不会显示对应的滚动…

HT8310:内置电荷泵升压音频功放

HT8310具有AB类和D类的自Y切换功能&#xff0c;在受到D类功放EMI干扰困扰时&#xff0c;可随时切换至AB类音频功放模式&#xff08;此时电荷泵升压功能关闭&#xff09;。HT8310内部固定28dB增益&#xff0c;内置的关断功能使待机电流Z小化&#xff0c;还集成了输出端过流保护、…

百度SEO 5个技巧:通过HelpLook让您的文章收录量实现飞跃!

通过百度SEO&#xff0c;可以让百度搜索引擎更好地了解您的网页。比如&#xff1a; 网页上有什么样的内容 网页的内容匹配何种关键词 网页内容对其他有类似问题的用户是否有帮助 当百度判断您的网页符合用户的搜索意图&#xff0c;就会提升您的网页的结果排名&#xff0c;从…

【密码学】Java实现DH函数时出现“Unsupported secret key algorithm: AES“错误

问题描述 jdk版本&#xff1a;8 使用DH和AES算法&#xff0c;实现密钥的交换和加密&#xff0c;测试时报错 java.security.NoSuchAlgorithmException: Unsupported secret key algorithm: AESat com.sun.crypto.provider.DHKeyAgreement.engineGenerateSecret(DHKeyAgreement…

Flutter - 波浪动画和lottie动画的使用

demo 地址: https://github.com/iotjin/jh_flutter_demo 代码不定时更新&#xff0c;请前往github查看最新代码 波浪动画三方库wave lottie动画 Lottie 是 Airbnb 开发的一款能够为原生应用添加动画效果的开源工具。具有丰富的动画效果和交互功能。 # 波浪动画 https://pub-web…

【计算机网络】poll | epoll

文章目录 1. pollpoll函数参数解析代码解析PollServer代码 poll 特点 2. epoll认识接口epoll_createepoll_ctlepoll_wait 基本原理红黑树就绪队列 1. poll poll函数参数解析 输入 man poll poll的第一个参数是文件描述符 poll的第二个参数为 等待的多个文件描述符(fd)数字层面…

Apache Ranger:(一)安装部署

1.Ranger简介 Apache Ranger提供一个集中式安全管理框架, 并解决授权和审计。它可以对Hadoop生态的组件如HDFS、Yarn、Hive、Hbase等进行细粒度的数据访问控制。通过操作Ranger控制台,管理员可以轻松的通过配置策略来控制用户访问权限。 说白了就是管理大多数框架的授权问题。 …

微信小程序抓包

https://github.com/water-kid/WeChatOpenDevTools 抓包工具 第一次安装成功了&#xff0c;公众号能抓&#xff0c;&#xff0c;小程序报错&#xff0c;&#xff0c;卸载后安装不起了 方法二&#xff1a; 将version.dll 放入 微信所在目录 E:\Program Files\Tencent\WeChat\[…

SpringBoot 如何使用 Ehcache 作为缓存

使用Spring Boot Sleuth进行分布式跟踪 在现代分布式应用程序中&#xff0c;跟踪请求和了解应用程序的性能是至关重要的。Spring Boot Sleuth是一个分布式跟踪解决方案&#xff0c;它可以帮助您在分布式系统中跟踪请求并分析性能问题。本文将介绍如何在Spring Boot应用程序中使…

全息投影技术服务公司【盟云全息】收入急剧下降,存在风险

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 全息投影技术服务公司【盟云全息】MicroCloud Hologram(HOLO)的股价表现今年以来异常出色&#xff0c;年初至今已经上涨了334%以上&#xff0c;猛兽财经将在本文中分析MicroCloud Hologram股价上涨的原因&#xff0c;以及它…

Qt QGridLayout和QFormLayout案例分析

QGridLayout和QFormLayout是Qt中常用的布局管理器&#xff0c;可以用于在应用程序中设置控件的位置和大小。 QGridLayout网格布局(栅格布局) QGridLayout是一个网格布局管理器&#xff0c;可以将控件放置在一个二维网格中。在QGridLayout中&#xff0c;控件可以跨越多个行和列…

2023年中国涂料助剂市场发展历程及趋势分析:中高端助剂市场规模将会迎来新的增长[图]

涂料助剂又称油漆辅料&#xff0c;系配制涂料的辅助材料&#xff0c;能改进涂料性能&#xff0c;促进涂膜形成。种类很多&#xff0c;包括催干剂、增韧剂、乳化剂、增稠剂、颜料分散剂、消泡剂、流平剂、抗结皮剂、消光剂、光稳定剂、防霉剂、抗静电剂等&#xff0c;其中用量最…

2023年中国临床质谱检测行业市场规模及行业竞争格局分析[图]

临床质谱检测是指质谱技术在临床检验中的应用&#xff0c;主要涉及临床生化检验、临床免疫学检验、临床微生物检验以及临床分子生物诊断等多方面&#xff0c;质谱诊断比传统诊断技术更具灵敏性、特异性和准确性&#xff0c;且具有高通量、高效率和低成本的优势。临床质谱技术可…

Allegro 17.2如何直接更新元件封装?

想必很多从事电子设计的小伙伴&#xff0c;都有这样的经历&#xff1a;有些时候原理图和PCB设计是由不同的工程师负责&#xff0c;然后偶尔需要在没有原理图的情况下直接对PCB作品进行操作&#xff0c;如更新元件封装等操作&#xff0c;这种环节不仅费时费力&#xff0c;效率贼…

Table ‘mysql.proc‘ doesn‘t exist

使用workbench 同步model 報錯 "Table ‘mysql.proc‘ doesn‘t exist" 爲什麽會出現這個錯誤&#xff1f; 原因&#xff1a;误删了mysql数据库 解决办法如下&#xff1a; 1、在服务列表里找到mysql&#xff0c;停止服务 2、把mysql文件夹下的data文件夹备份&…

微信小程序--》从模块小程序项目案例23.10.09

配置导航栏 导航栏是小程序的门户&#xff0c;用户进来第一眼看到的便是导航栏&#xff0c;其起着对当前小程序主题的概括。而我们 新建的小程序 时&#xff0c;第一步变开始配置导航栏。如下&#xff1a; 配置tabBar 因为配置tabBar需要借助字体图标&#xff0c;我这里平常喜…

uniapp快速入门系列(3)- CSS技巧与布局

章节三&#xff1a;CSS技巧与布局 1. uniapp中的样式编写2. 常见布局技巧与实例解析2.1 水平居中布局2.2 垂直居中布局2.3 等高布局2.4 响应式布局 3. CSS动画与过渡效果 在uniapp中&#xff0c;我们使用CSS来设置页面的样式和布局。本章将介绍一些在uniapp中常用的CSS技巧和布…

区块链技术在金融领域的应用场景

区块链技术在金融领域具有广泛的应用场景&#xff0c;它可以提供更安全、透明、高效和可信的金融服务。以下是一些区块链金融的主要应用场景&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.数字货币…

多媒体播放软件 Infuse mac中文特点介绍

Infuse mac是一款多媒体播放器应用&#xff0c;它支持播放多种格式的视频文件、音频文件和图片文件&#xff0c;并且可以通过AIrPlay将媒体内容投放到其他设备上。Infuse还支持在线视频流媒体播放和本地网络共享&#xff0c;用户可以通过它来访问家庭网络上的媒体文件。 Infuse…