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