1. 程式人生 > >mybatis學習一:入門

mybatis學習一:入門

一 mybatis入門
1.1 mybatis是什麼
MyBatis是一個簡化和實現了 Java 資料持久化層(persistence layer)
的開源框架,它抽象了大量的JDBC冗餘程式碼,並提供了一個簡單易用的
API和資料庫互動。
MyBatis的前身是iBATIS,iBATIS於2002年由ClintonBegin建立
。MyBatis3是iBATIS的全新設計,支援註解和Mapper。
MyBatis流行的主要原因在於它的簡單性和易使用性。在Java應用程式中
,資料持久化層涉及到的工作有:將從資料庫查詢到的資料生成所需要的
Java物件;
將Java物件中的資料通SQL持久d化到資料庫中。
MyBatis通過抽象底層的JDBC程式碼,自動化SQL結果集產生Java物件
、Java物件的資料持久化資料庫中的過程使得對SQL的使用變得容易。

1.2 Git 是一個免費開源的分散式版本控制系統,被用於高速有效地處理大大小小項

目中所有檔案,在軟體開發中使用的其他版本控制軟體類似與SVN、VSS、CVS等等.

1.3 作為一個分散式的版本控制系統,在Git中並不存在主庫這樣的概念,每一份複製出的

庫都可以獨立使用,任何兩個庫之間的不一致之處都可以進行合併。github以託管
各種git庫,並提供一個web介面,可以說是一款易於使用的git圖形客戶端。我們
熟知的spring、struts、Hibernate等框架的原始碼在github上面都可以找到
其原始碼

1.4 iBATIS一詞來源於internet和abatis的組合,是一個在2002年發起的開放原始碼專案

。於2010年6月16號被谷歌託管,改名為MyBatis。
ibatis的官網 http://ibatis.apache.org/ 進去官網會看到下面提示:
apache ibatis is retired at the apache
software foundation (2010/06/16)
the original project team has moved to
mybatis hosted at google code.
see http://www.mybatis.org/ for more.
然而http://www.mybatis.org/這個地址一直處於打不開狀態…
但是我們最終是可以在github中找到mybatis的相關下載的:
mybatis在github中的地址

https://github.com/mybatis/mybatis-3
最新版本的mybatis的下載地址
https://github.com/mybatis/mybatis-3/releases
doc文件
http://www.mybatis.org/mybatis-3/

1.5 當前有很多Java實現的持久化框架,而MyBatis流行起來有以下原因:
	1.5.1 它消除了大量的JDBC冗餘程式碼
Java通過JDBC的API來操作關係型資料庫,但是JDBC是一個非常底層的API,我們需要書

寫大量的程式碼來完成對資料庫的操作。例如一個插入操作(參考之前
學習JDBC時候的程式碼例項)
但是使用mybatis來完成相同的插入操作要簡單方便靈活的多:
第一步:在SQLMapper對映配置檔案中配置SQL語句,假定為StudentMapper.xml

INSERT INTO STUDENTS(ID,NAME,EMAIL)
VALUES(#{id},#{name},#{email})

第二步:建立一個StudentMapper介面
public interface StudentMapper{
void insertStudent(Student student);
}
第三步:編寫java程式碼完成插入操作:
SqlSession session = getSqlSessionFactory().openSession();
StudentMapper mapper = session.getMapper(StudentMapper.class);
mapper.insertStudent(student);

		特別之處的是,MyBatis還提供了其他的一些特性來簡化持久化邏輯的實現
		它支援複雜的SQL結果集資料對映到巢狀的物件結構
		它支援一對一和一對多的結果集和Java物件的對映
		它支援根據輸入的資料構建動態的SQL語句
	1.5.2 它有低的學習曲線
		MyBatis能夠流行的首要原因之一在於它學習和使用起來非常簡

單,它取決於你Java和 SQL方面的知識。如果開發人員很熟悉Java和SQL,

他們會發現MyBatis入門非常簡單。

	1.5.3 它可以接受SQL語句
		成熟的ORM框架鼓勵使用實體物件和在其底層自動產生SQL語句

。由於這種的SQL生成方式,我們有可能不能夠利用到資料庫的一些特有的
特性。
Hibernate允許執行本地SQL,
但是這樣會打破持久層和資料庫獨立
的原則。MyBatis框架接受SQL語句,而不是將其對開發人員隱藏起來。
由於MyBatis不會產生任何的SQL語句,
所以開發人員就要準備SQL語句,
這樣就可以充分利用資料庫特有的特性並且可以
準備自定義的查詢。另外,
MyBatis 對儲存過程也提供了支援。
1.5.5 它提供了與Spring框架的整合支援
MyBatis提供了與流行的依賴注入框架Spring的開包即用的整合
支援,這將進一步簡化MyBatis的使用
1.5.6 它提供了與第三方快取類庫的整合支援
MyBatis有內建的SqlSession級別的快取機制,用於快取Select
語句查詢出來的結果。
除此之外,
MyBatis提供了與多種第三方快取類庫的整合支援,如EHCache,
OSCache,Hazelcast等。
1.5.7 它引入了更好的效能
效能問題是關乎軟體應用成功與否的關鍵因素之一。為了達到更好的效能,
需要考慮很多事情,而對很多應用而言,資料持久化層是整個系統性能的關鍵。

MyBatis支援資料庫連線池,消除了為每一個請求建立一個數據庫連線的
開銷,MyBatis提供了內建的快取機制,在SqlSession級別提供了對
SQL
查詢結果的快取。即:如果你呼叫了相同的select查詢,MyBatis 會將
放在快取的結果返回,而不會去再查詢資料庫。MyBatis框架並沒有大量
地使用代理機制,因此對於其他的過度地使用代理
的ORM框架而言,MyBatis可以獲得更好的效能.

1.6 mybatis的jar包
	mybatis的核心包只有一個mybatis-3.x.0.jar,另外還有一些

【可選】的依賴包(日誌、代理等所需要的),在下載的壓縮包中可以找到.

1.7 mybatis框架中一般需要倆種檔案:
	第一種:mybatis的配置檔案: mybatis-config.xml,其中包
括資料庫連線資訊,類型別名等等
		特點:
			名字一般是固定的
			位置是src下面
		示例:
		<?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> 
		  <typeAliases> 
			<typeAlias alias="Student" type="com.briup.pojo.Student" /> 
		  </typeAliases> 
		  <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/test" /> 
				-->
				<property name="driver" value="oracle.jdbc.driver.OracleDriver" /> 
				<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:XE" /> 
				<property name="username" value="test" /> 
				<property name="password" value="test" /> 
			  </dataSource> 
			</environment> 
		  </environments> 
		  <mappers> 
			<mapper resource="com/briup/pojo/StudentMapper.xml" /> 
		  </mappers> 
		</configuration> 


	第二種:mybatis的對映檔案:XxxxxMapper.xml,這個xml檔案中
	包括Xxxx類所對應的資料庫表的各種增刪改查sql語句
		特點:
			名字一般為XxxxMapper.xml,Xxxx是對應類的名字
			位置不固定,一般放到一個專門的package裡面
		例項:
		<?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.briup.pojo.StudentMapper"> 
		  <resultMap type="Student" id="StudentResult"> 
			<id property="id" column="id" /> 
			<result property="name" column="name" /> 
			<result property="email" column="email" /> 
		  </resultMap> 
		  <select id="findAllStudents" resultMap="StudentResult"> 
				SELECT * FROM STUDENTS 
		  </select> 
		  <select id="findStudentById" parameterType="int" resultType="Student"> 
			 SELECT ID AS STUDID, NAME, EMAIL  
				 FROM STUDENTS WHERE ID=#{Id} 
		  </select> 
		  <insert id="insertStudent" parameterType="Student"> 
			 INSERT INTO STUDENTS(ID,NAME,EMAIL)  
				 VALUES(#{id },#{name},#{email}) 
		  </insert> 
		</mapper> 

1.8 mybatis中的對映介面XxxxMapper.java(對XxxxMapper.xml中的sql語句進行對映)
	mybatis中除了必須的jar包、各種xml配置檔案之外,一般還需要有呼叫sql語句執

行的介面XxxxMapper.java
示例:
public interface StudentMapper{
List findAllStudents();
Student findStudentById(Integer id);
void insertStudent(Student student);
}
注意:介面中的方法的名字和XML檔案定義的SQL對映語句的名稱要相同
同時我們不需要去實現該介面,因為mybatis中提供了相應的方式在執行期間動
態生成該介面的實現類物件(動態代理技術,spring框架中會想些講解動態代理).

1.9 mybatis中的SqlSession介面和sqlSessionFactory介面
	SqlSession介面的實現類物件是mybatis中最重要的一個物件,我們可以使用該物件
動態獲得XxxxMapper.java介面的實現類物件,然後就可以呼叫
	到XxxxMapper.java介面中方法所對映
的sql語句(在xml檔案中配置的sql語句)。
	sqlSessionFactory介面的實現類物件是一個工廠物件,專門負責來產生SqlSession物件的
	例如:
	InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); 
	SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
	SqlSession sqlSession = sqlSessionFactory.openSession();
	
	//第一種執行sql語句的方式  通過XxxxMapper介面的實現類物件來呼叫
	//動態獲得XxxxMapper介面的實現類
	StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
	studentMapper.insertStudent(new Student(1,"tom","[email protected]"));
	
	//第二種執行sql語句的方式  執行呼叫XxxxMapper.xml中寫好的sql語句
	//也可以【不通過】Mapper介面執行對映的SQL
	//然而,使用 Mapper介面是最佳實踐
	//sqlSession.selectOne("com.briup.pojo.StudentMapper.findStudentById",1);

1.10 編寫一個簡單的mybatis進行插入資料的例項
	1.10.1 資料庫建表  dob=Date of Birth
		CREATE TABLE STUDENTS ( 
			stud_id number PRIMARY KEY, 
			name varchar2(50) , 
			email varchar2(50) , 
			dob date 
		); 
	
	1.10.2 新建一個專案,建立好相應的package及class
		package com.briup.pojo;
		import java.util.Date;
		public class Student {
			private Integer studId; 
			private String name; 
			private String email; 
			private Date dob;
			get/set
		}

	1.10.3 專案中引入mybatis的核心包以及可選的依賴包
		必須的包  mybatis-3.3.0.jar    ojdbc14.jar
		可選的包  junit-4.7.jar             log4j-1.2.17.jar
	1.10.4 mybatis中的配置檔案和對映檔案分別引入到專案中
		src下面的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>
			<typeAliases>
				<typeAlias type="com.briup.pojo.Student" alias="Student" />
			</typeAliases>

			<environments default="development">
				<environment id="development">
					<transactionManager type="JDBC"></transactionManager>
					<dataSource type="POOLED">
						<property name="driver" value="oracle.jdbc.driver.OracleDriver" /> 
						<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:XE" /> 
						<property name="username" value="test" />
						<property name="password" value="test" />
					</dataSource>
				</environment>
			</environments>
			
			<mappers>
				<mapper resource="com/briup/mappers/StudentMapper.xml"/>
			</mappers>
			
		</configuration>



		com.briup.mappers包下面的StudentMapper.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">
		<!-- com.briup.mappers.StudentMapper是我們定義介面的全限定名字 這樣就可以使用介面呼叫對映的SQL語句了 這個名字一定要和介面對應上-->
		<mapper namespace="com.briup.mappers.StudentMapper">

			<resultMap type="Student" id="StudentResult">
				<id property="studId" column="stud_id" />
				<result property="name" column="name" />
				<result property="email" column="email" />
				<result property="dob" column="dob" />
			</resultMap>

			<select id="findAllStudents" resultMap="StudentResult">
				SELECT * FROM STUDENTS
			</select>

			<!-- 列名和屬性名字不一致可以給查詢的列起一個別名 -->
			<select id="findStudentById" parameterType="int" resultType="Student">
				SELECT STUD_ID AS STUDID,NAME,EMAIL,DOB
				FROM STUDENTS
				WHERE
				STUD_ID=#{id}
			</select>
			<insert id="insertStudent" parameterType="Student"> 
				INSERT INTO
				STUDENTS(STUD_ID,NAME,EMAIL,DOB) 
				VALUES(#{studId},#{name},#{email},#{dob}) 
			</insert>
		</mapper>
	
	1.10.5 配置log4j.properties檔案中的日誌輸出:
		位置src下面
		內容:
		log4j.rootLogger=DEBUG, stdout 
		log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
		log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
		log4j.appender.stdout.layout.ConversionPattern=%d [%-5p] %c - %m%n
		#show sql
		log4j.logger.java.sql.ResultSet=INFO  
		log4j.logger.org.apache=INFO  
		log4j.logger.java.sql.Connection=DEBUG  
		log4j.logger.java.sql.Statement=DEBUG  
		log4j.logger.java.sql.PreparedStatement=DEBUG 

	1.10.6 com.briup.mappers包下面新建一個介面StudentMapper.java,用來對應xml檔案中的sql語句(對映),從而方便我們呼叫
		package com.briup.mappers;
		import java.util.List;
		import com.briup.pojo.Student;

		//建立對映器Mapper介面StudentMapper
		//方法名和StudentMapper.xml中定義的SQL對映定義名相同
		//這個其實就是dao層介面(資料訪問層,負責和資料庫進行互動)
		public interface StudentMapper {
			List<Student> findAllStudents(); 
			Student findStudentById(Integer id); 
			void insertStudent(Student student);
		}

	1.10.7 建立一個測試類StudentMapperTest.java
		package test;
		import java.io.InputStream;
		import java.util.Date;

		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 org.junit.Test;

		import com.briup.mappers.StudentMapper;
		import com.briup.pojo.Student;

		public class StudentMapperTest {
			
			@Test
			public void testCreateStudent(){
				
				try {
					InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); 
					SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
					SqlSession sqlSession = sqlSessionFactory.openSession();
					
					StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
					Student s = new Student(1,"tom","[email protected]",new Date());
					studentMapper.insertStudent(s);
					sqlSession.commit();
				} catch (Exception e) {
					e.printStackTrace();
				}
				
			}
		}

	1.10.8 執行成功後會在控制檯中看到log4j日誌輸出的這個程式執行的相關資訊

	1.10.9 對mybatis的一些基本封裝
		每次讀取配置檔案,產生一個工廠物件SqlSessionFactory,然後再生成出SqlSession物件,這個過程雖然並不複雜,但是也都是一些重複的程式碼流程,
		所以我們可以對其進行一個簡單的封裝:
		package com.briup.utils;

		import java.io.IOException;
		import java.io.InputStream;

		import org.apache.ibatis.io.Resources;
		import org.apache.ibatis.session.SqlSession;
		import org.apache.ibatis.session.SqlSessionFactory;
		import org.apache.ibatis.session.SqlSessionFactoryBuilder;

		public class MyBatisSqlSessionFactory {
			private static SqlSessionFactory sqlSessionFactory;
			
			public static SqlSessionFactory getSqlSessionFactory(){
				if(sqlSessionFactory == null){
					InputStream inputStream = null;
					try {
						inputStream = Resources.getResourceAsStream("mybatis-config.xml"); 
						sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
					} catch (IOException e) {
						e.printStackTrace();
						throw new RuntimeException(e.getCause());
					}
				}
				return sqlSessionFactory;
			}
			
			public static SqlSession openSession() { 
				return openSession(false); 
			}
			public static SqlSession openSession(boolean autoCommit) { 
				return getSqlSessionFactory().openSession(autoCommit); 
			}
			
		}

		之後每次使用的時候只需要呼叫該類中的靜態方法openSession即可
		上面的程式碼可簡寫為: //注意事務是自動提交還是手動提交
		MyBatisSqlSessionFactory.openSession().getMapper(StudentMapper.class).insertStudent(s);

相關推薦

mybatis學習入門

一 mybatis入門 1.1 mybatis是什麼 MyBatis是一個簡化和實現了 Java 資料持久化層(persistence layer) 的開源框架,它抽象了大量的JDBC冗餘程式碼,並提供了一個簡單易用的 API和資料庫互動。 MyBatis的前身

Mybatis(學習)--基礎入門

什麼是 MyBatis ?   MyBatis 是一款優秀的持久層ORM框架,它支援定製化 SQL、儲存過程以及高階對映。   MyBatis 避免了幾乎所有的 JDBC 程式碼和手動設定引數以及獲取結果集。MyBatis 可以使用簡單的 XML 或註解來配

Linux驅動入門學習()入門介紹

 我們今天所要說的是Linux驅動編寫。現在linux驅動比較流行,主要有幾個方面的原因:1)linux平臺免費,很多晶片廠商希望linux平臺支援自己的產品;2)最近Android平臺很火,這在無形之中幫了linux的忙,搞linux驅動的人也開始多了起來;3)還有

Hibernate學習Hebinate入門以及一些小問題

路徑 java ima maven 註意 添加 cfg.xml mod hbm 1:Hebinate框架的簡述: Hebinate框架主要用用在javaee開發中的dao層設計,實現對數據庫的crud等操作, Hibernate的底層通過jdbc實現,通過對jdbc的封裝

MyBatis總結快速入門

version rac 文件 ctype group esp args select ransac 簡介 MyBatis 是一款優秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。My

MONGODB學習筆記入門

文件:多個鍵及其關聯的值『有序』地放置在一起。 {"greeting" : "Hello, world!", "foo" : 3} 集合:一組文件。集合是無模式的,下面兩個文件可以存在於同一個集合裡面: {"greeting" : "Hello, world!"} {"f

React學習()React入門

一 React 的優點 1.響應式渲染 React 最大的優點在於其響應式渲染,相對於傳統的更新整個頁面的緩慢而言,React 會生成一個虛擬的DOM,當用戶進行操作使狀態有所變化時,React會計算

Mybatis框架學習1入門

一框架介紹 1.Mybatis介紹 ​ MyBatis 本是apache的一個開源專案iBatis, 2010年這個專案由apache software foundation 遷移到了google code,並且改名為MyBatis。是一個基於Java的持久層框架。 ​ Mybatis本質和Hiberna

Golang 學習開發環境搭建-入門必備

一、下載適合本機的Golang版本注意對應好自己PC 的system. Windows 直接下載對應的msi安裝即可,Linux注意發行版本。 本文Linux選擇go1.8.1.linux-amd64.tar.gz版本。二、Golang安裝1.windows安裝的過程比較簡單

MyBatis學習通過自動回覆機器人學習MyBatis

        自動回覆機器人案例分析基本功能:         接收發送指令;         根據指令自動回覆對應的內容;         專案使用技術:         JSP+Servlet+JDBC         專案使用資料庫中的資料表message    

ROS學習筆記() 入門之基本概念

mes rap 打開 創建 創建ca cpp wiki 管理器 速度 目錄 基本概念 實踐操作 基本概念 1. Package 程序包,裏面包含節點Node、ROS程序庫、數據集、配置文件 Package Manefist 程序包的配置文件,即描述程序包的相關信息,包括其名

人臉識別學習筆記入門

##### 一、人臉識別概述 ###### 1.人臉識別的困難之處 * 不同個人之間的區別不大:大部分人臉的結構都很相似,甚至人臉器官的結構外形都很相似。 * 人臉的外形很不穩定:人的面部表情多變,不同的觀察角度、光照條件等都會影響人臉的視覺影象。 ###### 2.人臉識別的典型流程 * 人臉檢測(

FiddlerScript學習改動Request或Response

directed author use lock 改變 請求 including ogl cookies 前兩天因項目須要,簡單看了一下FiddlerScript,功能挺強的。今天有時間細致看一下,做個筆記。 改動Request或Response 改動Request和R

Springboot()入門

熱啟動 exp 頁面 tor posit ole 入口 service 主程序 什麽是spring boot spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開

WPF學習XAML的資源(Resources)結構

pac logs value 改變 linear sha -a writer arp 一個初學者,把知識做個積累,如果有不對的地方,還請高手指出,謝謝! 先看一段代碼:(下面是以Window WPF進行講解,如果是Web 的話就把<Window改為<Page 而

tomcat源碼學習導入eclipse

tps trunk 沒有 asf rop base https distrib 打開 一、下載源碼 進入官網http://tomcat.apache.org,點擊Download>tomcat9>Source Code Distributions>zip 

TestLink學習Windows搭建Apache+MySQL+PHP環境

左右 mysql數據庫 uri 成了 -h 時區 站點 ngx php_curl PHP集成開發環境有很多,如XAMPP、AppServ......只要一鍵安裝就把PHP環境給搭建好了。但這種安裝方式不夠靈活,軟件的自由組合不方便,同時也不利於學習。所以我還是喜歡手工搭建

前端知識學習 CSS基礎

分隔 color html元素 http 方式 瀏覽器 單位 工作 分離 一.CSS概述     css指的是層疊樣式表,樣式定義如何顯示HTML元素,樣式通常存儲在樣式表中,   把樣式添加到HTML4.0中,是為了解決內容和表現分離的問題。外部樣式表通常存儲在css文件

jQuery學習()——jQuery入門

完成 生效 ready 技術 button 覆蓋問題 包括 寫入 屬性和方法 1、jQuery基礎 Jquery它是一個庫(框架),要想使用它,必須先引入! jquery-1.8.3.js:一般用於學習階段。 jquery-1.8.3.min.js:用於項目使用階段 官網下

MyBatis學習()

es2017 提交 clas char 接口類 數據庫 nbsp transacti 兩個 一、MyBatis簡介 MyBatis是一個對JDBC進行封裝的持久層框架,只需關註SQL本身,而不必去處理(註冊驅動、創建connection、創建statement、手動設置參數