1、下載相關mybatis的包。鏈接
2、把包導入java工程中。
3、配置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="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!-- mapper的位置 -->
<mappers>
<mapper resource="sqlmap/User.xml"/>
</mappers>
</configuration>
4、創建pojo
pojo類作爲mybatis進行sql映射使用,po類通常與數據庫表對應。
5、sql映射文件
在config下的sqlmap目錄下創建sql映射文件User.xml:
6、加載映射文件
mybatis框架需要加載Mapper.xml映射文件
將users.xml添加在SqlMapConfig.xml。
7、映射文件、編寫sql
8、
1. 創建SqlSessionFactoryBuilder對象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 2. 加載SqlMapConfig.xml配置文件
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
// 3. 創建SqlSessionFactory對象
this.sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
}
@Test
public void testQueryUserById() throws Exception {
// 4. 創建SqlSession對象
SqlSession sqlSession = sqlSessionFactory.openSession();
// 5. 執行SqlSession對象執行查詢,獲取結果User
// 第一個參數是User.xml的statement的id,第二個參數是執行sql需要的參數;
Object user = sqlSession.selectOne("queryUserById", 1);
// 6. 打印結果
System.out.println(user);
// 7. 釋放資源
sqlSession.close();
9、 #{}和${}
#{}表示一個佔位符號,通過#{}可以實現preparedStatement向佔位符中設置值,自動進行java類型和jdbc類型轉換。#{}可以有效防止sql注入。 #{}可以接收簡單類型值或pojo屬性值。 如果parameterType傳輸單個簡單類型值,#{}括號中可以是value或其它名稱。
{}可以將parameterType 傳入的內容拼接在sql中且不進行jdbc類型轉換, {}括號中只能是value。
Mybats解決jdbc編程的問題
1、數據庫連接創建、釋放頻繁造成的系統資源浪費從而影響系統性能,如果使用數據庫連接池可解決此問題。
解決:在sqlMapConfig.xml中配置數據連接池,使用連接池管理數據庫連接。
2、sql語句寫在代碼中造成不易維護,實際應用sql變化的可能較大,sql變動需要改變java代碼
解決:將sql語句配置在xxxmapper.xml文件中與java代碼分離。
3、向sql語句傳參數麻煩,因爲sql語句的where條件不一定,可能多也可能少,佔位符需要和參數一一對應。
解決:mybatis自動將java對象映射至sql語句,通過statement中的parameterType定義輸入參數的類型。
4、對結果集解決麻煩,sql變化導致解析代碼變化,且解析前需要遍歷,如果能將數據庫記錄封裝成pojo對象解析比較方便。
解決:mybatis自定將sql執行結果映射至java對象,通過statement中的resultType定義輸出結果類型。