Mybatis【Map传参与模糊查询】

简介: 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>


相关文章
|
7月前
|
Java 数据库连接 mybatis
mybatis 返回map
mybatis 返回map
168 0
|
Java 关系型数据库 MySQL
MyBatis模糊查询like的三种方式
MyBatis模糊查询like的三种方式
148 0
|
7月前
|
XML Java 数据库连接
MyBatis返回Map时值为null的字段会丢失
MyBatis返回Map时值为null的字段会丢失
142 2
|
7月前
|
Java 数据库连接 mybatis
mybatis返回结果为List<Map<String, Object>>的写法
mybatis返回结果为List<Map<String, Object>>的写法
734 1
|
7月前
|
XML Java 数据库连接
mybatis传参为map的写法
mybatis传参为map的写法
|
7月前
|
Java 数据库连接 mybatis
Mybatis中模糊查询like语句的使用方法
Mybatis中模糊查询like语句的使用方法
76 0
|
SQL 安全 Java
MyBatis动态语句且如何实现模糊查询及resultType与resultMap的区别---详细介绍
MyBatis动态语句且如何实现模糊查询及resultType与resultMap的区别---详细介绍
223 0
|
2月前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
146 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
|
2月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
76 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块