MyBatis中根据用户名实现模糊查询(${}和#{}的区别)

备注:其他大部分代码参照”Mybatis介绍及入门程序”

方法一

通过使用 #{},类似于PrepareStatement中的占位符,传递的参数值是字符串,字符串是 %xxx%

  • 编写User.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">
<mapper>
    <!-- 如果返回多个结果,mybatis会自动把返回的结果放在list容器中 -->
    <!-- resultType的配置和返回一个结果的配置一样 -->
    <select id="queryUserByUsername1" parameterType="string"
        resultType="cn.itcast.mybatis.pojo.User">
        SELECT * FROM `user` WHERE username LIKE #{username}
    </select>
</mapper>
  • 测试,加载配置文件和创建SqlSessionFactory的代码在”Mybatis介绍及入门程序”
@Test
    public void testQueryUserByUsername1() throws Exception {
        // 4. 创建SqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 5. 执行SqlSession对象执行查询,获取结果User
        // 查询多条数据使用selectList方法
        List<Object> list = sqlSession.selectList("queryUserByUsername1", "%王%");
        // 6. 打印结果
        for (Object user : list) {
            System.out.println(user);
        }
        // 7. 释放资源
        sqlSession.close();
    }

方法二

使用${},来传递参数

    <!-- 如果传入的参数是简单数据类型,${}里面必须写value -->
    <select id="queryUserByUsername2" parameterType="string"
        resultType="cn.itcast.mybatis.pojo.User">
        SELECT * FROM `user` WHERE username LIKE '%${value}%'
    </select>

修改测试代码
这里写图片描述

总结

  • {}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换。#{}可以有效防止sql注入。 #{}可以接收简单类型值或pojo属性值。 如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。
  • s q l {}可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换, p o j o p a r a m e t e r T y p e {}括号中只能是value。

猜你喜欢

转载自blog.csdn.net/qq_42780864/article/details/81393053