MyBatis获取参数的两种方式
一、引入
-
从浏览器中发送来的数据,要通过service传输到xxxMapper.xml映射文件中,那么Mapper映射文件要如何来获取传输来的参数,来实现SQL语句的拼接呢。
-
MyBatis获取参数的两种方式
${}:本质是字符串拼接 #{}:本质是填充占位符
二、MyBatis获取参数值的各种情况
-
mapper接口方法的参数为单个的字面量类型
可以通过KaTeX parse error: Expected 'EOF', got '#' at position 5: { }和#̲{ }**,在**大括号内写入…{ }的单引号问题
public interface ParamMapper { // 根据用户名查询人员信息 User getUserByName(String username); } // 注意:真实代码中,两个方式只能写一种 <mapper namespace="com.atguigu.mybatis.mapper.ParamMapper"> <select id="getUserByName" resultType="User"> // 方式一 select * from t_user where username = #{ username} // 方式二 select * from t_user where username = '${ username}' </select> </mapper>
-
mapper接口有多个参数
此时在框架底层,MyBatis会将这些参数放在一个map集合中,以下述两种方式进行存储
方式1:以arg0,arg1,…为键,以参数为值
方式2:以param1,param2,…为键,以参数为值
故,在#{ }和${ }内放入的是上述两种键名称,不可以是其它的
<mapper namespace="com.atguigu.mybatis.mapper.ParamMapper"> <select id="checkLogin" resultType="user"> select * from t_user where username = #{ arg0} and pwd = #{ arg1} </select> </mapper>
-
mapper接口有多个参数
可以手动将这些参数放在一个map中存储,然后将map中的键放在#{ }内
mapper接口
public interface ParamMapper { User checkLoginByMap(Map<String,Object> map); }
映射文件
<mapper namespace="com.atguigu.mybatis.mapper.ParamMapper"> <select id="checkLoginByMap" resultType="user"> select * from t_user where username = #{username} and pwd = #{password} </select> </mapper>
测试程序
public class ParamTest { @Test public void test4() { SqlSession sqlSession = SqlSessionUtils.getSqlSession(); ParamMapper mapper = sqlSession.getMapper(ParamMapper.class); Map<String, Object> map = new HashMap<>(); map.put("username","李四"); map.put("password","123456"); User userByName = mapper.checkLoginByMap(map); System.out.println("userByName = " + userByName); } }
-
mapper接口参数是一个实体类对象
只需要通过#{ } 和 ${ },以属性发的方式访问属性值即可。
mapper接口
public interface ParamMapper { int insertUser(User user); }
mapper映射文件