Mybatis理解及框架搭建
一.什麼是Mybatis
—優點:—1、簡單易學— mybatis本身就很小且簡單。沒有任何第三方依賴,最簡單安裝只要兩個jar文件+配置幾個sql映射文件易於學習,易於使用,通過文檔和源代碼,可以比較完全的掌握它的設計思路和實現。—2、靈活— mybatis不會對應用程序或者數據庫的現有設計強加任何影響。 sql寫在xml裏,便於統一管理和優化。通過sql基本上可以實現我們不使用數據訪問框架可以實現的所有功能,或許更多。—3、解除sql與程序代碼的耦合--偶合度小通過提供DAL層,將業務邏輯和數據訪問邏輯分離,使系統的設計更清晰,更易維護,更易單元測試。sql和代碼的分離,提高了可維護性。—缺點:—1、編寫SQL語句時工作量很大,尤其是字段多、關聯表多時,更是如此。
2、SQL語句依賴於數據庫,導致數據庫移植性差,能更換數據庫,但是很麻煩。—3、框架還是比較簡陋,功能尚有缺失,雖然簡化了數據綁定代碼,但是整個底層數據庫查詢實際還是要自己寫的,工作量也比較大,而且不太容易適應快速數據庫修改。——4、二級緩存機制不佳
二.Mybatis架構
—(1)API接口層:提供給外部使用的接口API,開發人員通過這些本地API來操縱數據庫。接口層一接收到調用請求就會調用數據處理層來完成具體的數據處理。Session
—
—(2)數據處理層:負責具體的SQL查找、SQL解析、SQL執行和執行結果映射處理等。它主要的目的是根據調用的請求完成一次數據庫操作。
—
—
—(3)基礎支撐層:負責最基礎的功能支撐,包括連接管理、事務管理、配置加載和緩存處理,這些都是共用的東西,將他們抽取出來作爲最基礎的組件。爲上層的數據處理層提供最基礎的支撐。如下圖所示:
三.搭建Mybatis架構
構建Mybatis到訪問數據庫的流程如下圖所示:分爲五大步驟:1.構建marven項目
可參考之前的博客:構建marven項目2.導入依賴包
在pom中分別加入如下兩段代碼:<!--鏈接數據庫的依賴包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency>
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.6</version> </dependency>
3.引入mapper映射文件(放在項目的pojo文件夾下)
<?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="com.sxt.entity.clubMapper"> <!-- 函數名稱,輸入參數 ,返回參數類型 具體實現代碼 --> <select id="getClub" resultType="Club"> <include refid="selectClub"/> </select> <!-- 函數名稱,輸入參數 ,返回參數類型 具體實現代碼 --> <select id="getClubById" parameterType="int" resultType="Club"> <include refid="selectClub"/> where cid=#{cid}; </select> <insert id="addClub" parameterType="Club"> insert into clubs(cname,city) values(#{cname},#{city}); </insert> <update id="updateClub" parameterType="Club"> update clubs set cname=#{cname},city=#{city} where cid=#{cid}; </update> <delete id="deleteClub" parameterType="int"> delete from clubs where cid = #{cid}; </delete> <!-- 代碼片段,給高頻的語句頭使用代碼片段 --> <sql id="selectClub"> select * from clubs </sql> </mapper>
4.引入db.properties與config.xml配置文件(放在resources目錄下)
db.properties代碼如下:
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/nbadb?useUnicode=true&characterEncoding=UTF-8 username=root password=123456
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> <!-- 1.屬性(規範寫法是鏈接URL的屬性在properties中寫,dataSource中去取) --> <properties resource="db.properties"> </properties> <!--2.settings可設置緩存,懶加載等信息,一般不用設置 --> <settings> <setting name="cacheEnabled" value="true"/> </settings> <!--3.typeAliases起別名,爲模型(pojo)起別名,在映射文件中使用 --> <typeAliases> <typeAlias type="com.sxt.entity.Club" alias="Club"/> </typeAliases> <!-- 4.環境 --> <environments default="development"> <environment id="development"> <!-- 4.1事務管理器(JDBC事務管理) --> <transactionManager type="JDBC" /> <!-- 4.2dataSource配置數據庫連接信息 --> <dataSource type="POOLED"> <property name="driver" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> <!-- 4.3線程池中參數設置 --> <!--最大閒置的鏈接數 --> <property name="poolMaximumIdleConnections" value="5"/> <!-- 最大活躍的連接數 --> <property name="poolMaximumActiveConnections" value="5"/> </dataSource> </environment> </environments> <!-- 5.映射器(映射到mapper文件) --> <mappers> <mapper resource="com/sxt/entity/clubMapper.xml" /> </mappers> </configuration>
5.可以通過SqlSessionFactoryBuilder獲取SqlSessionFactory,進而獲取SqlSession,就可以進行增刪改查操作了,核心代碼如下:
private SqlSession session; public ClubDaoImpl() { String config = "config.xml"; InputStream is = ClubDaoImpl.class.getClassLoader().getResourceAsStream(config); SqlSessionFactory build = new SqlSessionFactoryBuilder().build(is); session = build.openSession(); }
我對一個nba的數據庫(mysql)進行了操作,實現了增刪改查的功能:
如下分別是sql語句及代碼的鏈接!
代碼鏈接:http://download.csdn.net/detail/sunrise_zhu/9687992
sql語句鏈接:http://download.csdn.net/detail/sunrise_zhu/9687991