Mybatis第一篇| 我的第一个Mybatis程序

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: Mybatis第一篇| 我的第一个Mybatis程序

前言

hello,各位小伙伴大家好,今天开始我们来学习 Mybatis 框架,在这个系列文章中,主要依据是Mybatis的官方文档,官方文档是学习任何技术的核心,离开官方文档的教程都是扯淡,所以大家看本系列教程的时候,随时准备着官方文档。

除了 Mybatis 系列,之后也会写更多的系列,例如 spring、springmvc、springboot 等。该系列文章是写给初学者以及复习Mybatis的读者,如果是大佬,请忽略。原创不易,希望大家多多转发。


必备知识

  • mysql
  • JDBC
  • JAVA
  • Maven


为什么要学 Mybatis

在学习任何知识之前,我们都需要明白为什么去学它,不弄懂这个原因,你永远也不会把它学的很好。

那么为什么去学习Mybatis呢?肯定是因为它有着自己的优势。

Mybatis 是 JAVA 的一个持久层框架,什么是持久层?持久层就是能够长期保存数据的一层,例如我们的数据写在硬盘上,这说明我们的数据是持久的,如果写在内存当中,我们的数据就是不持久的。

大家之前都有学习过 JDBC,通过 JDBC 来操作数据库,需要以下几个步骤

  1. 加载数据库驱动
  2. 创建并获取数据库链接
  3. 创建 jdbc statement 对象
  4. 编写 sql 语句
  5. 设置 sql 语句中的参数(使用 preparedStatement)
  6. 通过 statement 执行 sql 并获取结果
  7. 对 sql 执行结果进行解析处理
  8. 释放资源(resultSet、preparedstatement、connection)

看到上面这些步骤,我头就有点晕,我们写程序本质上都是 CRUD,如果按照这种方式来写,我们会写的很难受。而且在系统层面也有着一定资源浪费。

所以 Mybatis 成为了我们的首选,我们来看下 Mybatis 的特点(来自百度百科):

  • 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个 jar 文件+配置几个 sql 映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
  • 灵活:mybatis 不会对应用程序或者数据库的现有设计强加任何影响。sql 写在 xml 里,便于统一管理和优化。通过 sql 语句可以满足操作数据库的所有需求。
  • 解除 sql 与程序代码的耦合:通过提供 DAO 层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql 和代码的分离,提高了可维护性。
  • 提供映射标签,支持对象与数据库的 orm 字段关系映射
  • 提供对象关系映射标签,支持对象关系组建维护
  • 提供 xml 标签,支持编写动态 sql。

了解到这里,我们就正式的去看看 Mybatis 是个什么玩意吧!


第一个 Mybatis 程序

在编写之前,扔给大家官方文档的链接,我们看一下官方文档怎么说:


https://mybatis.org/mybatis-3/zh/getting-started.html


1.jpg


官网上说,只需要添加 mybatis 的依赖,即可进行使用。确实是非常的方便,不需要我们去导一些乱七八糟的包。

接下来,我会一步一步带大家编写我们的第一个 Mybatis 程序:


1.新建 maven 项目


2.jpg


3.jpg


新建项目后,我们把 src 目录删除:


4.jpg


为什么要删除呢?因为我们会在这个项目里建立多个子项目,这样可以节省创建新项目的时间。


2.创建数据库并插入数据

新建项目后,我们需要创建一个数据库,并且插入相关的数据。


CREATEDATABASE`mybatis`;
use`mybatis`;


CREATETABLE`user`(
`id`INT(20) notnull PRIMARY KEY,
`name`VARCHAR(30) DEFAULTNULL,
`pwd`VARCHAR(30) DEFAULTNULL
)ENGINE=INNODBDEFAULTCHARSET=utf8;


INSERTINTO`user` (`id`,`name`,`pwd`) VALUES
(1,'kuls1','111111'),
(2,'kuls2','222222'),
(3,'kuls3','333333');


3.导入 maven 依赖

在我们的 pom.xml 中导入相关依赖:


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--父工程-->
<groupId>com.kuls</groupId>
<artifactId>mybatisdemo</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!--MySQL-->
  <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.17</version>
  </dependency>
<!--mybatis-->
  <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.2</version>
  </dependency>
<!--junit-->
  <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
  </dependency>
</dependencies>
<!--在build中配置resources,来防止我们资源导出失败-->
<build>
<resources>
<resource>
    <directory>src/main/java</directory>
    <includes>
        <include>**/*.properties</include>
        <include>**/*.xml</include>
    </includes>
    <filtering>true</filtering>
</resource>
<resource>
    <directory>src/main/resources</directory>
    <includes>
        <include>**/*.properties</include>
        <include>**/*.xml</include>
    </includes>
    <filtering>true</filtering>
</resource>
</resources>
</build>
</project>


大家可以注意到上面有一个所包含的标签,这个标签的内容是防止资源导出失败,也就是防止我们的配置文件找不到。


4.创建子模块

我们再父模块上点击右键->new,创建一个子模块。


5.jpg


6.jpg


创建完了子模块


5.配置 Mybatis 核心配置文件


7.jpg


我们可以看官网中说到有一个 XML 配置文件,包含了对 MyBatis 系统的核心设置,包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器  (TransactionManager)。


8.jpg


我们创建 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>
<environments default="development">
  <environment id="development">
     <!--事务管理-->
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=Asia/Shanghai"/>
        <property name="username" value="xxxx"/>
        <property name="password" value="xxxxx"/>
      </dataSource>
  </environment>
</environments>
</configuration>


相信接触过 JDBC 的朋友大概能够看懂上面的配置说了些啥,其实就是简单的配置了 Mysql 的数据源。


6.编写 Mybatis 工具类


9.jpg


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

上面的话是官方的原话,我们结合代码来分析一下这段话:


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


首先,通过 Mybatis 中的一个工具类Resources的 getResourceAsStream 方法从类路径或其它位置加载资源文件,这里的资源文件就是我们上面所配置的核心配置文件,然后通过SqlSessionFactoryBuilder(相当于一个创造器)创建一个sqlSessionFactory(sqlSession 的工厂,不懂工厂的朋友可以去了解一下工厂设计模式),所谓工厂,就是能够不断地产生产品,这里的产品就是sqlSession

我们可以通过 SqlSessionFactory 的openSession方法获取sqlSession对象。

我们再 com.kuls 下创建一个包 utils 来存放我们的工具类:


10.jpg


package com.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;
import java.io.InputStream;
/**
* @author kuls
* @Desc 公众号:JAVAandPython君
* @date 2020/3/17 11:49 上午
*/
publicclass MybatisUtils {
privatestatic SqlSessionFactory sqlSessionFactory;
static {
try {
  //固定代码,使用mybatis获取sqlSessionFactory对象
  String resource = "mybatis-config.xml";
  InputStream inputStream = Resources.getResourceAsStream(resource);
   sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  } catch (IOException e) {
      e.printStackTrace();
  }
}
//    既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。
//    org.apache.ibatis.session.SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。
public static SqlSession getSqlSession(){
//获取SqlSession对象
return sqlSessionFactory.openSession(true);
}
}


通过这个工具类可以帮我们随时拿到sqlSession,在SqlSession中提供了在数据库执行 SQL 命令所需的所有方法。


7.编写实体类

com.kuls.pojo 中创建 User.java


package com.kuls.pojo;
/**
 * @author kuls
 * @Desc 公众号:JAVAandPython君
 * @date 2020/3/17 11:59 上午
 */
publicclass User {
    privateint id;
    private String name;
    private String pwd;
    public User() {
    }
    public User(int id, String name, String pwd) {
        this.id = id;
        this.name = name;
        this.pwd = pwd;
    }
 ...省略了get和set方法以及toString方法,大家自己生成


8.创建Dao接口并绑定


创建UserMapper.java(在原来的写法中,dao包为UserDao的方法来命名,但是在Mybatis更加习惯Mapper的命名方式)


publicinterface UserDao {
    //获取所有用户
    List<User> getUserList();
}


创建完接口后,我们需要在mybatis-config.xml中进行接口的绑定:


11.jpg


<mappers>
  <mapper class="com.kuls.dao.UserMapper"/>
</mappers>


9.编写Mapper配置文件


12.jpg


这里就是Mybatis中改动比较大的部分,在以往的Dao接口,我们通常都是需要创建一个实现类来进行数据的操作,但是Mybatis中是以配置文件的形式来进行的。


13.jpg


我们再图中位置创建一个UserMapper.xml文件,记住,这里的名称要与Dao层文件的名称相同。


<?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">
<!--namespace绑定对应的接口-->
<mapper namespace="com.kuls.dao.UserMapper">
    <select id="getUserList" resultType="com.kuls.pojo.User">
    select * from mybatis.user
  </select>
</mapper>


上面就是UserMapper.xml文件的内容,这里有几点需要说明:

  • namespace的路径需要绑定到对应的接口
  • select标签代表的就是查询语句
  • select中的id需要和接口中的方法名称相同!!!
  • resultType代表着返回结果类型,我们要获取所有的User,所以此处为pojo包中的User类。
  • select标签中,填写我们相应的语句。

这里大家没有特别理解也没多大关系,我们现在得首要目的就是让它跑起来!


10.创建测试类进行测试


14.jpg


package com.kuls.dao;
import com.kuls.pojo.User;
import com.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.HashMap;
import java.util.List;
/**
 * @author kuls
 * @Desc 公众号:JAVAandPython君
 * @date 2020/3/17 12:25 下午
 */
publicclass UserMapperTest {
    @Test
    public void test(){
        //通过工具类拿到sqlsession
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //通过sqlSession拿到相应的mapper
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        //通过mapper调用mapper中的方法
        List<User> userList = mapper.getUserList();
        for (User user : userList) {
            System.out.println(user);
        }
        sqlSession.close();
    }
}


测试结果:


15.jpg


可以看到我们的第一个Mybatis程序就成功跑起来了!


完整代码


链接:https://pan.baidu.com/s/1YBPUr1ujQ4sXcFWGBzUEng  密码:opth
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
Java 数据库连接 数据库
Mybatis【第一个 Mybatis 程序】
Mybatis【第一个 Mybatis 程序】
|
SQL Java 关系型数据库
手把手搭建mybatis入门程序
手把手搭建mybatis入门程序
|
XML 存储 SQL
如何用IDEA创建第一个Mybatis程序
如何用IDEA创建第一个Mybatis程序
123 0
|
XML Java 关系型数据库
第一个Mybatis程序
第一个Mybatis程序
54 0
|
XML Java 测试技术
第一个MyBatis程序(下)
第一个MyBatis程序(下)
|
XML SQL Java
第一个MyBatis程序(上)
第一个MyBatis程序(上)
|
Java 关系型数据库 数据库连接
第一个Mybatis程序
思路:搭建环境--》导入Mybatis-->编写代码--》测试!
第一个Mybatis程序
|
SQL XML Java
第一个mybatis程序
第一个mybatis程序
284 0
|
XML Java 数据库连接
Mybatis学习笔记(1)——第一个程序
暑期之前就有打算学习SSM,但是我记得当时再配置一个框架疯狂报错,弄得我很难受,,再加上当时有点其他事情,所以就放了下来。现在很有需求要会ssm,所以就学了一下。感觉框架这东西配置就烦的要死。错一丁点就全错。。下面开始说配置详情。
110 0
Mybatis学习笔记(1)——第一个程序