欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-20 21:09:34
...

备注:其他大部分代码参照”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>

修改测试代码
MyBatis中根据用户名实现模糊查询(${}和#{}的区别)

总结

  • {}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换。#{}可以有效防止sql注入。 #{}可以接收简单类型值或pojo属性值。 如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。
  • sql{}可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换, pojoparameterType{}括号中只能是value。
相关标签: #{}和${}区别