本文目錄一覽:
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-tw/n/298143.html