Mybatis映射文件SQL语句模糊查询,#和$的区别和注意事项

博客介绍了Mybatis映射文件SQL语句模糊查询的三种方法,包括“%”#{value}%、‘%${value}%’和在参数中添加%。同时说明了#和$的区别,${}直接拼接、不转换类型,#{}是占位符,可自动转换类型并防SQL注入,还给出各方法测试结果及执行的SQL语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mybatis映射文件SQL语句模糊查询

1. “%”#{value}"%" 在参数中不需要添加 %_ 推荐使用

2. ‘%${value}%’ 在参数中不需要添加 %_

3. #{abc} 在参数中添加 %_

#和$的区别和注意事项

${}直接拼接 ,不会转换类型

如果是简单类型,必须写${value}
如果是pojo类型,${属性名}(注意:需要转换类型)

#{}相当于占位符,可以自动的转换类型 可以防止SQL注入

如果是简单类型,可以随便写${随便写}
如果是pojo类型,${属性名}(注意:可以自动转换类型)

一、# “%”#{value}"%"

1.UserMapper.xml

在这里插入图片描述

<select id="findByUsername" parameterType="java.lang.String" resultType="com.william.domain.User">
        select * from user where username like "%"#{value}"%"
    </select>

2.TestMybatis

在这里插入图片描述

    /**
     * 模糊查询
     * 通过用户名字模糊查询
     */
    @Test
    public void findByUsername(){
        InputStream inputStream = Resources.class.getClassLoader().getResourceAsStream("Mybatis-configuration.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        List<User> selectList = sqlSession.selectList("com.william.mapper.UserMapper.findByUsername","a");
        for (Object o : selectList) {
            System.out.println(o);
        }
        sqlSession.close();
    }

3.测试结果

执行的SQL语句

Preparing: select * from user where username like "%"?"%" 
Parameters: a(String)

在这里插入图片描述

二、$ ‘%${value}%’

1.UserMapper.xml

在这里插入图片描述

 <!--模糊查询-->
    <select id="findByUsername" parameterType="java.lang.String" resultType="com.william.domain.User">
        select * from user where username like '%${value}%'
    </select>

2.TestMybatis

在这里插入图片描述

    /**
     * 模糊查询
     * 通过用户名字模糊查询
     */
    @Test
    public void findByUsername(){
        InputStream inputStream = Resources.class.getClassLoader().getResourceAsStream("Mybatis-configuration.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        List<User> selectList = sqlSession.selectList("com.william.mapper.UserMapper.findByUsername","a");
        for (Object o : selectList) {
            System.out.println(o);
        }
        sqlSession.close();
    }

3.测试结果

执行的SQL语句

Preparing: select * from user where username like '%a%' 
Parameters: 

在这里插入图片描述

三、在测试类参数中添加

1.UserMapper.xml

在这里插入图片描述

<select id="findByUsername" parameterType="java.lang.String" resultType="com.william.domain.User">
        select * from user where username like  #{abc}
    </select>

2.TestMybatis

在这里插入图片描述

  /**
     * 模糊查询
     * 通过用户名字模糊查询
     */
    @Test
    public void findByUsername(){
        InputStream inputStream = Resources.class.getClassLoader().getResourceAsStream("Mybatis-configuration.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        List<User> selectList = sqlSession.selectList("com.william.mapper.UserMapper.findByUsername","%a%");
        for (Object o : selectList) {
            System.out.println(o);
        }
        sqlSession.close();
    }

3.测试结果

执行的SQL语句

 Preparing: select * from user where username like ? 
 Parameters: %a%(String)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值