mybatis是持久層的框架,是Apache下的頂級項目。2010年這個項目由apache software foundation 遷移到了google code,並且改名爲MyBatis,實質上Mybatis對ibatis進行一些改進。 Mybatis通過xml或註解的方式將要執行的各種statement(statement、preparedStatemnt、CallableStatement)配置起來,並通過java對象和statement中的sql進行映射生成最終執行的sql語句,最後由mybatis框架執行sql並將結果映射成java對象並返回。
本文首先介紹mybatis的框架,之後通過id查詢用戶的基本信息作爲入門程序。
其框架結構如下:
框架結構也同樣是,我們進行操作的流程。
【1】爲了便於程序開發,首先創建一個日誌文件,便於將來錯誤的查看。創建log4j.properties文件,路徑爲:src\main\resources\log4j.properties,輸入以下內容:
# Global logging configuration
#開發環境日誌要設置成debug
log4j.rootLogger=DEBUG, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
【2】創建SqlMapConfig.xml文件,路徑爲:src\main\resources\SqlMapConfig.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>
<!-- 和spring整合後 environments配置將廢除-->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事務管理-->
<transactionManager type="JDBC" />
<!-- 數據庫連接池-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="123" />
</dataSource>
</environment>
</environments>
<!-- 加載 映射文件 -->
</configuration>
【3】根據上面的框架,現在開始配置映射文件,需要注意,在後期的開發中,mapper代理開發映射文件名稱叫XXXMapper.xml,比如:UserMapper.xml、ItemsMapper.xml,這裏,我們暫時不用mapper代理進行開發,採用最爲原始的方式進行開發,這也是從0到1的過程。
新建文件,起名字爲User.xml,之所以用User,是因爲,後面的內容我們將引入一個更刪改查用戶信息的入門例子,這也是爲後面的開發所準備的。文件路徑爲:src\main\resources\sqlmap\User.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命名空間,作用就是對sql進行分類化管理,理解sql隔離 注意:使用mapper代理方法開發,namespace有特殊重要的作用 --> <mapper namespace="test"> <!-- 在 映射文件中配置很多sql語句 --> <!-- 需求:通過id查詢用戶表的記錄 --> <!-- 通過 select執行數據庫查詢 id:標識 映射文件中的 sql 將sql語句封裝到mappedStatement對象中,所以將id稱爲statement的id parameterType:指定輸入 參數的類型,這裏指定int型 #{}表示一個佔位符號 #{id}:其中的id表示 接收輸入 的參數,參數名稱就是id,如果輸入參數是簡單類型,#{}中的參數名可以任意,可以value或其它名稱 resultType:指定sql輸出結果 的所映射的java對象類型,select指定resultType表示將單條記錄映射成的java對象。--> <select id ="findUserById" parameterType="int" resultType="po.User"> SELECT *FROM user WHERE id=#{id} </select> </mapper>這段程序不懂不要緊,一點點來解釋。這裏配置的文件實現的要求是:通過id查詢用戶表的記錄 。代碼中有具體的解釋。在映射文件中,
resultType="po.User"
表示執行SQL之後返回結果所對應的java對象類型,這裏的po.User 中的User類可以看做是返回體,這個文件需要自己創建(當然,在後面,結合spring之後就能自動生成了,現在,我們先手動創建吧)在創建文件之前,還有一點千萬注意,就是在SqlMapConfig.xml中加載映射文件。在SqlMapConfig.xml中加入以下代碼:
<!-- 加載 映射文件 --> <mappers> <mapper resource="sqlmap/User.xml"/> </mappers>
【4】創建User.java文件,路徑爲:src\main\java\po\User.java
public class User { private int id; private String username;// 用戶姓名 private String sex;// 性別 private Date birthday;// 生日 private String address;// 地址 //setter、getter方法及tostring方法略 }【5】上面都設置好之後,開始邏輯的程序編寫吧。首先創建java文件,路徑爲:src\main\java\first\MyFirstMybatis.java,代碼的邏輯,在上面的框架中都有提到,這裏,簡單敘述下:1.根據配置文件創建會話工廠(SqlSessionFactory);2.通過工廠得到SqlSession;3.通過SqlSession操作數據庫。
code如下,先通過單元測試來測試下,我們的代碼邏輯正確與否。
public class MyFirstMybatis {
// 根據id查詢用戶信息,得到一條記錄結果
public void findUserByIdTest() throws Exception {
// mybatis配置文件
String resource = "SqlMapConfig.xml";
// 得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
// 創建會話工廠,傳入mybatis的配置文件信息
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 通過工廠得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
// 通過SqlSession操作數據庫
// 第一個參數:映射文件中statement的id,等於=namespace+"."+statement的id
// 第二個參數:指定和映射文件中所匹配的parameterType類型的參數
// sqlSession.selectOne結果 是與映射文件中所匹配的resultType類型的對象
// selectOne查詢出一條記錄
User user = sqlSession.selectOne("test.findUserById", 1);
System.out.println(user);
// 釋放資源
sqlSession.close();
}
}
【6】最後一步,創建測試文件,進行單元測試。單元測試很簡單,idea創建單元測試,這裏簡單說下簡單操作流程。
6.1 鼠標光標放到上面代碼的“MyFirstMybatis ”處,點擊鼠標右鍵。如圖:
6.2 點擊“create new test”---->,之後按照圖示操作。
6.3 點擊OK,之後創建的文件路徑爲:src\test\java\first\MyFirstMybatisTest.java,在public void findUserByIdTest() throws Exception { }中貼入下面的代碼:
// mybatis配置文件
String resource = "SqlMapConfig.xml";
// 得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
// 創建會話工廠,傳入mybatis的配置文件信息
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 通過工廠得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
// 通過SqlSession操作數據庫
// 第一個參數:映射文件中statement的id,等於=namespace+"."+statement的id
// 第二個參數:指定和映射文件中所匹配的parameterType類型的參數
// sqlSession.selectOne結果 是與映射文件中所匹配的resultType類型的對象
// selectOne查詢出一條記錄
User user = sqlSession.selectOne("test.findUserById", 1);
System.out.println(user);
// 釋放資源
sqlSession.close();
【7】到此,所有操作結束。點擊run運行,將會看到我們通過id查詢用戶的基本信息。如下:
【8】最後,對比下,數據庫的信息,看select的結果是否一致。
請繼續關注後續內容,歡迎評論轉發並給出指導意見!