java - MyBatis 查询中的参数未被替换

标签 java sql spring jdbc mybatis

以下是我在 BrandMapper.xml 中的选择查询。

<select id="getBrand" parameterType="String" resultMap="brandResult">
    SELECT 
        B.bid as bid, 
        B.bname as bname, 
        B.avg_price as avg_price, 
        B.total_number as total_number, 
        P.pid as pid, 
        P.pname as pname, 
        P.bid as pbid, 
        P.bname as pbname, 
        P.specs as pspecs, 
        P.price as price 
    from Brands B left outer join Products P on P.bid = B.bid 
    where B.bname = #{bname, jdbcType=VARCHAR}
</select>

这是界面

public interface BrandMapper {
    BrandDAO getBrand(String bname);
}

这是服务类

@Service
public class BrandService {
@Autowired
private BrandMapper brandMapper;
public BrandDAO getBrand(String bname) {
    System.out.println("Inside DBService getBrand");
    return brandMapper.getBrand(bname);
}
}

我的问题是 BrandService 中的 getBrand 函数返回一个 null 值。如果我将 BrandMapper.xml 中的参数 #{bname} 替换为硬编码字符串,它会工作并返回正确的类。我在这里做错了什么?是否有任何日志或任何可用的地方我可以看到正在构建的实际查询?感谢您的帮助。

我设法使用 log4j 启​​用登录,这是正在执行的查询

SELECT B.bid as bid, B.bname as bname, B.avg_price as avg_price, B.total_number as total_number, P.pid as pid, P.pname as pname, P.bid as pbid, P.bname as pbname, P.specs as pspecs, P.price as price from Brands B left outer join Products P on P.bid = B.bid where B.bname = ?

参数没有被替换。我不知道我在这里做错了什么。

最佳答案

问号是 Prepared Statements 中的占位符,记录的查询非常好并且看起来符合预期。实际值应作为单独的参数随查询传递到您的数据库。

关于java - MyBatis 查询中的参数未被替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9391878/

相关文章:

java - 如何从 RSA 1024 位加密中获得较短的输出(密文)结果?

java - 将小时和分钟添加到 Date 对象

mysql - 表被指定两次作为 INSERT 的目标和单独的数据源

MySQL 查询由于日期不同而出现重复

.net - IsNull(Max(id)) 的最佳 Linq2Sql 等效项

java - 使用自定义基础存储库配置 Spring @DataJpaTest

java.sql.SQLException : Access denied for user 'root' @'localhost' . 无法创建与数据库服务器的连接

spring - 查询创建方法给出错误

Java:如果 ArrayList 中不存在值,则删除 mysql 行

java - 服务器上的 youtube 到 mp3 转换