我是靠谱客的博主 不安钢铁侠,最近开发中收集的这篇文章主要介绍MyBatis的简介及第一个Mybatis程序,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前言

相信学习过JDBC的人都知道,底层操作数据库的代码还是相当繁琐的。我们实现相关业务的时候,首先得得编写相关的配置类,获取连接,接着编写数据库的sql语句,若是查询语句,还需遍历结果集,最后再关闭连接。这套流程下来确实需要花费一大段时间,但我们的主流业务其实就是编写相关的sql语句,而其余的基本上都是一套固定的模板,所以这时候简化我们数据库操作的Mybatis框架应允而生。

1. 简介

1.1 什么是Mybatis?
[1] Mybatis是一款优秀的持久层框架
[2] 它支持自定义Sql,存储过程以及高级映射
[3] Mybatis免除了几乎所有的JDBC代码以及置参数和获取结果集的操作
[4] Mybatis可以通过简单的XML 或注释来配置和映射原始类型,接口和 java pojo (Plain Old Java Objects, 普通老式java对象)为数据库中的记录
[5] Mybatis本事 apache的一个开源项目 iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis
[6] 2013年11月迁移到Github。(相关的源码可在GitHub上查找)

如何获得Mybatis?
[1] Maven仓库获取jar包

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.6</version>
</dependency>

[2] GitHub上获取源码: https://github.com/mybatis/mybatis-3
[3] 使用中文文档进行学习: https://mybatis.org/mybatis-3/zh/index.html
在这里插入图片描述

1.2 持久化

数据持久化: 持久化就是将程序的数据在持久化状态和瞬时状态的转化过程
可以使用的相关方法:数据库(jdbc), io文件持久化
为什么需要持久化?
有一些对象,不能让它丢掉,又不建议保存在内存中,因为内存太贵了。
持久层: 完成持久化工作的代码块

1.3 为什么需要Mybatis?

[1] 帮助程序员将数据存入数据库中
[2] 操作方便
[3] 传统的JDBC代码太复杂了;Mybatis简化了操作, 而且有一些内置的自动化配置
[4] 优点:

  • 简单易学
  • 灵活
  • sql和代码的分离,提高了可维护性。
  • 提供映射标签,支持对象与数据库的orm字段关系映射
  • 提供对象关系映射标签,支持对象关系组建维护
  • 提供xml标签,支持编写动态sql。
2. 编写第一个Mybatis程序

[1] 搭建数据库

CREATE TABLE `user1`(
   
   `id` INT(20) NOT NULL PRIMARY KEY,
   `name` VARCHAR(30) DEFAULT NULL,
   `pwd` VARCHAR(30) DEFAULT NULL	
)ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT INTO `user1`(`id`,`name`,`pwd`) VALUES
(1,'张三','1122144'),
(2,'李四','1814545'),
(3,'王五','987133')

[2] 新建一个普通的Maven项目

  • 在pom.xml中导入Maven依赖
 <!--导入依赖-->
<dependencies>
    <!--mysql驱动-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.46</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.13</version>
    </dependency>
</dependencies>

接下来关于逻辑层的编写,我们可以参考mybatis的中文官方文档
在这里插入图片描述
编写完成后的目录结构(下面逐步进行讲解)
在这里插入图片描述
[1] 编写配置文件 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.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
  <!--这里的地址放我们编写关于数据库操作的xml文件-->
  <mappers>
    <mapper resource="com/gs/dao/UserMapper.xml"/>
  </mappers>
</configuration>

[2] 在utils 包下创建一个Mybatis的工具类(主要作用就是获取SqlSession)
官方文档中有这么一段话:
在这里插入图片描述
这段代码是固定套路的,不用刻意去记,了解大意即可、

package com.gs.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;

/**
 * @Auther: Gs
 * @Date: 2020/6/5
 * @Description: com.gs.utils
 * @version: 1.0
 */
//sqlSessionFactory ---> sqlSession
public class MybatisUtils {

    private static 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 的实例。
    SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。
    你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句
    */
    public static SqlSession getSession(){
        return sqlSessionFactory.openSession();
    }
}

[3] 在pojo包下创建和表对应的实体类 User.class

package com.gs.pojo;

/**
 * @Auther: Gs
 * @Date: 2020/6/5
 * @Description: com.gs.pojo
 * @version: 1.0
 */
public class User {

    private int 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;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + ''' +
                ", pwd='" + pwd + ''' +
                '}';
    }
}

[4] 在dao包下编写相关的数据库操作代码

  • 编写接口类 UserDao
public interface UserDao {
    List<User> getUserList();
}
  • 编写 UserDao的实现类 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="com.gs.dao.UserDao">
	<!--这里的路径为自己实体类的包路径-->
    <select id="getUserList" resultType="com.gs.pojo.User">
        select * from user1;
    </select>
</mapper>

[5] 编写测试代码

package com.gs.dao;

import com.gs.pojo.User;
import com.gs.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import org.junit.runner.RunWith;

import java.util.List;

import static org.junit.Assert.*;

/**
 * @Auther: Gs
 * @Date: 2020/6/5
 * @Description: com.gs.dao
 * @version: 1.0
 */

public class UserDaoTest {


    @Test
    public void getUserList() {
        //第一步: 获得sqlSession对象
        SqlSession sqlSession = MybatisUtils.getSession();

        //方式一:getMapper
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        List<User> userList = userDao.getUserList();

        for( User user : userList){
            System.out.println(user);
        }

        //关闭sqlSession
        sqlSession.close();


    }
}

写到这里满心欢喜的测试了一下,结果报错了
在这里插入图片描述
很明显它是没找到我们的配置文件,可我们明明书写了,可它为什么找不到呢?我们打开这个项目打包后的文件目录确实发现dao包下没有相关的xml文件
在这里插入图片描述
原因:这主要是由Maven约定大于配置,它默认是不会吧src目录下的xml文件进行打包的,我们必须在pom.xml上加上这段配置才可以避免上面的错误。

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>true</filtering>
        </resource>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

这时我们再次运行程序,查看控制台
在这里插入图片描述
观察输出目录
在这里插入图片描述
这样我们第一个Mybatis程序就算编写成功了

最后

以上就是不安钢铁侠为你收集整理的MyBatis的简介及第一个Mybatis程序的全部内容,希望文章能够帮你解决MyBatis的简介及第一个Mybatis程序所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部