Mybatis基础学习之万能的Map和模糊查询

前言

小伙伴们,大家好,我是狂奔の蜗牛rz,当然你们可以叫我蜗牛君,我是一个学习Java半年多时间的小菜鸟,同时还有一个伟大的梦想,那就是有朝一日,成为一个优秀的Java架构师。

这个Mybatis基础学习系列是用来记录我学习Mybatis框架基础知识的全过程 (这个系列是参照B站狂神的Mybatis最新教程来写的,由于是之前整理的,但当时没有发布出来,所以有些地方可能有错误,希望大家能够及时指正!)

之后我将尽量以一天一更的速度更新这个系列,还没有学习Mybatis3框架的小伙伴可以参照我的博客学习一下;当然学习过的小伙伴,也可以顺便跟我一起复习一下基础。最后,希望能够和大家一同进步吧!加油吧!少年们!

特别提醒:本篇博客是基于前两篇博客之上进行编写的,所以项目结构和数据库文件和实体类信息这里我就不再重新编写了,如果想要查看详细内容的话,这里我把前两篇博客的链接留一下,可以自行去查看:
第一篇博客Mybatis基础学习之第一个Mybatis程序
第二篇博客Mybatis基础学习之CRUD增删改查

今天我们来到了Mybatis基础学习的第四站:万能Map和模糊查询,主要内容就是学习Mybatis框架中的万能Map来解决一些参数过多的问题,以及实现基本的模糊查询功能。废话不多说,让我们开始今天的学习内容吧。

4.6 万能Map

  • 为什么要使用Map呢?

假设创建的实体类,或者数据库中的表,字段参数过多,如果将参数全部列出比较麻烦,这时应该考虑使用万能的Map!


接下来,就让我们一起来看看,如何使用万能的Map来解决具体的问题吧!

4.6.1 使用Map增加用户

首先是使用万能的Map来插入用户信息

1.编写UserMapper接口

public interface UserMapper {
    
    // 插入用户信息 (常规形式的插入数据)
    int addUser(User user);
    
    // 使用万能的Map (与上面的addUser作用大致相同)
    int addUser2(Map<String,Object> map);

}

2.编写UserMapper.xml映射文件

<?xml version="1.0" encoding="UTF-8" ?>
        <!DOCTYPE mapper
                PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace=绑定一个对应的Dao/Mapper接口 -->
<mapper namespace="com.kuang.dao.UserMapper">
    
    <!-- 插入用户信息: 传递map中的key-->
    <insert id="addUser" parameterType="map">   
        insert into mybatis.user(id, pwd) values (#{userId},#{passWord});
    </insert>
    
</mapper>

3.编写UserDaoTest测试类

public class UserDaoTest {
    
    @Test
    public void addUser2() {
        // 获取sqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        // 获取Mapper接口对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        // 获取Map对象
        Map<String, Object> map = new HashMap<String, Object>();
        // 通过map的键值对设置参数
        map.put("userId",4);
        map.put("userName","林迈克");
        map.put("passWord","lpk123456");
        // 调用addUser2方法新增用户
        mapper.addUser2(map);
        // 关闭sqlSession
        sqlSession.close();
    }
    
}

4.测试结果

  • 查看控制台输出

在这里插入图片描述

  • 查看数据库信息

在这里插入图片描述

结果插入用户信息成功!

4.6.2 使用Map查询用户

当然,也使用万能的Map来查询用户信息

1.编写UserMapper接口

public interface UserMapper 
    
    // 根据Id查询用户
    User getUserById(int id);
    
    // 使用万能的Map:与上面的getUserById作用相同
    User getUserById2(Map<String,Object> map);

}

2.编写UserMapper.xml映射文件

<?xml version="1.0" encoding="UTF-8" ?>
        <!DOCTYPE mapper
                PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace=绑定一个对应的Dao/Mapper接口 -->
<mapper namespace="com.kuang.dao.UserMapper">
    
	<!-- 通过id查询用户信息: 传递map中的key -->
    <select id="getUserById2" parameterType="map" resultType="com.kuang.pojo.User">
        select * from mybatis.user where id = #{helloId} and name = #{name};
    </select>
    
</mapper>

3.编写UserDaoTest测试类

public class UserDaoTest {
    
    @Test
    public void getUserById2() {
        // 获取sqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        // 获取Mapper接口对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        // 获取Map对象
        Map<String, Object> map = new HashMap<String, Object>();
        // 通过键值对设置参数
        map.put("helloId",2);
        // 调用getUserById2方法查询指定用户
        mapper.getUserById2(map);
        // 打印map的值
        System.out.println(map);
        // 关闭sqlSession
        sqlSession.close();
    }
    
}

4.测试结果

在这里插入图片描述

4.6.3 Map和对象传递参数区别

1.Map传递参数

  • 直接在sql中取出key即可:这里的parameterType=“map”
<!--传递map中的key-->
<select id="getUserById2" parameterType="map" resultType="com.kuang.pojo.User">
    select * from mybatis.user where id = #{helloId} and name = #{name};
</select>

2.对象传递参数

直接在sql中取对象即可:这里的parameterType=“Object”

<select id="getUserById" parameterType="int" resultType="com.kuang.pojo.User">
     select * from mybatis.user where id = #{id}
</select>

3.不设置参数类型

  • 只有一个基本类型参数的情况下,可以直接在sql中取到!
<!--不设置参数类型 -->    
<select id="getUserById" resultType="com.kuang.pojo.User">
    select * from mybatis.user where id = #{id}
</select>

特别提醒多个参数可以使用万能的Map或者注解!


了解了万能的Map如何使用后,接下来我们再学习一下如何实现模糊查询

4.7 模糊查询

4.7.1 Java代码中使用通配符

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

1. 编写接口方法

public interface UserMapper {
    
    // 模糊查询用户
    List<User> getUserLike(String value);
    
}

2. 编写xml配置文件

<?xml version="1.0" encoding="UTF-8" ?>
        <!DOCTYPE mapper
                PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace=绑定一个对应的Dao/Mapper接口 -->
<mapper namespace="com.kuang.dao.UserMapper">
    
    <!-- 使用模糊查询,注意要设置返回值类型 -->
    <select id="getUserLike" resultType="com.kuang.pojo.User">
        select * from mybatis.user where name like #{value}
    </select>
    
</mapper>

3. 编写单元测试方法

public class UserDaoTest {
    
    @Test
    public void getUserLike() {
        // 获得sqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        // 获取Mapper接口对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        // 调用getUserLike方法进行模糊查询:传递通配符% %
        List<User> userList = mapper.getUserLike("%林%");
        // 遍历User列表数据
        for (User user : userList) {
            System.out.println(user);
        }
        // 关闭sqlSession
        sqlSession.close();
    }
    
}

4. 测试结果

在这里插入图片描述
结果成功查询到用户名中包含“林:的用户信息!

4.7.2 SQL语句中使用通配符

在SQL拼接中使用通配符"%"#{ }"%"

1. 编写UserMapper接口

public interface UserMapper {
    
    // 模糊查询用户
    List<User> getUserLike(String value);
    
}

2. 编写UserMapper.xml映射文件

<?xml version="1.0" encoding="UTF-8" ?>
        <!DOCTYPE mapper
                PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace=绑定一个对应的Dao/Mapper接口 -->
<mapper namespace="com.kuang.dao.UserMapper">
    
    <!-- select * from mybatis.user where id = ?
         SQL注入:select * from mybatis.user where id = 1 or 1=1 -->
    
    <!-- 模糊查询:"%"#{value}"%"相当于拼接字符串,防止SQL注入 -->
    <select id="getUserLike" resultType="com.kuang.pojo.User">
        select * from mybatis.user where name like "%"#{value}"%"    
    </select>
    
</mapper>

3. 编写UserDaoTest测试类

public class UserDaoTest {	   
    
    @Test
    public void getUserLike() {
        // 获得sqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        // 获取Mapper接口对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        // 调用getUserLike方法进行模糊查询:传递通配符% %
        List<User> userList = mapper.getUserLike("%林%");
        // 遍历User列表数据
        for (User user : userList) {
            System.out.println(user);
        }
        // 关闭sqlSession
        sqlSession.close();
    }
    
}

4. 测试结果

在这里插入图片描述
结果成功查询到用户名中包含“林:的用户信息!


好了,今天的有关万能的Map和模糊查询的学习就到此结束啦,欢迎小伙伴们积极学习和讨论,喜欢的可以给蜗牛君点个关注,顺便来个一键三连,我们下期见,拜拜啦!


参考视频链接:https://www.bilibili.com/video/BV1NE411Q7Nx?spm_id_from=333.999.0.0(【狂神说Java】Mybatis最新完整教程IDEA版通俗易懂)

  • 2
    点赞
  • 5
    收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:技术工厂 设计师:CSDN官方博客 返回首页
评论 4

打赏作者

狂奔の蜗牛rz

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值