Mybatis框架學習筆記

2021-09-25 14:54:12 字數 4075 閱讀 2875

作用

底層是對jdbc的封裝

優點使用 mybatis 時不需要編寫實現類,只需要寫需要執行的sql命令

jar

全域性配置檔案

<?xml version="1.0" encoding="utf-8" ?>

檔案作用: 編寫需要執行的 sql 命令

把 xml 檔案理解成實現類.

<?xml version="1.0" encoding="utf-8" ?>
單獨使用mybatis時的執行方法
inputstream is = resources.getresourceasstream("myabtis.xml");

//使用工廠設計模式

sqlsessionfactory factory = new sqlsessionfactorybuilder().build(is);

//生產 sqlsession

sqlsession session=factory.opensession();

為命名空間

listlist = session.selectlist("a.b.selall");

for (flower flower : list)

session.close();

編寫路徑為了告訴編譯器如何找到其他資源.

路徑分類

絕對路徑

給某個類起別名

示例

select * from people limit #,#

給某個包下所有類起別名,別名為類名,不區分大小寫

mtbatis.xml

select * from people limit #,#

1. 概念複習

1.1 功能:從應用程式角度出發,軟體具有哪些功能.

1.2 業務:完成功能時的邏輯.對應 service 中乙個方法

1.3 事務:從資料庫角度出發,完成業務時需要執行的 sql 集合,統稱乙個事務.

事務回滾.如果在乙個事務中某個 sql 執行事務,希望回

歸到事務的原點,保證資料庫資料的完整性.

2.關於自動提交

在 mybatis 中預設是關閉了 jdbc 的自動提交功能

2.1 每乙個 sqlsession 預設都是不自動提交事務.

2.2 session.commit()提交事務.

2.3 opensession(true);自動提交.setautocommit(true);

3.關於底層封裝

mybatis 底層是對 jdbc 的封裝.

3.1 jdbc 中 executeupdate()執行新增,刪除,修改的 sql.返回值 int, 表示受影響的行數.

3.2 mybatis 中 標籤沒有 resulttype 屬性, 認為返回值都是 int

4.在 opensession()時 mybatis 會建立 sqlsession 時同時建立乙個transaction(事務物件),同時 autocommit 都為 false

如果出現異常,應該 session.rollback()回滾事務

insert into people values(default,#,#)

int index1 = session.insert("a.b.ins", p);

if(index1>0) else

update people set name = # where id = #

delete from people where id = #

實現步驟:

建立乙個介面

**實現步驟

在 mybatis.xml 中下使用

listselall();

}

select * from log where accin=# and accout=#

/**

* mybatis 把引數轉換為 map 了,其中@param("key") 引數內

容就是 map 的 value

* @param accin123

* @param accout3454235

* @return

*/listselbyaccinaccout(@param("accin") string accin123,@param("accout") string accout3454235);

select * from log

where accin=#

andaccout=#

根據不同的條件需要執行不同的 sql 命令.稱為動態 sql

if使用

select * from log where 1=1

and accin=#

and accout=#

select * from log

and accin=#

and accout=#

比直接使用少寫 where 1=1

用在修改 sql 中 set 從句

例項

update log

id=#,

accin=#,

accout=#,

where accin=#

trim

select * from log

and accin=#

bind

resultmap n+1查詢

實現步驟

1.查詢關聯物件(1對1)

在 student 實現類中包含了乙個 teacher 物件

public class student ;

select * from student

簡化方式

n+1 時,如果列名和屬性名相同可以不配置

select * from student

2.查詢關聯物件(1對多)

select * from teacher

select * from student

where tid=#

使用實現載入集合資料(聯合查詢方式)

select t.id tid, t.name tname, s.id sid, s.name sname, age, tid

from teacher t left join student s on t.id = s.tid

mybatis 可以通過主鍵判斷物件是否被載入過

註解:為了簡化配置檔案

使用註解時mybatis.xml中使用

查詢

@select("select * from teacher")

listselall();

新增

@insert("insert into teacher values(default,#)")

int insteacher(teacher teacher);

修改

@update("update teacher set name=# where id=#")

int updteacher(teacher teacher);

刪除

@delete("delete from teacher where id=#")

int delbyid(int id);

mybatis框架學習筆記1

1.巨集觀認識mybatis mybatis是apache下乙個開源的持久層框架,其可以自主編寫sql語句 靈活性更高。2.mybatis執行流程 基於mybatis 3.2 通過sqlsessionfactorybuilder 建造者模式 建立sqlsessionfactory 介面 物件 sql...

個人學習筆記 Mybatis框架學習 5

開啟延遲載入的支援 lazyloadingenabled value true aggressivelazyloading value false settings 之後在相應的對映關係物件配置時,引入select屬性,屬性的值配置對應的延時載入要呼叫的語句,例如 配置user物件中accounts...

Mybatis框架學習 一

詳細內容 省略了繁瑣的建立連線,statement,jdbc相關的處理 sql寫在xml中,開發人員專注於sql,方便優化效能和管理sql語句 支援動態sql 缺點 sql工作量大,欄位多,關聯表多是更是如此 sql依賴於資料庫,可移植性不高 xml裡 id 必須唯一,導致了dao中方法不支援過載 ...