Параметры не заменяются в запросе MyBatis - PullRequest
1 голос
/ 22 февраля 2012

Вот мой запрос на выбор в 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);
}
}

Моя проблема в том, что функция getBrand в BrandService возвращает значение null.Если я заменим параметр #{bname} внутри BrandMapper.xml жестко закодированной строкой, он сработает и вернет правильный класс.Что я здесь не так делаю?Есть ли какие-либо журналы или что-нибудь доступное, где я могу видеть фактический запрос, который создается?Любая помощь приветствуется.

Мне удалось включить loggin, используя 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 = ?

Параметр не заменяется.Я не могу понять, что я делаю здесь неправильно.

1 Ответ

3 голосов
/ 22 февраля 2012

Знак вопроса является заполнителем в подготовленных выражениях, зарегистрированный запрос в порядке и выглядит, как и ожидалось. Реальное значение должно быть передано по запросу в вашу базу данных как отдельный параметр.

...