1、簡介html
MyBatis是一個輕量級的持久層框架,它能夠幫咱們省去繁雜的JDBC操做,包括獲取數據庫鏈接、設置參數、處理結果集、事務管理等等。經過XML配置或註解,便可實現簡單的完成本來複雜的操做。
java
2、準備工做
mysql
1. 下載 jar 包,能夠在 Maven Repository (在頁面中間有個Artifact,旁邊點擊 Download JAR 便可)下載最新版本(mybatis-3.3.0)的 jar 包,而後添加到 classpath 中。git
2. 若是使用的是 Maven 建立的項目,那麼能夠簡單複製 Maven Repository 中的依賴配置便可,具體配置以下:github
<!-- Maven中pom.xml的MyBatis依賴配置 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.3.0</version> </dependency>
3. 建立數據庫以及數據表並插入示例數據,這裏假設建立的是mybatis庫和students表,我使用的是MySql數據庫sql
-- 建立mybatis數據庫 create database mybatis -- 切換到mybatis數據庫 use mybatis -- 建立students表 create table students(id int auto_increment primary key, name varchar(50)); -- 插入示例數據 insert into students(name) values('kolbe');
3、MyBatis的入門實例數據庫
1. 新建MyBatis的核心配置文件(包括數據源信息、事務管理器、映射配置等),建議將該文件放置類源文件根目錄下,我直接把它取名爲mybatis.xml,具體配置以下:apache
<?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"> <!-- 事務管理類型,JDBC表示直接使用JDBC的提交和回滾設置,依賴於數據源獲得的鏈接來管理事務 --> <transactionManager type="JDBC" /> <!-- 數據庫鏈接池POOLED表示使用數據庫鏈接池 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mybatis" /> <property name="username" value="root" /> <property name="password" value="123456" /> </dataSource> </environment> </environments> <mappers> <!-- SQL代碼和映射信息配置文件 --> <mapper resource="cn/kolbe/mybatis/StudentMapper.xml" /> </mappers> </configuration>
2. 新建一個名爲Student的Java Bean類api
package cn.kolbe.mybatis; public class Student { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Student [id=" + id + ", name=" + name + "]"; } }
3. 新建SQL語句映射文件StudentMapper.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"> <!-- namespace必須是惟一的,建議用該文件所在的包路徑全類名 --> <mapper namespace="cn.kolbe.mybatis.StudentMapper"> <!-- select:表示這是一個查詢操做 --> <!-- id:用來配合namespace來定位這個操做,也就是在調用時,將採用cn.kolbe.mybatis.StudentMapper.getStudent --> <!-- resultType:表示返回值類型,必須是全類名,MyBatis將自動爲咱們將查詢結果封裝成Student對象 --> <!-- parameterType:表示傳進來的參數的類型,由於傳的是id主鍵,因此是int型 --> <select id="getStudent" parameterType="int" resultType="cn.kolbe.mybatis.Student"> <!-- #{id}:表示佔位符,也就是調用時必須爲其傳一個id參數進來,注意是#不是$ --> select * from students where id = #{id} </select> </mapper>
4. 新建一個測試類StudentDao,來測試配置的效果
package cn.kolbe.mybatis; import java.io.InputStream; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Test; public class StudentDao { @Test public void testGetStudent() throws Exception { // 1. 加載MyBatis的配置文件:mybatis.xml(它也加載關聯的映射文件,也就是mappers結點下的映射文件) InputStream in = this.getClass().getClassLoader().getResourceAsStream("mybatis.xml"); // 2. SqlSessionFactoryBuidler實例將經過輸入流調用build方法來構建 SqlSession 工廠 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in); // 3. 經過工廠獲取 SqlSession 實例,SqlSession 徹底包含了面向數據庫執行 SQL 命令所需的全部方法。 SqlSession session = sqlSessionFactory.openSession(); // 4. 準備基本信息 // 4.1) statement: 用來定位映射文件(StudentMapper.xml)中的語句(經過namespace id + select id) String statement = "cn.kolbe.mybatis.StudentMapper.getStudent"; // 4.2) paramter: 傳進去的參數,也就是須要獲取students表中主鍵值爲1的記錄 int parameter = 1; // 5. SqlSession 實例來直接執行已映射的 SQL 語句,selectOne表示獲取的是一條記錄 Student student = session.selectOne(statement, parameter); System.out.println(student); // 6. 關閉輸入流和SqlSession實例 in.close(); session.close(); } }
5. 運行後能夠看到控制檯輸出,表示配置成功了
Student [id=1, name=kolbe]
6. 該項目的包結構
7. 注:
SqlSessionFactoryBuilder:能夠被建立銷燬,一旦建立了SqlSessionFactory實例,該對象就不在須要了。
SqlSessionFactory:應該是一個應用共享一個工廠實例,而不是隨意清除建立,建議在具體應用中採用單例模式來建立和獲取該實例,保證該工廠實例的惟一性。
SqlSession:不是線程安全的,多個線程共享將有可能出錯,另外用完該實例後要及時調用close()方法將其關閉。
SqlSessionFactory的建議獲取方式:
package cn.kolbe.mybatis; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class Factory { private static SqlSessionFactory factory; static { factory = new SqlSessionFactoryBuilder().build( Factory.class.getClassLoader().getResourceAsStream("mybatis.xml")); } public static SqlSessionFactory getFactory() { return factory; } }
4、實用連接:
MyBatis官方文檔 :http://mybatis.github.io/mybatis-3/zh/index.html 官方的入門文檔,可貴有中文版本
Maven倉庫:http://mvnrepository.com/ 能夠下載各類開源軟件的各類版本的jar文件以及添加Maven中的包依賴
MyBatis API : http://mybatis.github.io/mybatis-3/apidocs/reference/packages.html