mybatis的基本使用(插入/返回值/傳參)


1、常用屬性

插入的常用屬性:

id 同一個命名空間只能有一個唯一的id

parameterType 用來設置該SQL的參數類型, 可以當它不存在,因為mybatis會根據接口方法的參數能夠自動讀取參數的類型

statementType 設置當前的statement: STATEMENT 代表jdbc的statement 不支持參數解析,不會設置 PREPARED 代表jdbc的PreparedStatement 支持參數解析, 默認的 CALLABLE 代表jdbc的CallableStatement 執行存儲過程

useGeneratedKeys 獲取插入后的自動增長的主鍵(mysql 和 SQL Server )

keyProperty 將自動增長的主鍵賦值到哪個屬性中

        要獲取自動增長的注解(數據庫支持自動增長的功能): useGeneratedKeys="true" keyProperty="id"

keyColumn 因為有可能存在組合主鍵的情況,指定獲取其中哪一個字段

 

selectKey的使用:

 如果數據庫不支持自動增長列可以使用下面方法:selectKey 可以在增刪改之前或之后運行order BEFORE|AFTER 設置在增刪改之前或之后運行keyProperty 將當前查詢結果放到哪個pojo屬性中resultType 返回的數據類型
   <insert id="insertEmp">
        <selectKey order="BEFORE" keyProperty="id" resultType="int"> SELECT MAX(id)+1 FROM emp </selectKey>
        INSERT INTO
        `emp` (`id`,`user_name`)
        VALUES (#{id},#{username});
    </insert>

增刪改的返回值:

增刪改的返回值 除了可以聲明int 還可以聲明 boolean(如果大於1就會返回true)

boolean deleteEmp(Integer id);

#和$符號區別:

1.#{} ==> jdbc String sql=" SELECT id,user_name FROM EMP WHERE id=?"
1.會經過JDBC當中PreparedStatement的預編譯,會根據不同的數據類型來編譯成對應數據庫所對應的數據。
2.能夠有效的防止SQL注入。 推薦使用!!
特殊用法:
自帶很多內置參數的屬性:通常不會使用。了解
javaType、jdbcType、mode、numericScale、resultMap、typeHandler.
比如 需要改變默認的NULL===>OTHER:#{id,javaType=NULL}
想保留小數點后兩位:#{id,numericScale=2}

2.${} ==> jdbc String sql=" SELECT id,user_name FROM EMP WHERE id="+id
1.不會進行預編譯,會直接將輸入進來的數據拼接在SQL中。
2.存在SQL注入的風險。不推薦使用。
特殊用法:
1.調試情況下可以臨時使用。
2.實現一些特殊功能:前提一定要保證數據的安全性。
比如:動態表、動態列. 動態SQL.

參數的傳遞:

1.單個參數:SelectEmp(Integer id);
mybatis 不會做任何特殊要求
獲取方式:
#:{輸入任何字符獲取參數}

2.多個參數:Emp SelectEmp(Integer id,String username);
設置參數的別名:@Param(""):SelectEmp(@Param("id") Integer id,@Param("username") String username);
當使用了@Param:
id=====>  #{id} 
username=====>  #{username} 

3. javaBean的參數:
單個參數:Emp SelectEmp(Emp emp);
獲取方式:可以直接使用屬性名
emp.id=====>#{id}
emp.username=====>#{username}

多個參數:Emp SelectEmp(Integer num,Emp emp);
使用@Param

4.集合或者數組參數:
Emp SelectEmp(List<String> usernames);

如果是list,MyBatis會自動封裝為map:
有@Param("usernames")要獲得:usernames.get(0)  =====>  #{usernames[0]}

如果是數組,MyBatis會自動封裝為map:
有@Param("usernames")要獲得:usernames.get(0)  =====>  #{usernames[0]}

 返回結果接收:

返回類型設置:
如果返回一行數據, 就可以使用pojo接收,或者map
如果返回多行數據,就可以使用List<pojo>,List<map> ,resultType指定List中泛型的類型就可以
聲明resultMap自定義結果集   resultType 和 resultMap 只能使用一個:
id 唯一標識, 需要和
<select 上的resultMap 進行對應
type 需要映射的pojo對象, 可以設置別名
autoMapping 自動映射,(默認
=true) 只要字段名和屬性名遵循映射規則就可以自動映射,但是不建議,哪怕屬性名和字段名一一對應上了也要顯示的配置映射
extends 如果多個resultMap有重復映射,可以聲明父resultMap,將公共的映射提取出來, 可以減少子resultMap的映射冗余
<resultMap id="emp_map" type="emp" autoMapping="false" extends="common_map"> <result column="create_date" property="cjsj"></result> </resultMap> <resultMap id="common_map" type="emp" autoMapping="false" > <!-- <id> 主鍵必須使用 對底層存儲有性能作用 column 需要映射的數據庫字段名 property 需要映射的pojo屬性名 --> <id column="id" property="id"></id> <result column="user_name" property="username"></result> </resultMap>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM