mybatis學習教程——@Param註解使用
阿新 • • 發佈:2019-01-25
當介面引數比較多的時候,可以使用JavaBean來封裝引數,當引數比較少的情況,可以使用Map型別或者使用@Param註解
1.userMapper介面類
package com.aruisi.mybatis.mapper;
import com.aruisi.mybatis.dto.UserDTO;
public interface UserMapper {
public UserDTO selectUserByNameAndSex(String loginName,Integer sex);
}
2.xml配置檔案3.測試方法<?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"> <mapper namespace="com.aruisi.mybatis.mapper.UserMapper"> <select id="selectUserByNameAndSex" resultType="com.aruisi.mybatis.dto.UserDTO"> SELECT id, login_name AS loginName, sex, age, create_time AS createTime FROM `user` WHERE login_name=#{loginName} and sex=#{sex} </select> </mapper>
測試結果會報如下錯誤:package com.aruisi.mybatis.test; import java.io.IOException; import java.io.Reader; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import com.aruisi.mybatis.dto.UserDTO; import com.aruisi.mybatis.mapper.UserMapper; public class TestSelectUserByNameAndSex { public static void main(String[] args) { /** * java 7增強了try語句的功能,圓括號可以宣告、初始化一個或多個資源(必須在程式結束時顯示關閉的資源) * try語句在該語句結束時會自動關閉這些資源 */ try ( //讀取配置檔案資訊 Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml"); //引數為true,設定事務是自動提交 SqlSession sqlSession = new SqlSessionFactoryBuilder().build(reader).openSession(true); ){ UserMapper userMapper = sqlSession.getMapper(UserMapper.class); UserDTO user = userMapper.selectUserByNameAndSex("王五", 1); System.out.println("============="+user.toString()); } catch (IOException e) { e.printStackTrace(); } } }
Parameter 'loginName' not found. Available parameters are [1, 0, param1, param2]
### Cause: org.apache.ibatis.binding.BindingException: Parameter 'loginName' not found. Available parameters are [1, 0, param1, param2]
報這個錯誤的原因是mybatis預設可用的xml引數只用 [1, 0, param1, param2],這四個引數都是mybatis根據引數位置自定義的名字,這時將xml中的loginName改為#{0}或者#{param1},將sex改為#{1}或者#{param2},selectUserByNameAndSex這個介面方法就能正常被呼叫
但是這種寫法程式碼可讀性很差,不利於維護,這時可以使用@Param註解
將介面方法給為
public UserDTO selectUserByNameAndSex(@Param("loginName")String loginName,@Param("sex")Integer sex);
總結:
給引數加上@Param註解後,mybatis會自動將引數封裝成map型別,@Param註解的值@Param("loginName")作為map的key,在xml中就可以使用註解的值來使用引數。當時當只有一個引數時,我們並沒有使用註解,code也能執行,這是因為在只有一個引數時,mybatis不關心這個引數叫什麼名字就會直接把這個唯一的引數值拿來使用。