Java的MyBatis快速入門(mén)和實(shí)戰(zhàn)詳解
1.什么是MyBatis?

簡(jiǎn)單來(lái)說(shuō),MyBatis是一款優(yōu)秀的持久層框架,用于簡(jiǎn)化JDBC開(kāi)發(fā)。MyBatis本身是Apache的一個(gè)開(kāi)源項(xiàng)目,期初叫做iBatis,2010年這個(gè)項(xiàng)目前移到google code,并改名為MyBatista。在2013年該項(xiàng)目遷移到GitHub。
概念中的持久層怎么理解?指將數(shù)據(jù)保存到數(shù)據(jù)庫(kù)的那一層代碼。在海量的代碼中,為了保證每一塊代碼的職責(zé)單一,把同數(shù)據(jù)庫(kù)操作的代碼叫做持久層。同時(shí),JavaEE三層架構(gòu)中,表現(xiàn)層負(fù)責(zé)頁(yè)面的展示,業(yè)務(wù)層負(fù)責(zé)邏輯的處理,而持久層就是負(fù)責(zé)將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中。
什么是框架?框架是指一個(gè)半成品的軟件,是一套可重用的,通用的,軟件基礎(chǔ)代碼模型,同時(shí),在框架基礎(chǔ)之上進(jìn)行開(kāi)發(fā)大量的節(jié)省了成本,而且更加的規(guī)范,通用且擴(kuò)展性較強(qiáng)。
2. JDBC存在的缺點(diǎn)
既然我們使用MyBatis來(lái)簡(jiǎn)化JDBC開(kāi)發(fā),那么JDBC究竟存在什么缺點(diǎn)呢?
硬編碼
首先在注冊(cè)驅(qū)動(dòng),獲取鏈接的時(shí)候,字符串信息如果發(fā)生變動(dòng),例如密碼,此時(shí)需要手動(dòng)修改。其次,在定義sql語(yǔ)句時(shí)候,使用字符串同樣使得代碼的維護(hù)性變差。
操作繁瑣
當(dāng)我們手動(dòng)設(shè)置參數(shù)和手動(dòng)設(shè)置結(jié)果集時(shí),存在著操作繁瑣的問(wèn)題。
下面JDBC使用的一段代碼做展示:

3.Mybatis簡(jiǎn)化JDBC開(kāi)發(fā)
既然JDBC開(kāi)發(fā)存在硬編碼,操作繁瑣的缺點(diǎn),那么怎么解決這些問(wèn)題呢?首先我們把字符串寫(xiě)到單獨(dú)的配置文件中,解決JDBC硬編碼的問(wèn)題,其次,可以采用一種方法來(lái)自動(dòng)完成JDBC操作繁瑣的代碼。于是,我們使用MyBatis來(lái)簡(jiǎn)化JDBC開(kāi)發(fā)。MyBatis免除了幾乎所有的JDBC代碼以及設(shè)置參數(shù)和獲取結(jié)果集的工作。
例如:在配置文件中寫(xiě)入?yún)?shù)信息,將來(lái)使用時(shí)直接讀取,解決硬編碼的問(wèn)題
<environment id="test">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--數(shù)據(jù)庫(kù)連接信息-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///mybatis?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
</environments>市面上的持久層框架有很多的選擇,但是MyBatis在國(guó)內(nèi)市場(chǎng)有很大的使用占比。
4.MyBatis快速入門(mén)|實(shí)戰(zhàn)項(xiàng)目詳解
我們通過(guò)實(shí)踐操作快速查詢(xún)user表中所有的數(shù)據(jù)來(lái)入門(mén)MyBatis,即查詢(xún)user表中的數(shù)據(jù),放到user對(duì)象里,在分別把對(duì)方放入集合中完成操作。通過(guò)以下步驟來(lái)完成操作:
- 創(chuàng)建user表,添加數(shù)據(jù)
- 創(chuàng)建模塊,導(dǎo)入坐標(biāo)
- 編寫(xiě)MyBatis 核心配置文件,替換連接信息來(lái)解決硬編碼的問(wèn)題
- 編寫(xiě)SQL映射文件,統(tǒng)一管理sql語(yǔ)句,解決編碼問(wèn)題
- 編寫(xiě)代碼
在編寫(xiě)代碼是使用以下步驟:
- 定義POJO類(lèi)
- 加載核心配置文件,獲取sqlSessionFactory對(duì)象
- 獲取sqlSession對(duì)象,執(zhí)行sql語(yǔ)句
- 釋放資源
整體的項(xiàng)目結(jié)構(gòu)展示:

下面演示通過(guò)詳細(xì)的演示,快速入門(mén)MyBatis:
創(chuàng)建user表,添加數(shù)據(jù):
create database mybatis; use mybatis; drop table if exists tb_user; create table tb_user( id int primary key auto_increment, username varchar(20), password varchar(20), gender char(1), addr varchar(30) ); INSERT INTO tb_user VALUES (1, '小張', 'abc', '男', '北京'); INSERT INTO tb_user VALUES (2, '小李', '123', '女', '天津'); INSERT INTO tb_user VALUES (3, '小美', '456', '女', '上海');

這里使用的是MySQL數(shù)據(jù)庫(kù),使用navicat作為數(shù)據(jù)庫(kù)的可視化工具。
在idea中創(chuàng)建模塊,導(dǎo)入坐標(biāo):
在idea中點(diǎn)擊新建項(xiàng)目,構(gòu)建系統(tǒng)選擇Maven,輸入項(xiàng)目名稱(chēng)(這里使用MyBatis-demo),設(shè)置組ID和工件ID,點(diǎn)擊創(chuàng)建。接下來(lái)導(dǎo)入的依賴(lài),將下面的依賴(lài)代碼置于 pom.xml 文件中:
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>x.x.x</version> </dependency>
接下來(lái)導(dǎo)入mysql依賴(lài),junit坐標(biāo)和logback坐標(biāo),把logback.xml配置文件粘貼到resources中:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<!-- 添加slf4j日志api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.20</version>
</dependency>
<!-- 添加logback-classic依賴(lài) -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<!-- 添加logback-core依賴(lài) -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>編寫(xiě)MyBatis 核心配置文件:
在MyBatis-demo/src/main/resources中新建配置文件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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--數(shù)據(jù)庫(kù)連接信息-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///mybatis?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="abc123"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--加載sql的映射文件-->
<mapper resource="UerMapper.xml"/>
</mappers>
</configuration>編寫(xiě)SQL映射文件:
在MyBatis-demo/src/main/resources中添加sql的映射文件UserMapper.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">
<mapper namespace="test">
<select id="selectAll" resultType="com.example.pojo.User">
select * from tb_user;
</select>
</mapper>修改MyBatis的核心配置文件,用于加載sql的映射文件。
<mappers>
<!--加載sql的映射文件-->
<mapper resource="UserMapper.xml"/>
</mappers>完成以上操作就可以進(jìn)行編碼了,首先要定義POJO類(lèi):
package com.example.pojo;
public class User {
private Integer id;
private String username;
private String password;
private String gender;
private String addr;
public Integer getId() {
return id;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
public String getGender() {
return gender;
}
public String getAddr() {
return addr;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", gender='" + gender + '\'' +
", addr='" + addr + '\'' +
'}';
}
}加載核心配置文件,獲取sqlSessionFactory對(duì)象:
首先需要?jiǎng)?chuàng)建一個(gè)MyBatisDemo.java文件,添加一個(gè)主方法,編寫(xiě)代碼。
public class MyBatisDemo {
public static void main(String[] args) throws IOException {
//加載MyBatis核心配置文件
String resource = "mybatis.config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
}獲取sqlSession對(duì)象,執(zhí)行sql語(yǔ)句:
//獲取SqlSession對(duì)象,用它來(lái)執(zhí)行sql
SqlSession sqlSession=sqlSessionFactory.openSession();
//執(zhí)行sql
List<User> users = sqlSession.selectList("test.selectALL");
System.out.println(users);
//釋放資源
sqlSession.close();到這里我們就完成了整個(gè)項(xiàng)目的構(gòu)建,接下來(lái)我們運(yùn)行程序,可以看到,我們成功的查詢(xún)到tb_user中的數(shù)據(jù)!

到此這篇關(guān)于Java的MyBatis快速入門(mén)和實(shí)戰(zhàn)詳解的文章就介紹到這了,更多相關(guān)MyBatis快速入門(mén)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java實(shí)現(xiàn)dijkstra最短路徑尋路算法
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)dijkstra最短路徑尋路算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01
聊聊Object類(lèi)中的wait()和notify()方法
這篇文章主要介紹了Object類(lèi)中的wait()和notify()方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
Java中垃圾回收器GC對(duì)吞吐量的影響測(cè)試
這篇文章主要介紹了Java中垃圾回收器GC對(duì)吞吐量的影響測(cè)試,本文算是一個(gè)對(duì)垃圾回收器GC的優(yōu)化文章,需要的朋友可以參考下2014-09-09
JAVA OutputStreamWriter流的實(shí)現(xiàn)
OutputStreamWriter是從字符流到字節(jié)流的橋接,它使用的字符集可以通過(guò)名稱(chēng)指定,也可以明確指定,或者可以接受平臺(tái)的默認(rèn)字符集,本文詳細(xì)的介紹了JAVA OutputStreamWriter流的使用,感興趣的可以了解一下2021-06-06

