【MyBatis】myBatis动态传入表名、字段名(列名)进行查询
最近在工作上遇到一个问题,由于数据量过大所以进行了分表保存用户数据,项目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动态传入表名、字段名(列名)进行查询相关推荐
- MyBatis,动态传入表名,字段名的解决办法
http://luoyu-ds.iteye.com/blog/1517607 今天做项目,遇到的问题就是需求修改数据表的记录,而且字段名都不是固定的,也就是说是需要通过参数传入的, 本来这也不是什么难 ...
- mybatis plus 动态创建表和字段_mybatis-plus maven代码生成器
前言 初次接触mybatis plus是17年末,当时的版本是2.0+,在那之前公司使用的mybatis框架是tk.mybatis,也是衍生于mybatis的一款扩展框架.当时拿mybatis plu ...
- MyBatis的sql动态传入表名和字段名,并判断是否为空
id:方法名 parameterType:入参类型 resultType:返回类型,默认map statementType:预编译,还是非预编译 预编译:PRESTATEMENT,在系统初始化时就会读 ...
- MyBatis动态传入表名,字段名参数的解决办法
要实现动态传入表名.列名,需要做如下修改:sql里的属有变量取值都改成${xxxx},而不是#{xxx} <delete id="deleteTableData" param ...
- 【MyBatis】myBatis动态传入表名进行查询
由于分表就涉及到了有相近查询语句只是表名不同的情况,刚开始使用了 <select id="selectById" resultMap="BaseResultMap& ...
- 在Mybaties中进行数据查询时,表中字段名和属相名没有对应起来,查询的结果总null,一下是解决方法
http://blog.csdn.net/jiangsanfeng1111/article/details/49763135 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同 ...
- sql大小写敏感吗_postgresql基础:表名字段名是大小写敏感的么
很多人知道postgresql的表名字段名是大小写不敏感的,比如这样一个sql查询 select ID,name, TYPE, score FROM pubLIC.STUdent_SCOre limi ...
- MyBatis实体属性与表的字段不对应的解决方案
MyBatis实体属性与表的字段不对应的解决方案 参考文章: (1)MyBatis实体属性与表的字段不对应的解决方案 (2)https://www.cnblogs.com/EasonJim/p/765 ...
- oracle查询表的字段类型有哪些,oracle中查询表的信息,包括表名,字段名,字段类型,主键(精)...
通过搜索摸索,总结了一下 oracle 中查询表的信息,包括表名,字段名,字段类型,主键, 外键唯一性约束信息,索引信息查询 SQL 如下,希望对大家有所帮助: 1.查询出所有的用户表 select ...
最新文章
- 软工作业 6:软件设计—— 用户体验(案例分析)
- 重温强化学习之函数近似
- 计算机里FC方式,【计算机基础】在0和1的世界里来来回回
- Sqlserver 通用存储过程(二) 联合主键
- wget for windows
- asp.net中获取全文图片地址的方法
- 计算机硬盘如何安装系统,电脑硬盘怎么装系统
- android minicap web,使用minicap对安卓手机快速截屏
- 就业推荐表鉴计算机水平,毕业生就业推荐表的鉴定评语
- 几个免费下载原版图书的网站
- 键盘上打出省略号的方法
- 【2016.5.27】再见,软件工程,你好,软件工程。
- 网页自动关机代码HTML,电脑如何自动关机
- C语言程序项目计划书,C语言程序的设计课程的设计的计划书.doc
- 路由器TL-WR800N固件升级
- 蜂鸟金融终端:零滞后技术指标
- STM32F10X SPI操作flash MX25L64读写数据(转)
- MySql中的语句查询
- 001-Photoshop基础操作
- java k v t_java 中的 t,e,k,v