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>