MyBatis:获取参数的两种方式#{ }和${ }

jdbc 中原始的赋值方式(占位符和字符串拼接)

    public void testJdbc() throws Exception {
        String username = "admin";
        Class.forName("");
        Connection connection = DriverManager.getConnection("","","");
        //字符串拼接
        PreparedStatement ps = connection.prepareStatement("select * from user where username = '"+username+"'");
        //占位符赋值
        PreparedStatement ps2 = connection.prepareStatement("select * from user where username = ?");
        ps2.setString(1,username);
    }

MyBatis:获取参数的两种方式

 

  • ${ }    本质就是字符串拼接
  • #{ }    本质救赎占位符赋值

MyBatis获取参数值的各种情况

(1)mapper接口方法的参数为单个的字面量类型

可以通过${ }和 #{ } 以任意的字符串获取参数,但是需要注意$ { } 的引号问题 ,要使用'${username}'

接口ParameterMappera.java中添加方法

 //根据用户名进行查询
    User getUserByusername(String username);

映射文件ParameterMappera.xml   { } 内可以写任意内容

    <!--User getUserByusername(String username);-->
    <select id="getUserByusername" resultType="user">
        select * from user where username = #{username}
        select * from user where username = '${username}'
    </select>

测试类:

 

    @Test
    public void getUserByusername(){
        SqlSession sqlSession =  SqlSessionUtils.getSqlSession();
        ParameterMappera mapper = sqlSession.getMapper(ParameterMappera.class);
        User user = mapper.getUserByusername("admin");
        System.out.println(user);
    }
 (2)mapper接口方法的参数为多个时

 

此时 MyBatis会自动将这些参数放在一个map集合中

1.以arg0,arg1 ..... 为键,以参数为值
2.以param1,param2 ..... 为键,以参数为值
  • 因此只需要通过${}和#{}访问map集合的键就可以获取相对应的值,注意${}需要手动加单引号。

  • 使用arg或者param都行,要注意的是,arg是从arg0开始的,param是从param1开始的

接口方法:

//检查登录
    User cheakLogin(String username,String password);

ParameterMappera.xml

    <!--User cheakLogin(String username,String password);-->
    <select id="cheakLogin" resultType="user">
        select * from user where username=#{arg0} and password=#{arg1}
    </select>
<!--User checkLogin(String username,String password);-->
<select id="checkLogin" resultType="User">
	select * from t_user where username = '${param1}' and password = '${param2}'
</select>
 (3)若mapper接口方法的参数有多个时,可以手动将这些参数放在一个map中存储

可以手动创建map集合,将这些数据放在map中只需要通过${}和#{}访问map集合的键就可以获取相对应的值,注意${}需要手动加单引号

接口方法:

    //检查登录(参数为map)
    User checkLoginByMap(Map<String,Object> map);

映射文件

    <!--   User checkLoginByMap(Map<String,Object> map);  -->
    <select id="checkLoginByMap" resultType="user">
        select * from user where username=#{username} and password=#{password}
    </select>

测试类:

    @Test
    public void testCheckByMap(){
        SqlSession sqlSession =  SqlSessionUtils.getSqlSession();
        ParameterMappera mapper = sqlSession.getMapper(ParameterMappera.class);
        Map<String,Object> map = new HashMap<>();
        map.put("username","admin");
        map.put("password","1111");
        User user = mapper.checkLoginByMap(map);
        System.out.println(user);
    }
(4)mapper接口方法的参数是实体类类型的参数
  • 若mapper接口中的方法参数为实体类对象时此时可以使用${}和#{},通过访问实体类对象中的属性名获取属性值,注意${}需要手动加单引号

    <!--int insertUser(User user);-->
    <select id="insertUser" >
        insert into user values(null,#{username},#{password},#{email})
    </select>
    @Test
    public void testInsertUser(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        ParameterMappera mappera = sqlSession.getMapper(ParameterMappera.class);
        mappera.insertUser(new User(1,"李四","123456","55555@qq.com"));
    }
 5.使用@Param命名参数

此时MyBatis将这个参数放在一个map集合中,以两种方式进行存储

  • 以@Param注解的值为键,以参数位置
  • 以param1,param2...... 为键,以参数为值

因此只需要通过#{ } 和 $ { } 以键的方式访问值即可,但是需要注意 ${ } 的单引号问题

    //通过@Param注解 检查登录
    User checkLoginByparam(@Param("username") String username,@Param("password") String password);
    @Test
     public void testCheckByparam(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        ParameterMappera mappera = sqlSession.getMapper(ParameterMappera.class);
        User user = mappera.checkLoginByparam("admin","1111");
        System.out.println(user);
    }

 

 

 

阅读剩余
THE END