java語言之mybatis(java語言之基本語法)

本文目錄一覽:

mybatis 和 mybatis和ibatis的區別

兩者的區別有:

2.5.1 ibatis中根元素是sqlMap,mybatis中是mapper;

2.5.2 在 iBatis 中,namespace 不是必需的,且它的存在沒有實際的意義。在 MyBatis 中,namespace 終於派上用場了,它使得映射文件與接口綁定變得非常自然。

2.5.3 ibatis中有resultMap和resultClass兩種返回類型,resultMap是我們在ibatis的配置文件中定義的,也就是在配置文件中使用resultMap元素定義的;resultClass是指java語言中內置的類型,如:integer、java.util.HashMap等等;

mybatis中將兩者統一為resultType,這樣挺好的,開發者不用再記兩個屬性了。

2.5.4 ibatis中有parameterClass,mybatis中有parameterType,兩者區別不大。

2.5.5 參數的寫法比較

Java框架MyBatis工作流程是怎樣的?

一、Mybatis介紹

MyBatis是一款一流的支持自定義SQL、存儲過程和高級映射的持久化框架。MyBatis幾乎消除了所有的JDBC代碼,也基本不需要手工去 設置參數和獲取檢索結果。MyBatis能夠使用簡單的XML格式或者註解進行來配置,能夠映射基本數據元素、Map接口和POJOs(普通java對 象)到數據庫中的記錄。

二、MyBatis工作流程

(1)加載配置並初始化

觸發條件:加載配置文件

配置來源於兩個地方,一處是配置文件,一處是Java代碼的註解,將SQL的配置信息加載成為一個個MappedStatement對象(包括了傳入參數映射配置、執行的SQL語句、結果映射配置),存儲在內存中。

(2)接收調用請求

觸發條件:調用Mybatis提供的API

傳入參數:為SQL的ID和傳入參數對象

處理過程:將請求傳遞給下層的請求處理層進行處理。

(3)處理操作請求 觸發條件:API接口層傳遞請求過來

傳入參數:為SQL的ID和傳入參數對象

處理過程:

(A)根據SQL的ID查找對應的MappedStatement對象。

(B)根據傳入參數對象解析MappedStatement對象,得到最終要執行的SQL和執行傳入參數。

(C)獲取數據庫連接,根據得到的最終SQL語句和執行傳入參數到數據庫執行,並得到執行結果。

(D)根據MappedStatement對象中的結果映射配置對得到的執行結果進行轉換處理,並得到最終的處理結果。

(E)釋放連接資源。

(4)返回處理結果將最終的處理結果返回。

orm工具的基本思想

無論是用過的hibernate,mybatis,你都可以法相他們有一個共同點:

從配置文件(通常是XML配置文件中)得到 sessionfactory.

由sessionfactory  產生 session

在session 中完成對數據的增刪改查和事務提交等.

在用完之後關閉session 。

在java 對象和 數據庫之間有做mapping 的配置文件,也通常是xml 文件。

功能架構

Java框架篇—Mybatis 入門

Mybatis的功能架構分為三層:

API接口層:提供給外部使用的接口API,開發人員通過這些本地API來操縱數據庫。接口層一接收到調用請求就會調用數據處理層來完成具體的數據處理。

數據處理層:負責具體的SQL查找、SQL解析、SQL執行和執行結果映射處理等。它主要的目的是根據調用的請求完成一次數據庫操作。

基礎支撐層:負責最基礎的功能支撐,包括連接管理、事務管理、配置加載和緩存處理,這些都是共用的東西,將他們抽取出來作為最基礎的組件。為上層的數據處理層提供最基礎的支撐。

多需要添加的驅動包:

Java框架篇—Mybatis 入門

下面進行快速入門:

目錄如下:

Java框架篇—Mybatis 入門

實體類User

package com.oumyye.model;

public class User {

  private String id;

  private String name;

  private  int age;

  public String getId() {

      return id;

  }

  public void setId(String id) {

      this.id = id;

  }

  public String getName() {

      return name;

  }

  public void setName(String name) {

      this.name = name;

  }

  public int getAge() {

      return age;

  }

  public void setAge(int age) {

      this.age = age;

  }

  @Override

  public String toString() {

      return “User [id=” + id + “, name=” + name + “, age=” + age + “]”;

  }

}

映射文件UserMapping.xml

?xml version=”1.0″ encoding=”UTF-8″ ?

!DOCTYPE mapper PUBLIC “-//mybatis.org//DTD Mapper 3.0//EN” “”

mapper namespace=”com.oumyye.mapping.UserMapping”

  !– 在select標籤中編寫查詢的SQL語句, 設置select標籤的id屬性為getUser,id屬性值必須是唯一的,不能夠重複

  使用parameterType屬性指明查詢時使用的參數類型,resultType屬性指明查詢返回的結果集類型

  resultType=”com.oumyye.model.User”就表示將查詢結果封裝成一個User類的對象返回

  User類就是users表所對應的實體類

  —

  !–

      根據id查詢得到一個user對象

   —

  select id=”getUser” parameterType=”String”

      resultType=”com.oumyye.model.User”

      select * from user where id=#{id}

  /select

/mapper

資源文件mybatis.xml

?xml version=”1.0″ encoding=”UTF-8″?

!DOCTYPE configuration PUBLIC “-//mybatis.org//DTD Config 3.0//EN” “”

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

              property name=”username” value=”root” /

              property name=”password” value=”root” /

          /dataSource

      /environment

  /environments

  mappers

mapper resource=”com/oumyye/mapping/userMapping.xml”/

   /mappers

/configuration

測試類:

package test;

import java.io.InputStream;

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import org.junit.Test;

import com.oumyye.model.User;

public class Tests {

@Test

public void test(){

String resource = “mybatis.xml”;

      //使用類加載器加載mybatis的配置文件(它也加載關聯的映射文件)

      InputStream is = Tests.class.getClassLoader().getResourceAsStream(resource);

      //構建sqlSession的工廠

      SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);

SqlSession session = sessionFactory.openSession();

      /**

       * 映射sql的標識字符串,

       * com.oumyye.mapping.UserMapping是userMapper.xml文件中mapper標籤的namespace屬性的值,

       * getUser是select標籤的id屬性值,通過select標籤的id屬性值就可以找到要執行的SQL

       */

      String statement = “com.oumyye.mapping.UserMapping.getUser”;//映射sql的標識字符串

      //執行查詢返回一個唯一user對象的sql

      User user = session.selectOne(statement, “1123”);

      System.out.println(user.toString());

}

}

結果:

什麼是mybatis?

MyBatis 是一個可以自定義SQL、存儲過程和高級映射的持久層框架。MyBatis 摒除了大部分的JDBC代碼、手工設置參數和結果集重獲。MyBatis 只使用簡單的XML 和註解來配置和映射基本數據類型、Map 接口和POJO 到數據庫記錄。相對Hibernate和Apache OJB等“一站式”ORM解決方案而言,Mybatis 是一種“半自動化”的ORM實現。

需要使用的Jar包:mybatis-3.0.2.jar(mybatis核心包)。mybatis-spring-1.0.0.jar(與Spring結合包)。

MyBatis的前身是ibatis,但是在配置sql的語法上有明顯的區別,並且spring目前的版本封裝mybatis,至於mybatis-spring.jar文件也是mybatis團隊複雜開發的jar包,用於和spring整合。之前ibatis的源碼託管方是apache,而mybatis是google。

什麼是mybatis 為什麼要使用my batis

1、定義

MyBatis是一個支持普通SQL查詢,存儲過程和高級映射的優秀持久層框架。

2、使用原因

MyBatis消除了幾乎所有的JDBC代碼和參數的手工設置以及對結果集的檢索封裝。MyBatis可以使用簡單的XML或註解用於配置和原始映射,將接口和Java的POJO(Plain Old Java Objects,普通的Java對象)映射成數據庫中的記錄。

3、總體流程

(1)加載配置並初始化

觸發條件:加載配置文件

處理過程:將SQL的配置信息加載成為一個個MappedStatement對象(包括了傳入參數映射配置、執行的SQL語句、結果映射配置),存儲在內存中。

(2)接收調用請求

觸發條件:調用Mybatis提供的API

傳入參數:為SQL的ID和傳入參數對象

處理過程:將請求傳遞給下層的請求處理層進行處理。

(3)處理操作請求

觸發條件:API接口層傳遞請求過來

傳入參數:為SQL的ID和傳入參數對象

處理過程:

(A)根據SQL的ID查找對應的MappedStatement對象。

(B)根據傳入參數對象解析MappedStatement對象,得到最終要執行的SQL和執行傳入參數。

(C)獲取數據庫連接,根據得到的最終SQL語句和執行傳入參數到數據庫執行,並得到執行結果。

(D)根據MappedStatement對象中的結果映射配置對得到的執行結果進行轉換處理,並得到最終的處理結果。

(E)釋放連接資源。

(4)返回處理結果將最終的處理結果返回。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/298143.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-28 12:17
下一篇 2024-12-28 12:17

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29

發表回復

登錄後才能評論