String dateStr = DateFormatUtils.format(date.getTime(), "yyyy-MM-dd HH:mm:ss");
dateStr = "'" + dateStr + "'";
说明:
statementType:这个属性的作用是告诉mybatis我们写的这个sql到底是预编译(PRESTATEMENT)还是非预编译(STATEMENT)的。有什么区别呢?如果是预编译的,那么系统在初始化时就会读取这段sql代码,将指定的实体类中的字段替换了类似#{}这样的语句,就是形成了类似这样的语句:
"select * from tableName where code=?" 这个时候你在系统运行时再想向这句sql中替换tableName或者code,结果可想而知。如果是非预编译呢,结果刚好相反,他会在系统运行时才会去生成这样类似的语句。此时就可以去替换这些动态的字段或者表名之类。
或者
SELECT * FROM `sim_bill_${month}` where phone=#{sim}
statementType="CALLABLE"
存储过程:
usebase_passportGo
create procyhj_test@input_a int,@input_b int,@output_c intoutas
begin
select * fromconfig.city;set @output_c = @input_a*@input_b;return @input_a+@input_b;end
Mybats配置:
#{a,mode=IN,jdbcType=INTEGER},
#{b,mode=IN,jdbcType=INTEGER},
#{c,mode=OUT,jdbcType=INTEGER}
)}]]>
Java代码
Map paramMap = new HashMap();
paramMap.put("a", 2);
paramMap.put("b", 3);
List citys = (List) getTemplate().selectList(getNameSpaceAndMethod("testByProc"), paramMap);return citys;
通过以上代码我们即可获取对应的结果集,return参数和output参数。其中return参数和output参数放在传入的paramMap中,运行结果如下:
c是存储过程的output参数,而d为return参数。
需要注意的事项:
1、 存储过程的参数和名称无关,只和顺序有关系
2、 存储过程的output参数,只能通过传入的map获取
3、 存储过程返回的结果集可直接用返回的map接收
4、 存储过程的return结果需要使用?=call procName(?,?)的第一个参数接收,需要指定对应的mode为OUT类型
5、 存储过程对应的数据类型为枚举类型,需要使用大写,如VARCHAR