官網(wǎng):https://mybatis.org/mybatis-3/zh/index.html
MyBatis應(yīng)用在Dao層阳液,封裝了很多JDBC的操作局蚀。
DAO(Data Access Object):數(shù)據(jù)訪問對(duì)象
DTO(Data Transfer Object):數(shù)據(jù)傳輸對(duì)象羡鸥,就是JavaBeans數(shù)據(jù)模型
entity實(shí)體類:entity表示對(duì)數(shù)據(jù)庫(kù)中所有表的映射抄沮,是根據(jù)數(shù)據(jù)庫(kù)表字段設(shè)計(jì)出來(lái)的實(shí)體(要求表名與類名相同佩抹,字段名與成員變量名相同)
vo包:表示前端頁(yè)面?zhèn)鬟^來(lái)的如表單等數(shù)據(jù)的字段避归,比如當(dāng)前端填寫了一個(gè)表單麸塞,當(dāng)前端傳過來(lái)的數(shù)據(jù)較多時(shí),我們可以創(chuàng)建一個(gè)vo實(shí)體類假夺,將前端傳來(lái)的數(shù)據(jù)字段名作為成員變量名淮蜈,這樣我們就可以使用@RequestBody注解快速獲取參數(shù)內(nèi)容,而不需要使用Request對(duì)象來(lái)一個(gè)個(gè)獲取侄泽,方便開發(fā)礁芦。
而dto包:表示的是 vo和entity的一個(gè)中間轉(zhuǎn)換對(duì)象,是vo或entity對(duì)象中屬性的一個(gè)子對(duì)象悼尾。當(dāng)前端傳來(lái)vo數(shù)據(jù)柿扣,我們提取vo中的數(shù)據(jù)到dto中,再將dto的數(shù)據(jù)處理后全部移動(dòng)到entity中進(jìn)行數(shù)據(jù)的保存闺魏。反之亦然未状。
Impl : DAO接口的真實(shí)實(shí)現(xiàn)類,完成具體的數(shù)據(jù)庫(kù)操作
數(shù)據(jù)庫(kù)事務(wù)(Database Transaction)
如果將N個(gè)數(shù)據(jù)庫(kù)操作放到同一個(gè)事務(wù)中析桥,那么這N個(gè)操作最終要么都生效司草,要么都不生效。(原子性)
START TRANSACTION; //開啟事務(wù)
執(zhí)行語(yǔ)句
COMMIT; //提交事務(wù)(讓事務(wù)生效)
ROLLBACK; //回滾事務(wù)(回滾到開啟事務(wù)前的狀態(tài))
在Java中:
JDBC的寫法:
connection.setAutoCommit(false); //開啟事務(wù)(告訴程序不要自動(dòng)提交事務(wù)泡仗,手動(dòng)提交)
connection.commit(); //提交事務(wù)
connection.rollback(); //回滾 (可以用try埋虹、catch,回滾放在catch里)
事務(wù)的四大特性(ACID):原子性娩怎、一致性搔课、隔離性、持久性截亦。
導(dǎo)入依賴
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>x.x.x</version>
</dependency>
準(zhǔn)備核心配置文件
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development"> //開發(fā)環(huán)境
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/dev"/> //dev為開發(fā)環(huán)境的數(shù)據(jù)庫(kù)爬泥、其他環(huán)境可以對(duì)應(yīng)創(chuàng)建
<property name="username" value="root"/>
<property name="password" value="123"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mappers/skill.xml"/> //映射文件(多個(gè))
</mappers>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"> //開啟駝峰命名自動(dòng)映射,即數(shù)據(jù)庫(kù)列名 a_column 映射到Java屬性名 aColumn
//其他各種設(shè)置項(xiàng)參照:https://mybatis.org/mybatis-3/zh/configuration.html#settings
</settings>
</configuration>
創(chuàng)建對(duì)應(yīng)數(shù)據(jù)模型的映射文件
如skill模型:mappers/skill.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="skill">
<select id="list" resultType="com.mj.bean.Skill"> //通過id找到這個(gè)select里對(duì)應(yīng)的sql語(yǔ)句;resultType為查出數(shù)據(jù)的類型
SELECT * FROM skill
</select>
</mapper>
裝載配置文件崩瓤,創(chuàng)建Session
#import java.io.Reader
#import org.apache.ibatis.io.Resources
try (Reader reader = Resources.getResourceAsReader("mybatis-config.xml")) { //讀取xml文件
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); //創(chuàng)建工廠構(gòu)建器
SqlSessionFactory factory = builder.build(reader); //創(chuàng)建工廠
SqlSession session = factory.openSession(); //創(chuàng)建Session
List<Skill> skills = session.selectList(statement: "skill.list") //selectList表示查出來(lái)是一個(gè)列表
session.close(); //關(guān)閉session
}