使用MyBatis进行模糊查询和登录(防止sql注入)功能时传参注意事项(${}和#{}的区别)

发布时间:2023年12月19日

使用MyBatis进行模糊查询和登录(防止sql注入)功能时传参注意事项(${}和#{}的区别)

1、大家可以参考我的前两篇博文作为基础,创建mybatis项目并实现查询数据库数据使用mybatis进行crud操作时的传参方法详解

2、实现模糊查询功能如下

在MyBatisTest.java中添加下面方法

@Test
    public void testGetUserByUserName() throws IOException {
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = userMapper.getUserByUserName("张");
        for (User user : userList) {
            System.out.println(user);
        }
    }

在UserMapper.java中添加对应的属性

List<User> getUserByUserName(String);

在UserMapper.xml中添加查询sql语句如下

<select id="getUserByUserName" parameterType="java.lang.String" resultType="cn.fpl1116.pojo.User">
        select * from user where username like '%${value}%'
    </select>

可以发现同上一篇博文中传参时使用的#不同,这里使用了$符号。

3、${}和#{}的区别

   				sql注入          底层             jdbc类型转换        单个简单类型的参数
      $         不防止          Statement            不转换                 value
      #          防止        preparedStatement        转换                  任意

4、实现登录功能(防止sql注入)

在MyBatisTest.java中添加下面方法

 @Test
    public void testLogin() throws IOException {
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        User userInfo = new User();
        userInfo.setUsername("张三丰' #");
        userInfo.setPassword("222");
        User user = userMapper.login(userInfo);
        System.out.println(user);
    }

在UserMapper.java中添加对应的属性

User login(User userInfo);

在UserMapper.xml中添加查询sql语句如下

<select id="login" parameterType="cn.fpl1116.pojo.User" resultType="cn.fpl1116.pojo.User">
        select * from user where username='${username}' and password='${password}'
    </select>
文章来源:https://blog.csdn.net/qq_62124267/article/details/135094038
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。