簡單來說,MyBatis是一款優秀的持久層框架,用來簡化JDBC開發
。 MyBatis本身是Apache的開源項目,期初叫做iBatis,2010年這個專案前移到google code,改名為MyBatista。在2013年該專案遷移到GitHub。
概念中的持久層怎麼理解?指將資料保存到資料庫的那一層程式碼。在海量的程式碼中,為了確保每一塊程式碼的職責單一,把同資料庫操作的程式碼叫做持久層
。同時,JavaEE三層架構中,表現層
負責頁面的展示,業務層
負責邏輯的處理,而持久層就是負責將資料儲存到資料庫中。
什麼是框架?框架是指一個半成品的軟體
,是一套可重用的,通用的,軟體基礎程式碼模型,同時,在框架基礎之上進行開發大量的節省了成本,而且更加的規範,通用且擴展性較強。
既然我們使用MyBatis來簡化JDBC開發,那麼JDBC究竟有什麼缺點呢?
首先在註冊驅動,取得連結的時候,字串資訊如果發生變動,例如密碼,此時需要手動修改。其次,在定義sql語句時候,使用字串同樣使得程式碼的維護性變差。
當我們手動設定參數和手動設定結果集時,存在著操作繁瑣的問題。
下面JDBC使用的一段程式碼做展示:
既然JDBC開發存在硬編碼,操作繁瑣的缺點,那麼要怎麼解決這些問題呢?首先我們把字串寫到單獨的設定檔中,解決JDBC硬編碼的問題,其次,可以用一個方法來自動完成JDBC作業繁瑣的程式碼。於是,我們使用MyBatis來簡化JDBC開發。 MyBatis免除了幾乎所有的JDBC程式碼以及設定參數和取得結果集的工作。
例如:在設定檔中寫入參數訊息,將來使用時直接讀取,解決硬編碼的問題
<environment id="test"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <!--数据库连接信息--> <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在國內市場有很大的使用佔比。
我們透過實作操作快速查詢user表中所有的數據來入門MyBatis,即查詢user表中的數據,放到user物件裡,在分別把對方放入集合中完成操作。透過下列步驟來完成動作:
建立user表,新增資料
建立模組,匯入座標
編寫MyBatis 核心配置文件,替換連接資訊來解決硬編碼的問題
#編寫SQL映射文件,統一管理sql語句,解決編碼問題
寫程式碼
在寫程式碼是使用下列步驟:
定義POJO類別
載入核心設定文件,取得sqlSessionFactory物件
取得sqlSession對象,執行sql語句
釋放資源
整體的專案架構展示:
#下方示範透過詳細的示範,快速入門MyBatis:
建立user表,新增資料:
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資料庫,使用navicat作為資料庫的視覺化工具。
在idea中建立模組,導入座標:
在idea中點選新項目,建置系統選擇Maven,輸入項目名稱(這裡使用MyBatis-demo),設定群組ID和工件ID,點選建立。接下來導入的依賴,將下面的依賴程式碼置於pom.xml 檔案中:
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>x.x.x</version> </dependency>
接下來導入mysql依賴,junit座標和logback座標,把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依赖 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> <!-- 添加logback-core依赖 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.2.3</version> </dependency>
編寫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"> <!--数据库连接信息--> <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>
編寫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>
完成以上操作就可以進行編碼了,首先要定義POJO類別:
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物件:
首先需要建立一個MyBatisDemo.java文件,加入一個主方法,寫程式碼。
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对象,执行sql语句:
//获取SqlSession对象,用它来执行sql SqlSession sqlSession=sqlSessionFactory.openSession(); //执行sql List<User> users = sqlSession.selectList("test.selectALL"); System.out.println(users); //释放资源 sqlSession.close();
到这里我们就完成了整个项目的构建,接下来我们运行程序,可以看到,我们成功的查询到tb_user
中的数据!
以上是分析Java中MyBatis的快速入門範例的詳細內容。更多資訊請關注PHP中文網其他相關文章!