1. 程式人生 > >複習之MyBatis基礎用法(一)——XML對映檔案

複習之MyBatis基礎用法(一)——XML對映檔案

簡介

什麼是 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 – 已廢棄!老式風格的引數對映。內聯引數是首選,這個元素可能在將來被移除。

resultMap下篇詳解