mybatis动态查询不确定的表
来源:互联网 发布:打击网络犯罪电话 编辑:程序博客网 时间:2024/06/06 12:17
以前都是指定了实体类,然后写好sql语句直接套用就可以了。但是现在有个问题,万一你的物理模型不确定,也即是你的表结构不确定,甚至连表名字都不确定该怎么办呢?我这次遇到了这个问题。我们有个需求,事先定义好了很多数据集的信息模型,针对这些信息模型生成物理模型。而我们需要针对这些物理模型进行操作。而这些数据集一旦更新,信息模型以及物理模型都要变动,所以事先不可能完全确定物理表结构等等信息。此时应该怎么在mybatis中进行处理呢?
这里在说一下mybatis中一个属性:statementType。这个属性的作用是告诉mybatis我们写的这个sql到底是预编译(PRESTATEMENT)还是非预编译(STATEMENT)的。有什么区别呢?如果是预编译的,那么系统在初始化时就会读取这段sql代码,将指定的实体类中的字段替换了类似#{}这样的语句,就是形成了类似这样的语句:
"select * from tableName where code=?" 这个时候你在系统运行时再想向这句sql中替换tableName或者code,结果可想而知。如果是非预编译呢,结果刚好相反,他会在系统运行时才会去生成这样类似的语句。此时就可以去替换这些动态的字段或者表名之类。这样在结合之前所讲的返回类型的设置,我们的问题就解决了
。我们可以不用设定参数和返回类型的实体类,只需要形成一个动态的表名和字段名的列表类。就可以动态对那些未知的物理模型进行操作.如下代码可作参考:
<select id="queryMetaList" resultType="Map" statementType="STATEMENT">
select * from ${tableName} t where
<foreach item="item" index="index" collection="field" open=" "
separator="and" close=" ">
<choose>
<when test="item.fieldType == 'DATE' and item.dateQueryFlag == 0">
${item.fieldCode} between
to_date('${item.fieldValue}','yyyy-mm-dd
hh24:mi:ss')
</when>
<when test="item.fieldType == 'DATE' and item.dateQueryFlag == 1">
to_date('${item.fieldValue}','yyyy-mm-dd
hh24:mi:ss')
</when>
<when test="item.fieldItemCode != null and item.fieldItemCode != ''">
${item.fieldCode} =
'${item.fieldItemCode}'
</when>
<otherwise>
${item.fieldCode} =
'${item.fieldValue}'
</otherwise>
</choose>
</foreach>
</select>
对了,漏了一句,如果是非预编译的话,最好使用${}而不是#{}
- mybatis动态查询不确定的表
- MyBatis中的动态SQL,实现不确定条件的CRUD-----使用Map来传递查询的参数
- Mybatis 不确定条件查询(动态语句where和if)借助实体类封装参数
- mybatis动态查询表
- mybatis的时间段动态查询
- MyBatis的动态查询配置
- mybatis的动态条件查询
- oracle+mybatis 使用动态Sql当插入字段不确定的情况下实现批量insert
- oracle+mybatis 使用动态Sql当插入字段不确定的情况下实现批量insert
- oracle+mybatis 使用动态Sql在要insert的字段不确定的情况下实现批量insert
- MyBatis的动态SQL的模糊查询
- MyBatis中的数据库动态查询的编写
- 基于mybatis的动态条件查询
- mybatis的批量插入与动态查询
- mybatis的动态SQL与模糊查询
- mybatis的动态sql和关联查询
- mybatis 动态sql 多表分组查询
- Mybatis 动态表名,查询数据
- Linux查看mysql 安装路径和运行路径
- TortoiseSVN Show Log 出错:svn/***/!svn/*** path not found
- XZ_Swift之Swift基础第二篇
- vue.js指令v-for使用以及下标索引的获取
- windows系统端口相关操作
- mybatis动态查询不确定的表
- Shell 关闭的右上角按钮添加事件
- 设计稿750px移动端字体自适应,1rem=100px
- android Material Calendar View的日期颜色修改~
- ie 英文文本不能自动换行
- 养不起家
- 一个BAT下工作室的面试官透露是怎样评估IT开发人员水平的
- 零基础不用愁!虚拟化技术入门课程
- Java集合1.9中的新特性