MyBatis获取参数值的五种情况分析(推荐)
作者:雷神乐乐
MyBatis获取参数值的两种方式:${}和#{}
${}本质:字符串拼接
#{}本质:占位符赋值
MyBatis获取参数值的各种情况:
1. mapper接口方法的参数为单个的字面量类型:
可以通过${}和#{}以任意的名称获取参数值,但是需要注意${}的单引号问题
ParameterMapper接口:
User getUserByUsername(String username);
ParameterMapper.xml:
<select id="getUserByUsername" resultType="User"> <!-- select * from t_user where username = #{username};--> select * from t_user where username = '${username}'; </select>
ParameterMapperTest:
@Test public void testGetUserByUsername() { SqlSession sqlSession = SqlSessionUtils.getSqlSession(); ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class); User user = mapper.getUserByUsername("admin"); System.out.println(user); }
2. mapper接口方法的参数为多个时:
此时MyBatis会将这些参数放在一个map集合中,以两种方式进行存储
a>以arg0,arg1...为键,以参数为值
b>以param1,param2...为键,以参数为值
一次只需要通过#{}和${}以键的方式访问即可,但是需要注意${}的单引号问题
ParameterMapper接口:
User checkLogin(String username, String password);
ParameterMapper.xml:
<select id="checkLogin" resultType="User"> <!-- select * from t_user where username = '${arg0}' and password = '${arg1}';--> select * from t_user where username = #{arg0} and password = #{arg1}; </select>
ParameterMapperTest:
@Test public void testCheckLogin() { SqlSession sqlSession = SqlSessionUtils.getSqlSession(); ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class); User user = mapper.checkLogin("admin", "123456"); System.out.println(user); }
3. 若mapper接口方法的参数有多个时,可以手动将这些参数放在一个map中存储:
只需要通过#{}和${}以键的方式访问值即可,但是需要注意${}的单引号问题
ParameterMapper接口:
User checkLoginByMap(Map<String, Object> map);
ParameterMapper.xml:
<select id="checkLoginByMap" resultType="User"> select * from t_user where username = #{username} and password = #{password}; </select>
ParameterMapperTest:
@Test public void testCheckLoginByMap() { SqlSession sqlSession = SqlSessionUtils.getSqlSession(); ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class); HashMap<String, Object> map = new HashMap<>(); map.put("username", "admin"); map.put("password", "123456"); User user = mapper.checkLoginByMap(map); System.out.println(user); }
4. mapper接口方法的参数是实体类类型的参数:
只需要通过#{}和${}以属性值的方式访问值即可,但是需要注意${}的单引号问题
ParameterMapper接口:
int insertUser(User user);
ParameterMapper.xml:
<insert id="insertUser"> insert into t_user values (null, #{username}, #{password}, #{age}, #{sex}, #{email}); </insert>
ParameterMapperTest:
@Test public void testInsertUser() { SqlSession sqlSession = SqlSessionUtils.getSqlSession(); ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class); int num = mapper.insertUser(new User(null, "李四", "789789", 25, "男", "456123@qq.com")); System.out.println(num); }
5. 使用@Param注解命名参数:
此时MyBatis会将这些参数放在一个map集合中,以两种方式进行存储
a>以@Param注解的值为键,以参数为值
b>以param1,param2...为键,以参数为值
因此只需要通过#{}和${}以键的方式访问值即可,但是需要注意${}的单引号问题
ParameterMapper接口:
User checkLoginByParam(@Param("username") String username, @Param("password") String password);
ParameterMapper.xml:
<!--User checkLoginByParam(@Param("username") String username, @Param("password") String password);--> <select id="checkLoginByParam"> select * from t_user where username = #{username} and password = #{password}; </select>
ParameterMapperTest:
@Test public void testCheckLoginByParam() { SqlSession sqlSession = SqlSessionUtils.getSqlSession(); ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class); User user = mapper.checkLoginByParam("admin", "123456"); System.out.println(user); }
总结:
上面的五种情况想要记清楚还是比较难的,所以我们可以分为两种情况:
一种是在参数中加上@Param
一种是使用属性值
到此这篇关于MyBatis获取参数值的五种情况的文章就介绍到这了,更多相关MyBatis获取参数值内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!