【Mybatis從0到1-003】mybatis框架及簡單入門程序

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的結果是否一致。

請繼續關注後續內容,歡迎評論轉發並給出指導意見!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章