最近在工作上遇到一个问题,由于数据量过大所以进行了分表保存用户数据,项目dao层使用了MyBatis框架,并且用xml保存维护sql语句,方便后期DBA介入进行查询语句的优化。由于分表就涉及到了有相近查询语句只是表名不同的情况,刚开始使用了
<select id="selectById" resultMap="BaseResultMap" parameterType="java.util.Map" >select <include refid="Base_Column_List" />from TABLENAME = #{openId,jdbcType=VARCHAR}where ID = #{id,jdbcType=INTEGER}
</select>
这种形式进行动态插入表名,这样做是错误的,因为parameterType这种种类型在执行sql语句之前先进行了编译,而没有表名的查询语句编译
是无法通过的,所以要用执行时才进行编译的类型"STATEMENT"。
<select id="testSelect" resultMap="BaseResultMap" statementType="STATEMENT" >select <include refid="Base_Column_List" />from ${tableName}where ID = ${id}</select>
 此类的解决方法在网上很多,这里只是当个笔记来使用,可能不是很完善,可以继续参考其他相关资料进行了解。另外在实际使用中,动态传入表名独自拿出来是没有意义的,往往配合自动生成表来使用。关于分表,无论时使用时间来进行分表还是使用用户主键来进行分表,表名都不是无意义的,一般来说都是有顺序的。下面的代码是我在实际使用中用到的自动分表方法。1.mybatis使用xml文件建表的方法。
  <update id="createNewTable" statementType="STATEMENT">  CREATE TABLE ${tableName}  (ID int(8) NOT NULL AUTO_INCREMENT,NAME varchar(12) NOT NULL,OPEN_ID varchar(50) NOT NULL,NICK_NAME varchar(50) NOT NULL,SEX int(1) NOT NULL</update>
 使用了statementType="STATEMENT"字段也实现了传入表名进行建表。2.异常捕获,触发建表
Map<String, Object> condition = new HashMap<String, Object>();
condition.put("tableName", "user_info");
condition.put("id", 1);try {UserInfo userInfo = userInfoSrv.testSelect(condition);
} catch (BadSqlGrammarException e) {logger.error("Table not exist,now creat new table!", e);int gt = userInfoSrv.createNewTable(condition);
}

当捕获异常BadSqlGrammarException时自动建表,当然这个异常不仅仅是标示表不存在的异常,还有其他的情况,所以其他可能触发建表的异常都要提前用代码排除掉,以上就是我解决这个问题的全部思路。

【MyBatis】myBatis动态传入表名、字段名(列名)进行查询相关推荐

  1. MyBatis,动态传入表名,字段名的解决办法

    http://luoyu-ds.iteye.com/blog/1517607 今天做项目,遇到的问题就是需求修改数据表的记录,而且字段名都不是固定的,也就是说是需要通过参数传入的, 本来这也不是什么难 ...

  2. mybatis plus 动态创建表和字段_mybatis-plus maven代码生成器

    前言 初次接触mybatis plus是17年末,当时的版本是2.0+,在那之前公司使用的mybatis框架是tk.mybatis,也是衍生于mybatis的一款扩展框架.当时拿mybatis plu ...

  3. MyBatis的sql动态传入表名和字段名,并判断是否为空

    id:方法名 parameterType:入参类型 resultType:返回类型,默认map statementType:预编译,还是非预编译 预编译:PRESTATEMENT,在系统初始化时就会读 ...

  4. MyBatis动态传入表名,字段名参数的解决办法

    要实现动态传入表名.列名,需要做如下修改:sql里的属有变量取值都改成${xxxx},而不是#{xxx} <delete id="deleteTableData" param ...

  5. 【MyBatis】myBatis动态传入表名进行查询

    由于分表就涉及到了有相近查询语句只是表名不同的情况,刚开始使用了 <select id="selectById" resultMap="BaseResultMap& ...

  6. 在Mybaties中进行数据查询时,表中字段名和属相名没有对应起来,查询的结果总null,一下是解决方法

    http://blog.csdn.net/jiangsanfeng1111/article/details/49763135 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同 ...

  7. sql大小写敏感吗_postgresql基础:表名字段名是大小写敏感的么

    很多人知道postgresql的表名字段名是大小写不敏感的,比如这样一个sql查询 select ID,name, TYPE, score FROM pubLIC.STUdent_SCOre limi ...

  8. MyBatis实体属性与表的字段不对应的解决方案

    MyBatis实体属性与表的字段不对应的解决方案 参考文章: (1)MyBatis实体属性与表的字段不对应的解决方案 (2)https://www.cnblogs.com/EasonJim/p/765 ...

  9. oracle查询表的字段类型有哪些,oracle中查询表的信息,包括表名,字段名,字段类型,主键(精)...

    通过搜索摸索,总结了一下 oracle 中查询表的信息,包括表名,字段名,字段类型,主键, 外键唯一性约束信息,索引信息查询 SQL 如下,希望对大家有所帮助: 1.查询出所有的用户表 select ...

最新文章

  1. 软工作业 6:软件设计—— 用户体验(案例分析)
  2. 重温强化学习之函数近似
  3. 计算机里FC方式,【计算机基础】在0和1的世界里来来回回
  4. Sqlserver 通用存储过程(二) 联合主键
  5. wget for windows
  6. asp.net中获取全文图片地址的方法
  7. 计算机硬盘如何安装系统,电脑硬盘怎么装系统
  8. android minicap web,使用minicap对安卓手机快速截屏
  9. 就业推荐表鉴计算机水平,毕业生就业推荐表的鉴定评语
  10. 几个免费下载原版图书的网站
  11. 键盘上打出省略号的方法
  12. 【2016.5.27】再见,软件工程,你好,软件工程。
  13. 网页自动关机代码HTML,电脑如何自动关机
  14. C语言程序项目计划书,C语言程序的设计课程的设计的计划书.doc
  15. 路由器TL-WR800N固件升级
  16. 蜂鸟金融终端:零滞后技术指标
  17. STM32F10X SPI操作flash MX25L64读写数据(转)
  18. MySql中的语句查询
  19. 001-Photoshop基础操作
  20. java k v t_java 中的 t,e,k,v

热门文章

  1. 2017年11月学习心得报告
  2. 年薪35w以上的android面试要求
  3. linux内核源码分析之虚拟文件系统VFS(一)
  4. 基里巴斯可能被海水淹没 拟举国迁至大型人工岛
  5. nmn都有哪些作用,nmn的真实效果,大汇总
  6. 太强大了!Packet Tracer抓包功能
  7. 在加入域时又出现了“不能访问网络位置”的错误 的解决
  8. MQ 系列之 ActiveMQ 搭建 Zookeeper + Replicated LevelDB 集群
  9. Flowable 快速入门教程:任务驳回与回退
  10. C++运算符重载实现矩阵除法