官網(wǎng):https://mybatis.org/mybatis-3/zh/index.html
MyBatis應用在Dao層,封裝了很多JDBC的操作。
DAO(Data Access Object):數(shù)據(jù)訪問對象
DTO(Data Transfer Object):數(shù)據(jù)傳輸對象,就是JavaBeans數(shù)據(jù)模型
entity實體類:entity表示對數(shù)據(jù)庫中所有表的映射,是根據(jù)數(shù)據(jù)庫表字段設計出來的實體(要求表名與類名相同,字段名與成員變量名相同)
vo包:表示前端頁面?zhèn)鬟^來的如表單等數(shù)據(jù)的字段,比如當前端填寫了一個表單,當前端傳過來的數(shù)據(jù)較多時,我們可以創(chuàng)建一個vo實體類,將前端傳來的數(shù)據(jù)字段名作為成員變量名,這樣我們就可以使用@RequestBody注解快速獲取參數(shù)內容,而不需要使用Request對象來一個個獲取,方便開發(fā)。
而dto包:表示的是 vo和entity的一個中間轉換對象,是vo或entity對象中屬性的一個子對象。當前端傳來vo數(shù)據(jù),我們提取vo中的數(shù)據(jù)到dto中,再將dto的數(shù)據(jù)處理后全部移動到entity中進行數(shù)據(jù)的保存。反之亦然。
Impl : DAO接口的真實實現(xiàn)類,完成具體的數(shù)據(jù)庫操作
數(shù)據(jù)庫事務(Database Transaction)
如果將N個數(shù)據(jù)庫操作放到同一個事務中,那么這N個操作最終要么都生效,要么都不生效。(原子性)
START TRANSACTION; //開啟事務
執(zhí)行語句
COMMIT; //提交事務(讓事務生效)
ROLLBACK; //回滾事務(回滾到開啟事務前的狀態(tài))
在Java中:
JDBC的寫法:
connection.setAutoCommit(false); //開啟事務(告訴程序不要自動提交事務,手動提交)
connection.commit(); //提交事務
connection.rollback(); //回滾 (可以用try、catch,回滾放在catch里)
事務的四大特性(ACID):原子性、一致性、隔離性、持久性。
導入依賴
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>x.x.x</version>
</dependency>
準備核心配置文件
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ù)庫、其他環(huán)境可以對應創(chuàng)建
<property name="username" value="root"/>
<property name="password" value="123"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mappers/skill.xml"/> //映射文件(多個)
</mappers>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"> //開啟駝峰命名自動映射,即數(shù)據(jù)庫列名 a_column 映射到Java屬性名 aColumn
//其他各種設置項參照:https://mybatis.org/mybatis-3/zh/configuration.html#settings
</settings>
</configuration>
創(chuà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找到這個select里對應的sql語句;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)建工廠構建器
SqlSessionFactory factory = builder.build(reader); //創(chuàng)建工廠
SqlSession session = factory.openSession(); //創(chuàng)建Session
List<Skill> skills = session.selectList(statement: "skill.list") //selectList表示查出來是一個列表
session.close(); //關閉session
}