mybatis当中定义全局变量
在开发过程当中难免有些固定的常量,比如固定的url开头,我们需要在xml文件当中的sql语句中进行拼接变量。如果每次都用传递参数的方法进行使用的话,那样无疑会增加工作量,因此我们需要mybatis的配置文件当中添加全局变量。
- 首先确定实例化sqlSessionFactory的时候添加mybatis的配置文件
- 在mybatis的配置文件当中添加全局变量
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD SQL Map Config 3.4//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--name代表添加的全局属性名;value代表添加的属性值;-->
<properties>
<property name="urlpath" value="http://172.xx.x.xx:8080/upload/"/>
</properties>
<settings>
<!-- 这个配置使全局的映射器启用或禁用缓存 -->
<setting name="cacheEnabled" value="true" />
<!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载 -->
<setting name="lazyLoadingEnabled" value="true" />
<setting name="multipleResultSetsEnabled" value="true" />
<setting name="useColumnLabel" value="true" />
<!--<setting name="defaultStatementTimeout" value="25000" />-->
<!--<setting name="defaultExecutorType" value="REUSE" />-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
</configuration>
- 接下来在写sql语句的时候便可以使用这个全局变量
<select id="getCourseInCategory" resultType="java.util.Map">
SELECT
t.companyId,
t.courseId,
userCd,
t.categoryId,
courseName,
courseMemo,
courseType,
subCourseType,
CONCAT('${urlpath}',courseImg) as imgURL,
courseCredit,
courseScore,
courseSee,
t.status,
t.creator,
t.createtime,
t.modifier,
t.modifytime,
e.userCount,
(SELECT count(*) from newminicollege.t_m_subcourse s
WHERE t.companyId=s.companyId and t.courseId=s.courseId and s.status=1 and s.audit=2
) AS subCount
FROM newminicollege.t_m_course t
left JOIN(
SELECT a.courseId,count(DISTINCT j.userCd)as userCount from newminicollege.t_m_course a
left JOIN newminicollege.t_u_joincourse j
on a.companyId=#{companyId}
and a.courseId=j.joinCourseId
group by a.courseId
) e
ON t.courseId=e.courseId
WHERE t.companyId=#{companyId} AND subCourseType=#{categoryId} and t.status=1 and t.courseSee in('公共')
</select>
xml中sql语句转义符的使用
xml中转义符对照表
实体名称 | 显示结果 | 描述 |
---|---|---|
< | < | 大于号 |
> | > | 小于号 |
& | & | 和 |
' | ‘ | 单引号 |
" | “ | 双引号 |
在上面的语句当中就使用到了转义符
CONCAT('${urlpath}',courseImg) as imgURL
正常显示应该为CONCAT('xxx.xxx.xx.xxx/upload/') as imgURL
同样的当在代码当中用到大于号或者小于号的时候,如下
select * from user where usercd >= 10115208 and age <= 40
上面语句也可以使用<![CDATA[内容]]>
这种方式进行书写,作用是让[]里面的内容在xml中会原模原样的显示
<![CDATA[ select * from user where usercd >= 18 and age <= 40 ]]>
当然转义字符在ssm中使用很广泛,在开发过程当中使用<![CDATA[内容]]>
更加方便快捷,也不需要查询转义字符对照表