Mybatis SQL参数、条件、日志
参数:
通常情况下,Mybatis的mapper文件中Select、Inser、Update和Delete只接收一个参数,并用parameterType指定。
要指定多个参数,可以将多个参数加入到一个hashmap,然后将hashmap作为参数传入。
另外的方法是使用@Param注解标注多个参数,例如:
List<Contact> selectQuery(@Param(value="contact") Contact contact,@Param(value="start") int start,@Param("size") int size);其中参数contact类型为Contact,mapper对于的xml配置为:
<select id="selectQuery" resultType="Contact"> select * from contacts <where> <if test="contact.name!=null"> name like concat(%,#{contact.name},%) </if> <if test="contact.email!=null"> and email like concat(%,#{contact.email},%) </if> </where> limit #{start},#{size} </select>因为多个参数的存在,引用name属性必须指定contact.name。
条件:
if:条件判断
官方文档代码片段:
<select id="findActiveBlogWithTitleLike" parameterType="Blog" resultType="Blog"> SELECT * FROM BLOG WHERE state = ‘ACTIVE’ <if test="title != null"> AND title like #{title} </if> </select>
choose:多个条件判断,包含when otherwise
官方文档代码片段:
<select id="findActiveBlogLike" parameterType="Blog" resultType="Blog"> SELECT * FROM BLOG WHERE state = ‘ACTIVE’ <choose> <when test="title != null"> AND title like #{title} </when> <when test="author != null and author.name != null"> AND author_name like #{author.name} </when> <otherwise> AND featured = 1 </otherwise> </choose> </select>
where:构造where条件片段
官方文档代码片段:
<select id="findActiveBlogLike" parameterType="Blog" resultType="Blog"> SELECT * FROM BLOG <where> <if test="state != null"> state = #{state} </if> <if test="title != null"> AND title like #{title} </if> <if test="author != null and author.name != null"> AND author_name like #{author.name} </if> </where> </select>会这3个基本上就好了。。
日志:
log4j.rootLogger=DEBUG, stdoutlog4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%c{1} - %m%n
log4j.logger.java.sql.PreparedStatement=DEBUG