複習之MyBatis基礎用法(一)——XML對映檔案
阿新 • • 發佈:2019-02-15
簡介
什麼是 MyBatis ?
MyBatis 是支援定製化 SQL、儲存過程以及高階對映的優秀的持久層框架。MyBatis 避免了幾乎所有的 JDBC 程式碼和手工設定引數以及抽取結果集。MyBatis 使用簡單的 XML 或註解來配置和對映基本體,將介面和 Java 的 POJOs(Plain Old Java Objects,普通的 Java物件)對映成資料庫中的記錄。
注意
使用mybatis介面模式方法不能過載 類模式可以過載
但開發都是介面模式 id=方法名
- 類模式
//增刪改是有事物的 查可以說沒有
//MyBatis預設是執行SQL語句之前是寫了begin的
//MyBatis預設是是手動提交,那就需要顯示的寫程式碼提交
sqlSession.commit();
Mapper XML 檔案
MyBatis 的真正強大在於它的對映語句,也是它的魔力所在。由於它的異常強大,對映器的 XML 檔案就顯得相對簡單。如果拿它跟具有相同功能的 JDBC 程式碼進行對比,你會立即發現省掉了將近 95% 的程式碼。MyBatis 就是針對 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">
SQL 對映檔案有很少的幾個頂級元素
- mapper namespace="" 名稱空間=包名.類名
<mapper namespace ="top.maniy.mapper.PhotoMapper">
- cache – 給定名稱空間的快取配置。
- cache-ref – 其他名稱空間快取配置的引用。
(mybatis的快取一般很少用)
如果介面引數是物件,sql語句中的#{name}需要和物件屬性名一致
- insert – 對映插入語句
<!--增刪改返回值都是int,所有resultType="int" ,但是增刪改的resultType可以不寫--> <!-- 處理主鍵的生成<insert id="insertAuthor" useGeneratedKeys="true" keyProperty="id"> --> <insert id="saveUser" parameterType="top.maniy.mybatisdemo.entity.User"> insert into e_user(username,address) values (#{username},#{address}) </insert>
- update – 對映更新語句
<update id="updateUserByMap">
update e_user set username=#{username} WHERE id=#{id}
</update>
- delete – 對映刪除語句
<delete id="deleteUserByUserId">
DELETE from e_user where id=#{id}
</delete>
- select – 對映查詢語句
<!-- 查詢總數 -->
<select id="count" resultType="int">
SELECT COUNT(*) FROM e_user
</select>
<!-- 查詢表全部資料 返回的是List集合 resultType是集合包含的型別 -->
<select id="getAllUserList" resultType="top.maniy.mybatisdemo.entity.User">
SELECT * FROM e_user
</select>
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>
<!-- 別名 -->
<typeAliases>
<package name="top.maniy.entity"/>
</typeAliases>
</configuration>
- sql – 可被其他語句引用的可重用語句塊。
<sql id="selectAll">
SELECT * FROM photo
</sql>
<!-- sql可以把經常使用的重複語句塊提出來-->
<!-- 用include 引入 -->
<select id="getPhotosByAlbumId" resultType="Photo">
<include refid="selectAll"></include>
WHERE albumid=#{albumid}
</select>
parameterType無論在什麼情況下,增刪改查中都可以不寫
Mapper XML中標籤有多個引數且不是一個物件中需要介面加@Param
//介面方法有多個引數的時候,需要使用@Param註解給形參取名字,名字可以隨便取,但是最好只能用參取名字
User getUserByUsernameAndPassword(@Param("username") String username,@Param("password") String password);
<select id="getUserByUsernameAndPassword" resultType="top.maniy.mybatisdemo.entity.User">
SELECT * FROM e_user WHERE username=#{username} AND address=#{password}
</select>
MyBatis引數解析(附帶模糊查詢兩中寫法)
<!-- 根據使用者名稱模糊查詢使用者列表
#{} 佔位符 #{1}=‘1’
${} 字串拼接 ${1}=1 '%${value}%'
#{}是預編譯處理,${}是字串替換。
Mybatis在處理#{}時,會將sql中的#{}替換為?號,呼叫PreparedStatement的set方法來賦值;
Mybatis在處理${}時,就是把${}替換成變數的值。
使用#{}可以有效的防止SQL注入,提高系統安全性。
-->
<!-- MyBatis裡面傳引數,#表示用的preparedstatement
$表示用的statement
因此模糊查詢可以多種寫法
/* SELECT * from e_user where username LIKE concat('%',#{username},'%')*/
-->
<select id="getUserListLikeUserName" resultType="top.maniy.mybatisdemo.entity.User">
SELECT * from e_user where username LIKE '%${username}%'
</select>
-
resultMap – 是最複雜也是最強大的元素,用來描述如何從資料庫結果集中來載入物件。
-
parameterMap – 已廢棄!老式風格的引數對映。內聯引數是首選,這個元素可能在將來被移除。