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

时间:2022-09-29 17:55:29

Mybatis中获取参数值的两种方式:${} 和 #{}
     ${}本质是字符串拼接
     #{}本质是占位符赋值


1.1  mapper接口方法的参数为单个的字面变量类型(${} 和 #{}都可以用应该注意${}的''问题   应该用'${}')
   

/*
    * 根据用户名获取用户信息
    * */
    Users getUserByUsername(String username);


    <select id="getUserByUsername" resultType="Users">
        /*
        select * from  users where name = '${username}'
        这种方式下也是可以成功的
        直接这个参数'${username}'
        */
        select * from  users where name = #{username}
    </select>


@Test
    public void testgetUserByUsername(){
        SqlSession sqlsession = SQLsession.getSqlsession();
        UserMapper mapper = sqlsession.getMapper(UserMapper.class);
        Users user = mapper.getUserByUsername("双");
        System.out.println(user);

    }


1.2  mapper接口方法的参数为多个的字面变量类型(${} 和 #{}都可以用应该注意${}的''问题   应该用'${}')
              此时的mybatis会把参数放入到一个map集合中,可以用两种方式进行存储
                    a.可以通过arg0,arg1...为key,以参数为值
                    d.可以通过param1,param2...为key,以参数为值的形式获取

  /*
    * 登录验证(数据库没有password字段就用age代替了)
    * */
    Users checkLogin(String username ,int age);



    <select id="checkLogin" resultType="Users">
/*
select * from  users where name = #{arg0} and age = #{arg1}
select * from  users where name = #{param1} and age = #{param2}
select * from  users where name = '${arg0} 'and age = '${arg1}'
select * from  users where name = '${param1}' and age = '${param2}'
都可以成功
*/
        select * from  users where name = #{arg0} and age = #{arg1}
    </select>




/*
     * 情况二测试
     * */
    @Test
    public void testcheckLogin(){
        SqlSession sqlsession = SQLsession.getSqlsession();
        UserMapper mapper = sqlsession.getMapper(UserMapper.class);
        Users user = mapper.checkLogin("双双",22);
        System.out.println(user);

    }

  
1.3 若mapper方法的参数有多个时,可以手动放到一个map中存储
             (${} 和 #{}都可以用应该注意${}的''问题   应该用'${}'  自己设置键值不是mybatis设置的) 

  /*
     * 登录验证(数据库没有password字段就用age代替了)
     * */
    Users checkLoginByMap(Map<String,Object> map);


    <select id="checkLoginByMap" resultType="Users">
/*
select * from  users where name = #{name} and age = #{age}
select * from  users where name = '${name} 'and age = '${age}'
都可以成功
*/
        select * from  users where name = #{name} and age = #{age}
    </select>



/*
     * 情况三测试
     * */
    @Test
    public void testcheckLoginByMap(){
        SqlSession sqlsession = SQLsession.getSqlsession();
        UserMapper mapper = sqlsession.getMapper(UserMapper.class);
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("name",20);
        map.put("age",12);
        Users user = mapper.checkLoginByMap(map);
        System.out.println(user);

    }


1.4 mapper接口中方法的参数是实体参数
            (${} 和 #{}都可以用 (以属性的方式访问属性值) 应该注意${}的''问题   应该用'${}')

//添加
    int insertUsers(Users users);


    <insert id="insertUsers">
          insert into  users values ('2022-08-16 12:15:23',null ,18,'小双双',22,'helen@sina.com',1,0)
    </insert>




/*
     * 情况四测试
     * */
    @Test
    public void testinsertUser(){
        SqlSession sqlsession = SQLsession.getSqlsession();
        UserMapper mapper = sqlsession.getMapper(UserMapper.class);
        int user = mapper.insertUsers(new Users(null,null ,1,"shang",12,"12233",0,0));
        System.out.println(user);

    }


1.5  命名参数@Param (${} 和 #{}都可以用应该注意${}的''问题   应该用'${}')
            此时的mybatis会把参数放入到一个map集合中,可以用两种方式进行存储
                    a.可以通过@Param注解的值为key,以参数为值
                    d.可以通过param1,param2...为key,以参数为值的形式获取
 

/*
     * 登录验证(数据库没有password字段就用age代替了)
     * */
    Users checkLoginByParam(@Param("username")String name ,@Param("age")int age );


 <select id="checkLoginByParam" resultType="Users">
        select * from  users where name = #{username} and age = #{age}
    </select>



/*
     * 情况五测试
     * */
    @Test
    public void testcheckLoginByParam(){
        SqlSession sqlsession = SQLsession.getSqlsession();
        UserMapper mapper = sqlsession.getMapper(UserMapper.class);
        Users user = mapper.checkLoginByParam("双双",22);
        System.out.println(user);

    }