IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> MyBatis初识+创建项目 -> 正文阅读

[Java知识库]MyBatis初识+创建项目

MyBatis简介

是什么MyBatis

MyBatis 本是apache的一个开源项目ibatis, 2010年这个项目由apache 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github

MyBatis官方文档 : http://www.mybatis.org/mybatis-3/zh/index.html

GitHub : https://github.com/mybatis/mybatis-3

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java实体类(POJO,Plain Old Java Objects,普通老式 Java 对象)映射成数据库中的记录。

持久化

持久化是将程序数据在持久状态和瞬时状态转换的机制。

  • 即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要用于是将内存中的对象存储在数据库中,或者存储在硬盘的文件中、XML数据文件中等等。
  • JDBC就是一种持久化机制。文件IO也是一种持久化机制。

为什么需要持久化服务呢?那是由于存储本身的缺陷引起的。

  • 内存断电后数据会丢失,但有一些对象是无论如何都不会丢失的,比如银行账号等,遗憾的是,人们无法保证内容用不掉电。

持久层

完成持久化工作的代码块 . ----> Dao层 【DAO (Data Access Object) 数据访问对象】

大多数情况下特别是企业级应用,数据持久化往往也就意味着将内存中的数据保存到磁盘上加以固化,而持久化的实现过程则大多通过各种关系数据库来完成。

不过这里有一个字需要特别强调,也就是所谓的“层”。对于应用系统而言,数据持久功能大多是必不可少的组成部分。也就是说,我们的系统中,已经天然的具备了“持久层”概念?也许是,但也许实际情况并非如此。之所以要独立出一个“持久层”的概念,而不是“持久模块”,“持久单元”,也就意味着,我们的系统架构中,应该有一个相对独立的逻辑层面,专注于数据持久化逻辑的实现.

与系统其他部分相对而言,这个层面应该具有一个较为清晰和严格的逻辑边界。【说白了就是用来操作数据库存在的!】

为什么需要MyBatis

MyBatis就是帮助程序猿将数据存入数据库中 , 和从数据库中取数据 。传统的JDBC操作 , 有很多重复代码块 。比如 : 数据取出时的封装 , 数据库的建立连接等等… , 通过框架可以减少重复代码,提高开发效率 。

MyBatis 支持定制化 SQL、存储过程以及高级映射,可以在实体类和 SQL 语句之间建立映射关系,是一种半自动化的 ORM 实现。

ORM(Object Relational Mapping,对象关系映射)是一种数据持久化技术,它在对象模型和关系型数据库之间建立起对应关系,并且提供了一种机制,通过 JavaBean 对象去操作数据库表中的数据。

当我们使用MyBatis时,只需要提供相关的配置信息,比如之前写在db.propreties的属性等,而诸如加载驱动、建立连接、PreparedStatementResultSet等相关内容都无需手敲代码,MyBatis已经帮我们处理好了,我们只需将关注点聚焦到SQL上就好了。

MyBatis功能架构

MyBatis的功能架构分为三层(引自):

  • API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。
  • 数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。
  • 基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。

使用Maven构建项目

思路:搭建环境–>导入MyBatis—>编写代码—>测试

新建项目

Step1:新建一个普通Maven项目

Step2:删除src目录

Step3:创建一个Maven模块

MyBatis相关依赖

将需要的的依赖代码置于 pom.xml 文件中,格式如下:

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

获取MyBatis依赖地址:https://mvnrepository.com/

需要获取的依赖有:mysql(l连接数据库)、mybatisjunit(单元测试)

获取方法:

Step1:搜索框输入需要的依赖名称,点击查询结果的第一个。

image-20210919001226292

Step2:找到对应自己数据库的版本,比如我的8.0.25。

image-20210919001528757

Step3:点进去后,复制框中的信息。

Step4:将依赖代码写在父模块中的dependencies标签中。

Step5:若第一次复制进来,依赖信息显示红色,同时页面右上角会出现如下图标,点击后会自动开始下载依赖,下载完毕后依赖信息显示黑色。

MyBatis核心配置文件

资源文件mybatis-config.xml):XML 配置文件中包含了对 MyBatis 系统的核心设置,包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器(TransactionManager)。下面的示例仅罗列了最关键的部分。

  • XML头部的声明,它用来验证 XML 文档的正确性。
  • environment 元素体中包含了事务管理和连接池的配置。
  • mappers 元素则包含了一组映射器(mapper),这些映射器的 XML 映射文件包含了 SQL 代码和映射定义信息。
<?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:标识核心配置文件-->
<configuration>
    <!--environments:环境-->
    <environments default="development">
        <environment id="development">
            <!--transactionManager:事务管理-->
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="xxx"/>
                <property name="url" value="xxx"/>
                <property name="username" value="xxx"/>
                <property name="password" value="xxx"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

编写MyBatis工具类

每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。

从 XML 文件中构建 SqlSessionFactory 的实例非常简单,建议使用类路径下的资源文件进行配置。 但也可以使用任意的输入流(InputStream)实例,比如用文件路径字符串或 file:// URL 构造的输入流。MyBatis 包含一个名叫 Resources 的工具类,它包含一些实用方法,使得从类路径或其它位置加载资源文件更加容易。

String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

在java目录下新建一个类MyBatisUtils,将资源文件加载进来,并通过 SqlSession 实例来直接执行已映射的 SQL 语句。

public class MyBatisUtils {

    private static SqlSessionFactory sqlSessionFactory;

    static {
        try{
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        }catch (IOException e){
            e.printStackTrace();
        }
    }

    //    既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。
    //    SqlSession 提供了在数据库执行 org.apache.ibatis.jdbc.SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。
    public static SqlSession GetSqlSession(){
        SqlSession sqlSession = sqlSessionFactory.openSession();
        return sqlSession;
    }
}
52

前期工作已经完成!

定义对象类

这里用到的是Teacher对象。对应数据库中,属性包括tea_usernametea_password

,重写get/set方法。为了后期使用方便,可以添加有参构造,同时需要定义无参构造。

public Teacher(String tea_username, String tea_password) {
    this.tea_username = tea_username;
    this.tea_password = tea_password;
}

编写映射器

DAO(映射器接口)

在DAO目录下新建接口TeacherDAO

public interface TeacherDAO {
    public List<Teacher> GetALL();
}

??: 映射器只是一个接口。接口不能直接运行,但是MyBatis内部运用了动态代理技术,生成接口的实现类,从而完成接口的相关功能。

编写配置文件(XML映射器)

对应刚刚定义的接口,编写TeacherMapper.xml配置文件,并利用namespace绑定到对应的dao接口

  • namespace:接口的全限定名,用于找到该接口;
  • select:表明这是一条查询语句。
<mapper namespace="DAO.TeacherDAO">
    <!--    id对应Dao里面的方法名-->
    <!--    使用Mapper代替daoImpl-->
    <select id="GetALL" resultType="Eneity.Teacher">
        select * from teacher
    </select>
</mapper>

通过映射的方式,让我们无需去管sql执行的内容;这是一种自动映射的功能(MyBatis默认提供该功能),只要SQL返回的列名能和POJO(Java实体类)的属性对应起来即可。

注册该映射器

将该mapper配置文件注册到核心配置文件中。

<mappers>
    <mapper resource="DAO/StudentMapper.xml"/>
</mappers>

映射器的接口绑定

接口绑定的方式有两种:

  1. 注解绑定:在接口的方法上面加上 @Select、@Update等注解,里面包含Sql语句来绑定
  2. 接口绑定:通过xml里面写SQL来绑定,在这种情况下,要指定xml映射文件里面的namespace必须为接口的全路径名。

使用MyBatis的mapper接口调用时要注意的事项有:

  • Mapper接口方法名和mapper.xml中定义的每个sql的id相同;
  • Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同;
  • Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同;
  • Mapper.xml文件中的namespace即是mapper接口的类路径。

测试类中测试

在Test目录下新建测试类TeacherDAOTest

public class TeacherDAOTest {
    @Test
    public void Test1() {
        SqlSession sqlSession = MyBatisUtils.GetSqlSession();

        TeacherDAO teacherDAO = sqlSession.getMapper(TeacherDAO.class);
        List<Teacher> list = teacherDAO.GetALL();

        for (Teacher tea : list) {
            System.out.println(tea);
        }

        sqlSession.close();
    }
}

项目流程梳理

从之前的Javaweb跨越到现在的框架,改变的是连接数据库的部分,但这其中一时半会摸不清楚具体是在做什么,下面根据我自身的理解程度再将项目捋一遍。

  1. 以新建一个空项目为开始;
  2. 添加MyBatis的相关依赖,这就类似框架的根基,其中包括mysqlmybatisjunit(单元测试);
  3. 编写MyBatis核心配置文件,这是一个xml文件,类似之前写的db.propreties,连接数据库的配置信息就在这里;
  4. 编写MyBatis工具类,类似于之前写的BaseDAO,利用输入流获取配置文件,依此构建 SqlSessionFactory 实例,该实例是一个工厂,里面是SqlSession对象;
  5. 在工具类还需要定义获取SqlSession的方法,SqlSession可以执行已映射的 SQL 语句,类似于之前的写的executeQuery/Update;
  6. 编写实体类,重写get/set/toString方法,有参/无参构造都安排上;
  7. 编写映射器接口,定义需要的方法;
  8. 编写与接口对应的xml映射器,并通过namespace绑定在一起,sql语句写在其中;
  9. 将映射器注册到核心配置文件中;
  10. 在回顾一遍前面所说的;
  11. 编写测试类,进行单元测试。

?


???END???
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-09-22 14:31:58  更:2021-09-22 14:33:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 15:34:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码