2023-01-10 一、Mybatis中獲取主鍵自增數據 要獲取自增數據時,需要在映射文件中的“<insert>”中添加兩個屬性,例如獲取自增的id ①EmployeeMapper.xml中的<mapper>標簽內部 <insert id="insertEmployee" useGenerated ...
2023-01-10
一、Mybatis中獲取主鍵自增數據
要獲取自增數據時,需要在映射文件中的“<insert>”中添加兩個屬性,例如獲取自增的id
①EmployeeMapper.xml中的<mapper>標簽內部
<insert id="insertEmployee" useGeneratedKeys="true" keyProperty="id"> INSERT INTO tbl_employee(last_name,email,salary) VALUES (#{lastName},#{email},#{salary}) </insert>
②之後在測試文件中的測試自增關鍵代碼
Employee employee = new Employee(null,"pingp","[email protected]",50.0); //測試添加員工信息 employeeMapper.insertEmployee(employee); //查詢剛剛添加員工的id System.out.println("employee.getId() = " + employee.getId());
之後進行運行,結果中出現員工編號,代碼OK。
③說明:useGeneratedKeys:啟用主鍵生成策略(返回值是true);keyProperty:設置存儲屬性值
二、獲取資料庫受影響行數
直接將介面中方法的返回值設置為int或boolean即可
(1)設置為int:表示受影響的行數
(2)設置為boolean:表示資料庫中的數據是否受到影響
三、Mybatis中參數傳遞問題
1、單個普通參數
可以任意使用:參數數據類型、參數名稱不用考慮。
即如果是單個參數時,在映射文件中,在“#{}”內部填寫的參數可以是任意的字母,但一般還是建議見名知意。
2、多個普通參數
Mybatis底層封裝Map結構,封裝key為param1、param2...(或者是arg0、arg1、...),即在映射文件中“#{}”傳遞參數的寫法。
3、POJO參數
Mybatis支持POJO入參,參數key是POJO中屬性
在介面中聲明的函數的參數是存放在“POJO”文件夾下類的對象
在映射文件中在傳參數語句中,等號左邊放置的是資料庫中的欄位,等號的右邊存放的是“#{類中的屬性}”
4、命名參數
在介面中聲明函數使,傳遞的參數使用的是註解,用法如下:
/** * 功能:通過命名參數查詢員工信息 * @param lastname * @param salary * @return */ public List<Employee> selectEmployeeByNamed(@Param("lastName")String lastname,@Param("salary")double salary);
在映射文件中參數可以直接使用註解中的命名值。
5、Map參數
Mybatis支持直接Map入參,map的key=參數key
四、#與$的區別
1、#與$的區別
(1)#:底層執行SQL語句的對象,使用PreparedStatement,預編譯SQL,防止SQL註入隱患,相對比較安全
(2)$:底層執行SQL語句的對象使用Statement對象,使用拼接方式,未解決SQL註入安全隱患,相對不安全。
2、#與$使用場景
(1)#:sql占位符位置均可使用#
(2)$:#解決不了的參數傳遞問題,均可以交給$處理(如:form動態化表名)