1. 程式人生 > >MyBatis(一)原理過程實現crud以及自增主鍵的返回

MyBatis(一)原理過程實現crud以及自增主鍵的返回

MyBatis是一個用在持久層的框架,也就是操作資料庫的。

在前面的學習中,我們通過原生jdbc操作資料庫。以及spring框架中封裝的JdbcTemplate框架來操作資料庫。

原生態jdbc程式問題

(1)資料庫的連線關閉操作複雜,效率慢

(2)sql語句的編寫和preparedStatement執行sql語句中注入引數都是在java語句中,是硬編碼

(3)從resutSet中遍歷結果集資料時,存在硬編碼,將獲取表的欄位進行硬編碼,不利於系統維護

硬編碼是指將可變變數用一個固定值來代替的方法,用這種方法編譯後,如果以後需要更改此變數就非常困難了

spring框架中封裝的JdbcTemplate框架

可以在配置檔案中,配置了c3p0資料連線池,這方面改善了,但是還是存在硬編碼問題

MyBatis框架原理

(1)全域性配置檔案SqlMapConfig.xml,裡面配置資料來源,事務,執行環境

(2)sqlSessionFactory會話工廠,根據配置檔案來建立工廠,它的作用就是產生sqlSeesion

(3)sqlSeesion會話,是一個介面,用來執行sql語句,呼叫Executor(執行器)來執行

(4)在mybatis中sql語句不再寫到java程式程式碼中,而是寫在mapper.xml的配置檔案中,這叫做表的對映檔案。比如在我們的專案中對應的表有很多。有user表,item表,對這些表都會有增刪改查的操作,我們就會為這些表都建立對映檔案然後在檔案中配置相應的sql語句,然後通過sqlSession來執行。但是前面說SqlMapConfig.xml是全域性配置檔案,所以要把所有的對映檔案載入到全域性配置檔案

(4)mapped stattement底層封裝物件,對資料庫儲存封裝,包括sql語句,輸入引數,輸出引數型別等

總結:mybatis主要放在sql語句中,實現了輸入對映和輸出對映

mybatis入門程式

(1)mybatis執行環境搭建,匯入jar包

(2)開始配置mybatis全域性配置檔案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>
	
	<!-- 和spring整合後 environments配置將廢除-->
	<environments default="development">
		<environment id="development">
		<!-- 使用jdbc事務管理,事務控制由mybatis-->
			<transactionManager type="JDBC" />
		<!-- 資料庫連線池,由mybatis管理-->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url" value="jdbc:mysql:///employees" />
				<property name="username" value="root" />
				<property name="password" value="123456" />
			</dataSource>
		</environment>
	</environments>

	
</configuration>

(3)實現查詢需求

  • 根據id查詢user表 

首先建立po類 

建立user的對映檔案,主要配置sql語句,查詢時select標籤,主要是paramterTyper傳入引數型別和resultType獲取結果物件的型別,其中#{}就是佔位符的概念

#{}通過ognl表示式,呼叫屬性的get方法來獲得傳入引數,如果傳入的引數是簡單型別。括號中的變數名可以是任意名字

<?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名稱空間,作用就是對sql進行分類化管理,理解sql隔離 
注意:使用mapper代理方法開發,namespace有特殊重要的作用
-->
<mapper namespace="test">
	<select id="findUserById" parameterType="int" resultType="xidian.lili.po.User">
		select * from user where id=#{value}
	</select>
	
</mapper>

把對映檔案載入到全域性對映檔案中,利用mappers標籤,把對映檔案的路徑傳給source屬性

然後開始寫程式,在程式中執行配置好的sql語句,按照上面的流程,先建立sqlSessionFactory工廠,把全域性配置檔案傳進去,然後開啟sqlsession開始執行對映檔案配置好的sql,因為根據id查詢時返回一條記錄,所有使用selectOne()方法。方法的第一個引數就是我們對映檔案配置sql語句的id,一般是對映檔案中namespace.id名(這裡我使用id也可以,因為只是簡單測試,namespace主要是對sql進行分化管理,後面會游泳重要作用),根據這個id,sqlsession找到要執行的sql語句,然後輸入引數,引數型別和佔位符資訊也在對映檔案中,並且我們也配置了輸出型別是User,所以返回值就是user物件

 

  • 根據name查詢user表

那這個方法與上面方法類似,只是name屬性不是User表的主鍵,不能唯一確定一條資料,所以返回的結果應該是一個List集合,

首先還是在user的對映檔案中,配置這個需求的sql,雖然我們結果返回的是list,但是list中的元素都是user物件,所以resulyType型別還是user,這裡我們採用模糊查詢,使用${},意思是會把value的值不做任何處理拼接在sql語句中,這樣的問題就是會有sql注入,下面的結果展示我們可以看到查詢的sql語句

編寫程式執行配置好的sql語句,這次呼叫的方法是slectList()方法,引數意義與selectOne()一樣

  • 新增、刪除和更新

對映檔案的配置 

在程式程式碼中增刪改都需要手動提交事務 

 

 

返回自增主鍵 

一般在實際應用中,對於剛插入的新資料,我們可能會要獲得它的id號,在配置檔案中修改如下

如果不加selectkey,輸出的id就是0 

非自增主鍵返回

那麼非自增主鍵用的是select uuid()方法,由於是費自增,這個方法配置是order屬性應該是BEGORE 

相關推薦

MyBatis原理過程實現crud以及返回

MyBatis是一個用在持久層的框架,也就是操作資料庫的。 在前面的學習中,我們通過原生jdbc操作資料庫。以及spring框架中封裝的JdbcTemplate框架來操作資料庫。 原生態jdbc程式問題 (1)資料庫的連線關閉操作複雜,效率慢 (2)sql語句的編寫和

避坑必看:很詳盡的MyBatis返回實驗包括插入或更新SQL語句insert on duplicate key update的返回情況

目錄 (7)介面 5. 總結 本篇文章對MyBatis操作MySQL時自增主鍵返回情況進行詳細的實驗,給出不同情況下Mybatis返回自增主鍵的不同行為,僅基於實驗結果,不做原始碼分

mybatis的執行流程 #{}和${} Mysql返回

ola save select .org 經驗 sel 占位符 upd 執行 n Mybatis配置 全局配置文件SqlMapConfig.xml,配置了Mybatis的運行環境等信息。 Mapper.xml文件即Sql映射文件,文件中配置了操作數據庫的Sql語句。此文件需

mybatis插入返回

對於支援主鍵自增的sql而言,如mysql、sql server 如下方法: <insert id="addBook" parameterType="Book" useGeneratedKeys

mybatis mysql返回

對於自增主鍵的返回 <insert id="insertUser" parameterType="cn.itcast.mybatis.po.User"> <!-- selectKey實現將主鍵返回,將主鍵返回到user物件

MyBatis】——與非返回

  mysql自增主鍵,執行insert提交之前自動生成一個自增主鍵。當時一直沒有想為什麼要返回主鍵,也就是返回就返回了吧,總是有用的,確實,返回來有可能會作為下一次查詢的依據,或者下一個插入的外來鍵的憑證,總之,先返回來再說…… 實現思想是醬紫的:通過mysql函式獲

python實現線性回歸原理

函數 乘法 學習 偏移量 python實現 機器 線性 計算 梯度 線性回歸是機器學習的基礎,用處非常廣泛,在日常工作中有很大作用。 1.什麽是線性回歸 通過多次取點,找出符合函數的曲線,那麽就可以完成一維線性回歸。 2.數學表示 是截距值,為偏移量。 因為單純計算多項

實習專案之ETL過程的簡單手動實現

微博資料ETL 專案角色: 核心研發 開發組人員: 3 工作內容: 通過javase解析、結構化源資料並load到hive資料倉庫中,並使用hivesql、資料分析函式進行活躍度、影響力排行等分析工作。   一、專案簡介: 這個專案是自己在實習期間參與的第一個專案,

【深度學習】線性迴歸原理及python從0開始實現

文章目錄 線性迴歸 單個屬性的情況 多元線性迴歸 廣義線性模型 實驗資料集 介紹 相關連結 Python實現 環境 編碼

深入理解多執行緒——Synchronized的實現原理

synchronized,是Java中用於解決併發情況下資料同步訪問的一個很重要的關鍵字。當我們想要保證一個共享資源在同一時間只會被一個執行緒訪問到時,我們可以在程式碼中使用synchronized關鍵字對類或者物件加鎖。那麼,本文來介紹一下synchronized關鍵字的實

Redux原理:Store實現分析

Redux原理(一):Store實現分析 寫在前面 寫React也有段時間了,一直也是用Redux管理資料流,最近正好有時間分析下原始碼,一方面希望對Redux有一些理論上的認識;另一方面也學習下框架程式設計的思維方式。 Redux如何管理s

Mybatis實現對資料庫的刪改查操作

1.Mybatis簡介 MyBatis 本是apache的一個開源專案iBatis, 2010年這個專案由apache software foundation 遷移到了google code,並且改名為MyBatis 。2013年11月遷移到Github。

火車票線程同步互斥體實現

eas 火車票 oid 主線程 ## code api 火車 ram ##占位 #include <windows.h> #include <iostream> int tickets = 100; HANDLE hMutex;

linux 內核 內存管理 slub算法 原理

orm line mic 內存管理 內存 ria linu -i ims http://blog.csdn.net/lukuen/article/details/6935068linux 內核 內存管理 slub算法 (一) 原理

Y2 初識MyBatis

myba log image batis bsp 方法 config 接口 bat   創建了一個簡單的MyBatis項目,查詢Book數據庫中的book表   首先是創建實體類        然後寫Dao層的接口,並在接口中寫一個查詢的方法        並且在Dao層中

springboot整合Mybatis——入門

target 連接池 param 不支持 void 2.6 batis gpo onf 一、概述   1.先導     mybatis入門隨筆:http://www.cnblogs.com/jiangbei/p/6884641.html   2.引入依賴

Servlet+JDBC設計實現圖書系統管理功能實現

sta 上傳 lec () 一個 ioe nlog and turn 寫在前面,之前由於種種原因博客好久沒有更新。最近打算重拾JavaWeb,所以從頭開始,先用servlet+jdbc+bootstrap最基礎的代碼實現一個圖書系統。考慮有管理員端+用戶端,項目完成後會上

盛夏的MyBatis

存儲 實現 通過 AC 新的 存儲過程 AI apach code 最近在學習MyBatis,略有所得,希望能和大家分享,同時也希望大家能斧正文中不足之處。謝謝! 什麽是MyBatis?    首先我們要知道,MyBatis是一個Java框架,具體一點是一個持久層的不完

BGP——原理精講及內外部鄰居配置

BGPBGP概述 一、BGP/BGP4:Border Gateway Protocol,邊界網關協議 是一種基於距離矢量算法的自治系統之間的路由。 二、BGP並非要找到具體的網絡信息,而是提供可以用與找到自治系統的信息。 而運行於自治系統內部的路由協議,用於找到

嵌入式開發環境搭建 虛擬機實現橋接Ethernet網口 並且通過WIFI進行NAT聯網

war bubuko 搭建服務器 6.4 網線 16.4 聯網 橋接 圖片 背景:   目前手頭上有一塊JZ2440的板子,之前有搭建完整套開發環境,由於虛擬機故障需要從新搭建服務器端,故在此記錄搭建步驟 環境:   Ubuntu16.4   VMWare 12 先行條件: