MyBtis快速入门
一、MyBatis 介紹
1.1 簡單介紹
MyBatis 本是 apache 的一個開源項目 iBatis, 2010 年這個項目由 apache software foundation 遷移到了 google code,并且改名為 MyBatis。2013 年 11 月遷移到 Github。
MyBatis 是一款優秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以使用簡單的 XML 或注解來配置和映射原生信息,將接口和 Java 的 POJO 映射成數據庫中的記錄。
GitHub 地址:https://github.com/mybatis/mybatis-3
官方文檔:http://www.mybatis.org/mybatis-3/zh/getting-started.html
1.2 主要特點
- 簡單易學,沒有任何第三方依賴,最簡單安裝+配置幾個 SQL 映射文件即可進行開發。
- 易于使用,通過文檔和源代碼,可以比較完全的掌握它的設計思路和實現。官方文檔提供中文翻譯。
- 靈活,MyBatis 不會對應用程序或者數據庫的現有設計強加任何影響。
- 解除 SQL 與程序代碼的耦合,SQL 和代碼的分離,提高了可維護性。
- 提供映射標簽,支持對象與數據庫的 orm 字段關系映射。
- 提供對象關系映射標簽,支持對象關系組建維護。
- 提供 XML 標簽,支持編寫動態 SQL。
以上內容主要來自百度百科,介紹的還挺詳細的。
二、為什么要使用 MyBatis
2.1 傳統的 JDBC 開發流程
在傳統的 JDBC 開發項目的過程中,SQL 語句夾雜在代碼塊里,導致代碼之間的耦合度高,硬編碼現象普遍存在。這樣就導致后期代碼不易維護。
2.2Hibernate 開發流程
Hibernate 意在消除 SQL,所以在使用 Hibernate 的時候所有的執行流程都由框架處理,包括 SQL 語句的編寫,這些操作對用戶都是不可見的。這樣做是很方便,簡化了程序人員的開發,但是由于 SQL 語句由框架生成,這樣就導致很難對 SQL 語句進行優化,造成數據庫的性能下降,并且對于非常復雜的 SQL 語句,Hibernate 處理起來也不太容易。
當然 Hibernate 也提供了 HQL 技術,把編寫 SQL 語句的任務交給程序開發人員,這樣就導致學習成本變高。
2.3MyBatis 開發流程
MyBatis 把編寫 SQL 的任務單獨提取出來交由程序人員實現,從而使 SQL 與 Java 代碼分開,不僅降低了代碼之間的耦合,并且在進行 SQL 優化的時候也很容易。所以說 MyBatis 功能邊界劃分的很清晰,這也是為什么它那么受歡迎的原因。
三、編寫 MyBatis 的 Hello World
3.1 開發流程
????1)、創建SqlSessionFactory 對象。
????2)、通過SqlSessionFactory 對象獲得SqlSession對象,用該對象來執行對數據庫的操作。
????3)、使用 SQL 的唯一標識來告訴SqlSession對象來執行哪條 SQL 語句。
????4)、關閉SqlSession對象。
3.2 環境準備
博主使用的開發工具是 IDEA,并使用了 Maven 項目管理工具。
數據庫表結構:
DROP TABLE IF EXISTS `t_employee`; CREATE TABLE `t_employee` (`id` int(11) NOT NULL AUTO_INCREMENT,`username` varchar(30) DEFAULT NULL,`gender` char(1) DEFAULT NULL,`email` varchar(20) DEFAULT NULL,PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;在pom.xml中添加如下依賴:
<!-- MyBatis 的依賴 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><!-- 數據庫驅動 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.39</version></dependency><!-- log4j 的依賴,用于在控制臺查看執行的 SQL 日志 --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><!-- junit --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency>項目工程目錄:
3.3 搭建 Hello World
員工類Employee
public class Employee {private Integer id;private String username;private Character gender;private String email;/** 省略 get 、set 與 toString 方法 */ }log4j.xml,只用來在控制臺輸出 SQL 日志,在這里沒有其他的作用
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"><log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"><appender name="STDOUT" class="org.apache.log4j.ConsoleAppender"><param name="Encoding" value="UTF-8" /><layout class="org.apache.log4j.PatternLayout"><param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" /></layout></appender><logger name="java.sql"><level value="debug" /></logger><logger name="org.apache.ibatis"><level value="info" /></logger><root><level value="debug" /><appender-ref ref="STDOUT" /></root> </log4j:configuration>全局配置文件mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configurationPUBLIC "-//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://localhost:3306/mybatis-study"/><property name="username" value="root"/><property name="password" value="1234"/></dataSource></environment></environments> </configuration>SQL 映射文件EmployeeMapper.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--namespace:名稱空間id:唯一標識resultType:返回值類型,這里返回的是 Employee 對象 --> <mapper namespace="com.jas.mybatis.helloworld.EmployeeMapper"><select id="getEmpById" resultType="com.jas.mybatis.helloworld.Employee"><!-- #{id} 表示要傳進來的參數,類似于 JDBC SQL 語句中的 '?' -->select * from t_employee where id = #{id}</select> </mapper>在全局配置文件mybatis-config.xml中注冊 SQL 映射文件EmployeeMapper.xml
<mappers><mapper resource="EmployeeMapper.xml"/></mappers>編寫測試代碼
public class MybtisTest {@Testpublic void helloWorld() throws Exception{String resource = "mybatis-config.xml";InputStream is = Resources.getResourceAsStream(resource);// 創建 SqlSessionFactory 對象SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);// 創建 SqlSession 對象SqlSession sqlSession = sqlSessionFactory.openSession();// 用 SqlSession 對象操作數據庫// 第一個參數表示在 SQL 映射文件中的唯一標識,最好加上名稱空間的名字// 第二個參數表示執行 SQL 時傳入的參數Employee employee = sqlSession.selectOne("com.jas.mybatis.helloworld.EmployeeMapper.getEmpById", 1);// 關閉 sqlSession 對象sqlSession.close();System.out.println(employee);}}執行結果
到這里基于 MyBatis 的一個 Hello World 就算完成了。MyBatis 通過配置文件的形式將 SQL 語句封裝起來,對外提供一個唯一標識調用。這樣一來,SQL 語句的編寫完全與代碼分離開來,降低了代碼之間的耦合度,在進行 SQL 語句優化的時候,只需要到對應 SQL 映射文件中進行優化即可。
四、總結
這篇博文主要介紹了 MyBatis 的概念,具有的相對優勢,并通過一個簡單的 Hello World 快速體驗 MyBatis,希望可以為讀者提供幫助。如果你想了解更多關于 MyBatis 的知識,請繼續關注后續博文。
總結
以上是生活随笔為你收集整理的MyBtis快速入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 货币市场包括哪些市场
- 下一篇: 定外卖也能被盗刷信用卡 支付宝付款码别随