(相關資料圖)
先隨便創建一個存儲過程
DELIMITER $$ CREATE PROCEDURE getUserNameById (IN i_id BIGINT, OUT o_name VARCHAR(10)) BEGIN SELECT u.name INTO o_name FROM tb_user u WHERE id = i_id; END $$
delimiter $$ : 是將sql語句的結束符號先替換成$$的意思,因為sql是遇到;號加回車自動就直接執行的
mybatis調用存儲過程
@Mapper public interface UserMapper { ? ? void getUserNameById(UserDto userDto); ?// 注意沒有返回值 }
? ?
@Test void contextLoads() { UserDto userDto = new UserDto(); userDto.setId(445225202303020001L); System.out.println(userDto); userMapper.getUserNameById(userDto); System.out.println(userDto); }
UserDto(id=445225202303020001, name=null, age=null, phone=null, email=null, password=null)
2023-03-12 23:37:42.354 INFO 4848 --- [ main] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} inited
UserDto(id=445225202303020001, name=admin, age=null, phone=null, email=null, password=null)
這里需要注意就是
接口的方法沒有返回值
statementType=“CALLABLE” jdbcType=VARCHAR
在mapper文件中可以使用statementType標記使用什么的對象操作SQL語句。
statementType:標記操作SQL的對象
取值說明:
1、STATEMENT:直接操作sql,不進行預編譯,獲取數據:$—Statement
2、PREPARED:預處理,參數,進行預編譯,獲取數據:#—–PreparedStatement:默認
3、CALLABLE:執行存儲過程————CallableStatement
其中如果在文件中,取值不同,那么獲取參數的方式也不相同
注意:如果只為STATEMENT,那么sql就是直接進行的字符串拼接,這樣如果為字符串需要加上引號,如果為PREPARED,是使用的參數替換,也就是索引占位符,我們的#會轉換為?再設置對應的參數的值。
到此這篇關于mybatis映射文件操作存儲過程的實現的文章就介紹到這了,更多相關mybatis映射文件操作存儲過程內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!