转载:MyBatis mapper.xml中使用静态常量或者静态方法
转自:https://my.oschina.net/wtslh/blog/682704
今天偶然之间刷到了这样一篇博客,有点意外 mybatis 还可以这样使用ONGL常量的方式,该方式针对 xml的mybaits.xml 文件下的 类似include方式 可以在完全弃用mybatis.xml文件的方式更好的一种替换,示例如下:
正常我们在其他地方进行引用时,使用以下标签:
但是我在 接下来的项目中,我使用springboot + mybatisplus 时,基本上摈弃了 配置文件的方式,所以我最开始选择了,我自定义常量,类似这样:
我最开始在程序中通过 传入参数的方式来进行配置查询只是我自己常用的列属性
看到这边博客之后我发现我自己直接使用常量类来进行OGNL表达式的映射,然后直接获取到我的查询的列,这样可以更好地避免了sql注入。
下面的内容都是引用转自的博客:
使用MyBatis技术,书写mapper.xml时,如果在其中的ognl表达式或者sql中直接使用一些数字或者字符串的话,会造成难以维护的问题。
在Java编码中,我们通常会把这些数字或者字符串定义在常量类或者接口中,如果在mapper.xml中也可以使用这些常量就比较好了。
还好MybBatis是支持这样的需求的。
ongl中:
比如我有一个工具类com.wts.test.DateUtil,其中有一个方法isLeapYear(int year),用于判断某年是否闰年。而在mapper的某个select中要根据是否闰年执行不同的查询。可以类似这样:
<if test="@com.wts.test.DateUtil@isLeapYear(year)==true">
select * from tableA
</if>
<if test="@com.wts.test.DateUtil@isLeapYear(year)==false">
select * from tableB
</if>
如果要使用常量的话,假设有常量类和常量Constant.CURRENT_YEAR:
<if test=year==@com.wts.test.Consant@CURRENT_YEAR>
select * from tableC
</if>
sql中:
使用静态方法:
<select id='testSelectA' .....>
select * from tableA where year=${@com.wts.test.DateUtil@getYear()}
</select>
使用静态常量:
<select id='testSelectB' .....>
select * from tableA where year=${@com.wts.test.Constant@CURRENT_YEAR}
</select>
以上。转载请指明出处:http://my.oschina.net/u/1758971/blog/682704
最新文章
- Linux 文件压缩与归档
- 深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接(转)
- HDU 5183 Negative and Positive (NP) --Hashmap
- css基础样式四
- HTML5部分新标签属性及DOM扩展元素
- 关于C#的内存释放问题
- python中try except执行顺序
- 基于VC的ACM音频编程接口压缩Wave音频(二)
- 【NOIP合并果子】uva 10954 add all【贪心】——yhx
- Spring Boot 以 jar 包方式运行在后台
- [Oracle] 中的Temporary tablespace的作用
- GridView中使用如下button OnClientClick代码会出现解析错误
- Linux下让tomcat显示图片(jdk1.4, tomcat4.0 或更高版本)
- xshell + xmanger连接centos gnome+ kde桌面 for需要X window的App
- MySQL - 主从复制及读写分离原理
- python中eval, exec, execfile,和compile [转载]
- home目录迁移至新分区
- JVM学习--(五)垃圾回收器
- 调整Eclipse中代码字体字号
- getQueryString.js