一、特殊字符的处理
我们将sql语句配置在mapper.xml文件中,sql中会存在>、<、>=或者<=等,这种情况,在xml文件中是校验不通过的,所以需要对配置中的sql进行处理,这里有两种解决方案:
- 将这些字符替换成符合xml规范的字符,具体转义字符如下:
- 将sql语句用<![CDATA[ ... ]]> 包裹,个人比较推崇这一个。
二、动态组装条件
为了满足业务的需要,有些条件需要动态设置,比如如果某个条件为空,则不要在sql中增加该条件,可以通过以下配置进行解决:
<where>
1==1
<if test="param != null and param != ''">
and p_param = #{param}
</if>
<if test="param2 != null and param2 != ''">
and p_param2 = #{param2}
</if>
</where>
mybatis的配置不存在else if,可通过以下配置:
<choose>
<when test="param3 != null and param3 !=''">
and p_param3 = #{param3}
</when>
<otherwise>
......
</otherwise>
</choose>
三、#{}和${}的区别
sql中使用#{param},会将该项替换成?,然后通过preparestatement设置成param的值;而${param}就会直接将该项直接替换成param的值, 当做字符串来处理。
四、mybatis的日志配置
控制mybatis是否打印sql语句以及参数等,在mybatis-config.xml中进行如下配置,则会打印sql等详细信息。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"classpath:/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
</configuration>
通过如下配置,则主要依赖于log4j的配置,不会打印很详细的日志内容。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"classpath:/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="logImpl" value="LOG4J" />
</settings>
</configuration>
五、mybatis+springmvc事务
通过注解@Transactional设置事务,手动回滚通过TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();来完成。