Mybatis-簡介及入門代碼演示

Mybatis

Mybatis簡介

官方解釋:

MyBatis 是一款優秀的持久層框架,它支持定製化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以使用簡單的 XML 或註解來配置和映射原生類型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 對象)爲數據庫中的記錄。
在這裏插入圖片描述

360百科:

MyBatis 本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google code,並且改名爲MyBatis 。2013年11月遷移到Github。

Mybatis的特點:

  • 簡單易學:本身就很小且簡單。沒有任何第三方依賴,最簡單安裝只要兩個jar文件+配置幾個sql映射文件易於學習,易於使用,通過文檔和源代碼,可以比較完全的掌握它的設計思路和實現。
  • 靈活:mybatis不會對應用程序或者數據庫的現有設計強加任何影響。 sql寫在xml裏,便於統一管理和優化。通過sql語句可以滿足操作數據庫的所有需求。
  • 解除sql與程序代碼的耦合:通過提供DAO層,將業務邏輯和數據訪問邏輯分離,使系統的設計更清晰,更易維護,更易單元測試。sql和代碼的分離,提高了可維護性。
  • 提供映射標籤,支持對象與數據庫的orm字段關係映射
  • 提供對象關係映射標籤,支持對象關係組建維護
  • 提供xml標籤,支持編寫動態sql

官方鏈接:

由上述的官方解釋,我們可以得到Mybatis是一個持久層的框架,所謂持久層,就是我們通常開發時的dao層,數據持久層,就是將內存中失電即失的數據保存成永久不消失的代碼層,就是專門處理數據持久化的,通俗理解就是我們通常操作數據庫的dao層,當然,數據的持久化當然不只是存到數據庫中這一種方式,比如文件IO,將數據寫到文件中,也可以算是數據持久化。

Mybatis的入門程序

該框架是一個操作數據庫的框架,我們想要使用它,先準備好數據庫的資源:

CREATE DATABASE mybatis;

USE mybatis;

CREATE TABLE `user`(
 `id` INT PRIMARY KEY AUTO_INCREMENT COMMENT '主鍵id',
 `name` VARCHAR(30) NOT NULL COMMENT '用戶名',
 `password` VARCHAR(30) NOT NULL COMMENT '密碼'
)ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT INTO USER(`name`,`password`) VALUES('Ara_Hu','123456'),('張三','123456'),('李思','123456'),('王武','123456'),('趙柳','123456'),('田七','123456'),('宋壩','123456');

創建一個Maven項目,並導入依賴:

<!--mysql驅動-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
</dependency>

<!--Mybatis-->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.3</version>
</dependency>

<!--測試Junit-->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>

創建與數據庫表相對應的實體類User,這裏需要字段名與數據庫中的字段名一致。

package com.ara.pojo;

public class User {

    private int id;
    private String name;
    private String password;

    public User() {
    }

    public User(int id, String name, String password) {
        this.id = id;
        this.name = name;
        this.password = password;
    }

    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 getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

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

創建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>
    <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>
    
    <mappers>
    
    </mappers>

</configuration>

這裏我們還是仿照我們之前操作JDBC的方式,先創建一個工具類MybatisUtils:

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

//Mybatis工具類
public class MybatisUtils {

    private static SqlSessionFactory sqlSessionFactory;

    static {
        try {
            //讀取配置文件
            InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");

            //通過傳入的配置文件,獲取SqlSessionFactory對象
            //這裏由於SqlSessionFactoryBuilder的作用就是來獲取sqlSessionFactory 而且獲取到之後就不會再使用 所以一次獲取
            //這裏就是通過創建者模式來獲取一個工廠
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 通過sqlSessionFactory來獲取SqlSession
     * 這裏使用了工廠模式
     *
     * @return SqlSession
     */
    public static SqlSession getSqlSession() {
        return sqlSessionFactory.openSession();
    }

}

然後創建一個UserDao接口,一般來說是應該創建UserMapper接口的,這裏使用UserDao接口或許會更容易理解:

package com.ara.dao;

import com.ara.pojo.User;

import java.util.List;

public interface UserDao {

    /**
     * 查詢所有的User
     * @return 查詢出的User列表
     */
    List<User> getUsers();

}

一般來說,我們這個時候就該編寫UserDao的實現類了,我們使用Mybatis就不需要編寫實現類,我們只需要編寫UserDao對應的xml配置文件UserMapper.xml,一般來說,將該文件和UserDao接口放在同一級目錄下:

<?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:綁定一個對應的Dao接口,可以理解爲這裏就是實現這個接口的-->
<mapper namespace="com.ara.dao.UserDao">
    <!--id:對應接口中方法的名字,可以理解爲接口中該方法的具體實現-->
    <!--resultType:對應接口中方法的返回值類型,我們返回的是List<User>,這裏設置爲User即可-->
    <select id="getUsers" resultType="com.ara.pojo.User">
        select * from user;
    </select>
</mapper>

注意這裏的全限定類名。

這裏好像就已經結束了,實際不是,我們還需要對UserMapper.xml做一個登記註冊,我們需要在mybatis的配置文件(mybatis-config.xml)中的<mappers></mappers>中添加以下代碼:


<!--resource:就是我們需要註冊的Mapper.xml的路徑(注意這裏的路徑/和上面路徑.的區分)-->
<mapper resource="com/ara/dao/UserMapper.xml"></mapper>

然後我們就可以編寫測試代碼了:

package com.ara.dao;

import com.ara.pojo.User;
import com.ara.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class UserDaoTest {

    @Test
    public void getUsersTest(){

        //獲取sqlSession
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        //執行sql
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        List<User> users = userDao.getUsers();

        //遍歷結果集
        for (User user : users) {
            System.out.println(user);
        }

        //關閉sqlSession
        sqlSession.close();

    }

}

博主這裏的目錄結構展示如下:
在這裏插入圖片描述
運行結果如下:
在這裏插入圖片描述
到此,我們的Mybatis的入門就結束了。

如果跟博主一樣的操作,可能會遇到找不到UserMapper.xml的錯誤:

在這裏插入圖片描述
這就是我們的Maven的pom文件沒有配置過濾的問題,我們只需要在pom文件中添加以下配置即可:

<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>

添加之後,問題就會得到解決。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章