【Map】万能的Map使用方法 & 模糊查询的两种方式

万能的Map

  • Map可以传递任意个参数,对象必须传递所有参数

  • 对个参数用Map 或者 注解

  • Map结构 : 键值对

  • 用途:假如我们的实体类,或者数据库中的表,字段或者参数过多,我们就考虑使用Map

  • Map传递参数,直接在参数中取出Key即可,Key和数据库中的属性名可以不一样

UserMapper(or UserDao).java

//万能的Map
int addUser1(Map<String,Object> map);

UserMapper.xml

  • #{userid} 中的Userid可以和数据库中表的id名字不一样,因为这里是键
    <!--万能的Map Map中的key可以取出来,Map可以传随意个参数,对象必须传所有参数-->
    <insert id="addUser1" parameterType="map">
        INSERT INTO mybatis.`user`(id,NAME,pwd) VALUES(#{userid},#{userName},#{password})
    </insert>

UserMapperTest.java

  •     map.put("userid", 5);
        map.put("userName", "byby");
    

    这里可以只给数据库传递两个参数值

    /*
        万能的Map测试
            Map可以传递随意个参数,对象必须传递所有参数
     */
    @Test
    public void adduser1(){
        //获取sqlsession
        SqlSession sqlSession = MyBatisUtils.getSqlSession();

        //拿到UserMapper实例
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //给实例中放入测试的数值
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("userid", 5);
        map.put("userName", "byby");
//        map.put("password", "2124");
        //调用测试方法
        userMapper.addUser1(map);

        //增删改,提交事务
        sqlSession.commit();
        //关闭sqlsession
        sqlSession.close();

    }

测试结果:

  • 没有传的参数值,密码为Null

image-20220726084005451

模糊查询两种方式

模糊查询有两种方法:

  1. Java代码执行的时候,传递通配符 % %

    UserMapper.java

        //模糊查询
        List<User> getUserLike(String value);
    

    UserMapper.xml

    <!--模糊查询-->
    <select id="getUserLike" parameterType="String" resultType="com.kuang.pojo.User">
        select * from mybatis.user where name like #{value}
    </select>
    

    UserMapperTest.java

        /*
            模糊查询
               名字输入“李”,就可以查询到所有name中含有“李”的信息
               传入参数: String value
               返回结果 List<User>
         */
        @Test
        public void getUserLike(){
            //获取SqlSession
            SqlSession sqlSession = MyBatisUtils.getSqlSession();
    
            //拿到UserMapper实例
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            
            //给实例中传入测试数值
            List<User> userList = userMapper.getUserLike("%张%");
    
            //打印出userList
            for (User user : userList) {
                System.out.println(user);
            }
    
            //关闭SqlSession
            sqlSession.close();
    
        }
    
  2. 在sql拼接中使用通配符

    UserMapper.java

    //模糊查询
    List<User> getUserLike(String value);
    

    UserMapper.xml

    <select id="getUserLike" parameterType="String" resultType="com.kuang.pojo.User">
        select * from mybatis.user where name like "%"#{value}"%"
    </select>
    

    UserMapperTest.java

    //给实例中传入测试数值
    List<User> userList = userMapper.getUserLike("张");
    

Sql注入

sql注入:
select * from mybatis.user where id = ?
select * from mybaits.user where id = 1 or 1=1
原本用户之需要传递一个id参数,但是用户在向后端传递的时候拼接了一个 or 1=1,这个时候用户就可以查询出所有用户的信息,这样就造成sql注入
所以,在进行查询的时候,都会通过#{value}来写死,使得传递到后端的参数不能进行拼接
模糊查询的时候也尽量在Mapper.xml中写死传递进来的参数,不要进行拼接,模糊匹配在测试代码中进行匹配

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码元宋大米

感谢小主大赏,留言可进互助群~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值