以下是我在 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/