1. 设置SQL日志输出
在控制台输出,log4j.properties 配置
log4j.rootLogger=debug,info,stdout, R, L
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Threshold=DEBUG
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern= %d{yyyy-MM-dd HH\:mm\:ss} [%5p] -%F(%L) -%m%n
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.Java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
2. @Paramd的用法
(1)如果是非基本数据类型,建议不使用@Paramd
public List<student> selectuser(@Param(value = "page")int pn ,@Param(value = "st")student student);
<select id="selectuser" resultType="com.user.entity.student">
SELECT * FROM student
where sname like concat(concat("%",#{st.sname}),"%")
LIMIT #{page} ,5
</select>
如果对对象是用了注解,要获取对象的属性值,应当使用 【注解名.属性名】 的方式。而当不使用注解时,可以直接通过【属性名】获取到对象的值。
(2)如果是基本数据类型,建议都使用@Paramd
@Param 含义:如果你的映射器的方法需要多个参数, 这个注解可以被应用于映射器的方法 参数来给每个参数一个名字。
如果不是使用@Param,会存在以下问题:
- 当你不使用@Param注解来声明参数时,必须使用使用 #{}方式。如果使用 ${} 的方式,会报错。
Mybatis异常There is no getter for property named 'XXX' in 'class java.lang.String' - 当入参为 string类型时 (包括java.lang.String)
使用#{xxx}引入参数.会抛异常There is no getter for property named 'XXX' in 'class java.lang.String'
<select id="getBookingCount" resultType="int" parameterType="string">
select count(*) from TB_EMPC_BOOKING_ORDER T
where (t.state = '1' or t.state = '2')
and t.appointmenttime = #{state}
</select>
<choose>
<when test="prevTime != null and prevTime !=''">
AND t.post_time < to_date(#{prevTime, jdbcType=VARCHAR}, 'yyyy-MM-dd HH24:mi:ss')
</when>
<otherwise>
AND t.post_time < SYSDATE
</otherwise>
</choose>
网友评论