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大致能有些了解了!

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