MyBatis框架階段總結

在這裏插入圖片描述

1 框架概述

1.1 框架是什麼

框架(Framework)是整個或部分系統的可重用設計,表現爲一組抽象構件及構件實例間交互的方法;另一種定義認爲,框架是可被應用開發者定製的應用骨架。前者是從應用方面而後者是從目的方面給出的定義。簡而言之,框架其實就是某種應用的半成品,就是一組組件,供你選用完成你自己的系統。簡單說就是使用別人搭好的舞臺,你來做表演。而且,框架一般是成熟的,不斷升級的軟件

1.2 爲什麼要使用框架

框架要解決的最重要的一個問題是技術整合的問題,在 J2EE 的 框架中,有着各種各樣的技術,不同的軟件企業需要從 J2EE 中選擇不同的技術,這就使得軟件企業最終的應用依賴於這些技術,技術自身的複雜性和技術的風險性將會直接對應用造成衝擊。而應用是軟件企業的核心,是競爭力的關鍵所在,因此應該將應用自身的設計和具體的實現技術解耦。這樣,軟件企業的研發將集中在應用的設計上,而不是具體的技術實現,技術實現是應用的底層支撐,它不應該直接對應用產生影響。框架的重要性在於它實現了部分功能,並且能夠很好的將低層應用平臺和高層業務邏輯進行了緩和。爲了實現軟件工程中的“高內聚、低耦合”。把問題劃分開來各個解決,易於控制,易於延展,易於分配資源。我們常見的MVC 軟件設計思想就是很好的分層思想。

1.3 MyBatis框架簡述

mybatis 是一個優秀的基於 java 的持久層框架,它內部封裝了 jdbc,使開發者只需要關注 sql 語句本身,而不需要花費精力去處理加載驅動、創建連接、創建 statement 等繁雜的過程。mybatis 通過 xml 或註解的方式將要執行的各種 statement 配置起來,並通過 java 對象和 statement 中sql 的動態參數進行映射生成最終執行的 sql 語句,最後由 mybatis 框架執行 sql 並將結果映射爲 java 對象並返回。採用 ORM 思想解決了實體和數據庫映射的問題,對 jdbc 進行了封裝,屏蔽了 jdbc api 底層訪問細節,使我們不用與 jdbc api 打交道,就可以完成對數據庫的持久化操作。

2.MyBatis框架起步

2.1搭建MyBatis環境

2.1.1 創建maven工程

在項目的pom.xml內添加所依賴的jar包

<?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>org.example</groupId>
    <artifactId>mybatisdemo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
        </dependency>
        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>
        <dependency>
            <groupId>jaxen</groupId>
            <artifactId>jaxen</artifactId>
            <version>1.1.6</version>
        </dependency>
    </dependencies>
</project>

編寫實體類,假設在mysql中已有一張表user,這個表在ithemas數據庫下,先把它導出

mysqldump -u root -p ithemas > ithemas.sql;

字段有

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) NOT NULL,
  `birthday` datetime DEFAULT NULL,
  `sex` char(1) DEFAULT NULL,
  `address` varchar(256) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

2.1.2 創建實體類User

使用逆向工程將user表導入到idea中生成user的pojo類
點擊idea的view–>點擊Tool Windows–>點擊DataBase–>添加一個DataSource
在這裏插入圖片描述
寫好自己的數據庫配置參數後,點擊確定,等待加載一些jar包,就ok了
在這裏插入圖片描述右鍵user表,點擊Scriped Extentions裏面的Generate Generate POJOs groovy,就生成成功了,此外我們還要繼承一下Serializable(序列化)接口,實現數據持久化

目錄結構如下
在這裏插入圖片描述

package com.james.pojo;
import java.io.Serializable;
import java.util.Date;

public class User implements Serializable {

  private int id;
  private String username;
  private Date birthday;
  private String sex;
  private String address;


  public int getId() {
    return id;
  }

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

  public String getUsername() {
    return username;
  }

  public void setUsername(String username) {
    this.username = username;
  }


  public Date getBirthday() {
    return birthday;
  }

  public void setBirthday(Date birthday) {
    this.birthday = birthday;
  }


  public String getSex() {
    return sex;
  }

  public void setSex(String sex) {
    this.sex = sex;
  }


  public String getAddress() {
    return address;
  }

  public void setAddress(String address) {
    this.address = address;
  }

  @Override
  public String toString() {
    return "User{" +
            "id=" + id +
            ", username='" + username + '\'' +
            ", birthday=" + birthday +
            ", sex='" + sex + '\'' +
            ", address='" + address + '\'' +
            '}';
  }
}

2.1.3 編寫持久層接口IUserDao

結構如下
在這裏插入圖片描述IuserDao實現的接口方法

package com.james.dao;

import com.james.pojo.User;

import java.util.List;

public interface IUserDao {
    /**
     * 查詢所有操作
     * @return
     */
    List<User> findAll();
}

2.1.4 編寫持久層接口的映射文件IUserDao.xml

做一個簡單的查詢操作
在這裏插入圖片描述這裏要注意對於映射文件來說:
創建位置:必須和持久層接口在相同的包中。
名稱:必須以持久層接口名稱命名文件名,擴展名是.xml

像這樣都位於com.james.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裏寫IUserDao接口的位置-->
<mapper namespace="com.james.dao.IUserDao">
    <!-- 配置查詢所有操作 -->
    <!--id中的字段要和IUserDao接口類中的方法名一致,resultType返回的類型是User類型-->
    <select id="findAll" resultType="com.james.pojo.User">
        select * from user
    </select>
</mapper>

2.1.5 編寫SqlMapConfig.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>
    <!-- 配置 mybatis 的環境 -->
    <environments default="mysql">
        <!-- 配置 mysql 的環境 -->
        <environment id="mysql">
            <!-- 配置事務的類型 -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置連接數據庫的信息:用的是數據源(連接池) -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/ithemas"/>
                <property name="username" value="root"/>
                <property name="password" value="123"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 告知 mybatis 映射配置的位置,這裏填自己的IUserDao所在位置-->
    <mappers>
        <mapper resource="com/james/dao/IUserDao.xml"/>
    </mappers>
</configuration>

2.2 編寫測試類進行測試

在這裏插入圖片描述

package com.james.test;

import com.james.dao.IUserDao;
import com.james.pojo.User;
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.InputStream;
import java.util.List;
public class MyBatisTest {
    public static void main(String[] args) throws Exception {
        //1.讀取配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.創建 SqlSessionFactory 的構建者對象
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        //3.使用構建者創建工廠對象 SqlSessionFactory
        SqlSessionFactory factory = builder.build(in);
        //4.使用 SqlSessionFactory 生產 SqlSession 對象
        SqlSession session = factory.openSession();
        //5.使用 SqlSession 創建 dao 接口的代理對象
        IUserDao userDao = session.getMapper(IUserDao.class);
        //6.使用代理對象執行查詢所有方法
        List<User> users = userDao.findAll();
        for(User user : users) {
            System.out.println(user);
        }
        //7.釋放資源
        session.close();
        in.close();
    }
}

成功
在這裏插入圖片描述

發佈了63 篇原創文章 · 獲贊 21 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章