mybatis中一个属性:statementType。
这个属性的作用是告诉mybatis我们写的这个sql到底是预编译(PRESTATEMENT)还是非预编译(STATEMENT)的。
有什么区别呢?如果是预编译的,那么系统在初始化时就会读取这段sql代码,将指定的实体类中的字段替换了类似#{}这样的语句,就是形成了类似这样的语句:
select * from tableName where code=?
这个时候你在系统运行时再想向这句sql中替换tableName或者code,结果可想而知。
如果是非预编译呢,结果刚好相反,他会在系统运行时才会去生成这样类似的语句。此时就可以去替换这些动态的字段或者表名之类。
如果是非预编译的话,最好使用${}而不是#{}
select order_sn, ${failCount}, fail_reason, update_time, status, trade_mode from t_order where status = #{status}