Mybatis【Map传参与模糊查询】

使用 Map 传参

当我们的实体类或者对应的数据库表的字段过多时,应当考虑使用Map!

我们之前通过对象传递参数来实现增改时,是通过传递对象做参数 来实现的:

 我们在测试类中调用接口中的方法后,UserMapper.xml 会自动根据对象的属性来确定参数从而实现参数的传递,所以对象的属性名必须和UserMapper.xml 中的参数名一一对应!【paramtype="com.lyh.pojo.User"】

注意:

  • UserMapper.xml 中尽量避免中文注释,容易报错!
  • 提交增删改语句时必须通过事务,否则不生效!

        我们使用Map传递参数,UserMapper.xml 可以直接通过map的键来读取到对应的值,所以map的键必须和UserMapper.xml 中的参数名一一对应!【paramtype="map"】

        但是一个实体类的属性名通常比较规范,而我们的Map的键名比较随意,重点是对应好UserMapper.xml 中的参数名即可。

        只有一个基本类型(通过id或name来查找或者删除用户时)的情况下,我们可以直接在sql中取到。但这也仅限于一个参数,多个参数时,仍然应该通过map来传递参数【paramtype="int/String"】

新增用户

map的key可以随意定义,但需要和UserMapper.xml 的参数名一一对应。

@Test
    public void addUser2(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        HashMap<String, Object> map = new HashMap<String, Object>();

        try {
            //传递给 UserMapper.xml 一个对象 它可以通过对象的属性将参数取出来
            map.put("userId",2);
            map.put("userName","李元芳");
            map.put("password","12345");

            int num = mapper.addUser2(map);
            System.out.println(num +" ");

            //提交事务
            sqlSession.commit();
            if (num>=1)
                System.out.println("插入成功");
            else
                System.out.println("插入失败");
        }catch (Exception e){
            System.out.println("SQL异常,该Id已存在");
        }finally {
            sqlSession.close();
        }
    }

 UserMapper.xml

    <insert id="addUser2" parameterType="map">
        insert into mybatis.user (id,name,pwd)
        values (#{userId},#{userName},#{password});
    </insert>

UserMapper.java

在接口中新增方法

//通过map添加用户
    int addUser2(Map<String,Object> map);

查找用户

@Test
    public void getUserById2(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        //获得接口
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        Map<String,Object> map = new HashMap<>();
        map.put("helloId",2);   //使用map可以随意定制参数名 只要对应UserMapper.xml 中的参数名即可
        User user = mapper.getUserById2(map);
        System.out.println(user);

        sqlSession.close();
    }

 在接口中新增方法

   User getUserById2(Map<String ,Object> map);

修改映射文件

    <select id="getUserById2" resultType="com.study.pojo.User" parameterType="map">
        select * from mybatis.user where id = #{helloId}
    </select>

模糊查询

        在MyBatis的映射文件中,parameterType 参数是可选的。它用于指定 SQL 语句中使用的参数的类型。如果不指定 parameterType,MyBatis 将会根据传递给映射语句的参数来自动推断参数类型。但如果我们提供了明确的参数类型时,MyBatis 可以更好地处理参数转换和类型匹配。因此,如果知道参数的类型,最好还是在映射文件中显式地定义 parameterType,以确保正确的类型处理。

1、在Java代码中使用通配符

在接口中新增方法

    List<User> getUserLike(String value);

映射文件

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

 测试类

    @Test
    public void getUserListLike(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        //获得接口
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> users = mapper.getUserLike("%李%");

        for(User user: users)
            System.out.println(user);

        sqlSession.close();
    }

 2、在SQL中使用通配符

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

让线程再跑一会

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值