MyBatis之初識

什麼是MyBatis呢?

官宣一波:

  • MyBatis 是支持定製化 SQL、存儲過程以及高級映射的優秀的持久層框架
  • MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集
  • MyBatis 可以對配置和原生Map使用簡單的 XML 或註解,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數據庫中的記錄

↓↓(個人見解不足爲據)

  • 相比於原生JDBC而言,MyBatis有如下先進的地方:
  • 將原本在代碼內完成的MySql驅動註冊遷移到了XML文件中進行配置(解耦)
  • 將原本在代碼內寫死的sql語句遷移到了XML文件中進行配置(解耦)
  • 通過SQL語句的執行角色由Connection轉變爲了SqlSession,也包括DRUD
  • SqlSession可以通過指定"命名空間+SQLId"獲取XML中配置的SQL語句

通過上面大致可以瞭解到從原生JDBC到MyBatis的轉變了

那麼疑問便接踵而至

一.SqlSession怎麼獲取的呢?

大致流程圖如下:

 

二.MyBatis中是如何註冊MySql驅動的呢?

通過配置XML文件(這裏以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>

    <!--
        從外部文件db.properties讀取數據庫連接信息
    -->
    <properties resource="db.properties"/>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!--獲取db文件中的數據-->
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

</configuration>   

這裏涉及到了如何通過在xml文件中引入外部文件配置,db.properties的配置如下:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/batistest?characterEncoding=utf-8
jdbc.username=root
jdbc.password=root

三.MyBatis中SQL語句的在XML文件中該如何配置呢?

這裏以UserMapper.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">
<mapper namespace="user">

    <!--
        1.根據用戶名進行模糊查詢
        使用#{}取值->會預處理,底層會爲傳入的參數username自動添加引號再拼接爲sql語句
    -->
    <select id="queryUserByName1" parameterType="string" resultType="User">
        SELECT
            *
        FROM
            `user`
        WHERE
            `username` LIKE #{username}
    </select>

    <!--
        2.根據用戶名進行模糊查詢
        使用${}取值->非預處理,傳入的參數usename不會被自動添加引號,需要主動添加引號
        EP:傳入參數爲"Jhon"
        使用$取值時,{}內部只能寫value
    -->
    <select id="queryUserByName2" parameterType="string" resultType="User">
        SELECT
            *
        FROM
            `user`
        WHERE
            `username` LIKE ${value}
    </select>

    <!--
        添加用戶,並返回新數據的主鍵ID
    -->
    <insert id="addUser" parameterType="User">
        <selectKey order="AFTER" resultType="int" keyProperty="id" keyColumn="id">
            select LAST_INSERT_ID()
        </selectKey>
        INSERT INTO `user` ( `username`, `sex`, `birthday`, `address` )
        VALUES
        ( #{username}, #{sex}, #{birthday}, #{address} )
    </insert>
</mapper>

四.Mybatis的SqlSession是如何獲取到SQL語句的呢?

1.SqlSession先通過配置SqlMapConfig.xml獲取到SQL語句的配置文件名UserMapper.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>
    ....
    other code
    ....
    <mappers>
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>   

2.SqlSession使用需要事先指定ID:"user.queryUserByName1"

sqlSession.selectList("user.queryUserByName1",username);

3.通過ID在UserMapper中查找對應的SQL語句

<?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="user">

    <!--
        1.根據用戶名進行模糊查詢
        使用#{}取值->會預處理,底層會爲傳入的參數username自動添加引號再拼接爲sql語句
    -->
    <select id="queryUserByName1" parameterType="string" resultType="User">
        SELECT
            *
        FROM
            `user`
        WHERE
            `username` LIKE #{username}
    </select>
    .....
    other code
    .....
</mapper>

通過上面的幾個疑問,相信你會對MyBatis大致能有些瞭解了!

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