mybatis动态查询字段、动态更新字段
一、动态查询字段并返回list
接收的对象
@Data public class TableFieldOutput implements Serializable {private static final long serialVersionUID = 6374628679868679057L;@ApiModelProperty(value = "主键ID")private Long primaryKey;@ApiModelProperty(value = "oldField1")private String oldField1;@ApiModelProperty(value = "oldField2")private String oldField2;@ApiModelProperty(value = "oldField3")private String oldField3;@ApiModelProperty(value = "oldField4")private String oldField4;@ApiModelProperty(value = "oldField5")private String oldField5;@ApiModelProperty(value = "oldField6")private String oldField6;@ApiModelProperty(value = "oldField7")private String oldField7;@ApiModelProperty(value = "oldField8")private String oldField8;@ApiModelProperty(value = "oldField9")private String oldField9;@ApiModelProperty(value = "oldField10")private String oldField10;}
拼接要查询的sql语句。
@Resoure Querymapper querymapper;//要查询的字段 id, name,age, String tableName="school" String primaryKey="id"; String oldFields="name,age"; String condition=" where age>18"StringBuilder sqlStr = new StringBuilder("select ").append(primaryKey).append(" primaryKey,"); String[] split = oldFields.split(","); for (int i = 0; i < split.length; i++) {String oldFiled = split[i];sqlStr.append(oldFiled).append(" oldField").append(i + 1);if (i != split.length - 1) {sqlStr.append(",");} } sqlStr.append(" from ").append(tableName).append(" ").append(condition); //查询数据 List<TableFieldOutput> outputs = querymapper.selectTableFieldListBySql(sqlStr.toString());
mybatis 配置
<select id="selectTableFieldListBySql" resultType="com.ctfojt.synchfile.vo.TableFieldOutput"statementType="STATEMENT">${sqlStr} </select>
二、动态更新字段
- 动态获取对象中值
TableFieldOutput out = new TableFieldOutput();
out.setOldField1("1");
out.setOldField2(null);
out.setOldField3("3");
out.setOldField4("4");
//比如我们要获取 oldField3的值:
String value = getItemByReflect(out,3);//通过反射来动态获取对象的值
public String getItemByReflect(TableFieldOutput dto, int num) {try {Method m1 = TableFieldOutput.class.getDeclaredMethod(String.format("getOldField%s", num));return (String) m1.invoke(dto);} catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {return null;}
}
拼接sql
String tableName="school" String primaryKey="id"; String newFields="name,age"; String primaryValue=" 3"List<String> newFieldContent = new ArrayList<>(); newFieldContent.add("小明,18"); //拼接要更新的字段的sql StringBuilder sqlStr = new StringBuilder("update ").append(tableName).append(" set "); for (int i = 0; i < newFieldContent.size(); i++) {if (!StringUtils.isEmpty(newFieldContent.get(i))) {sqlStr.append(newFields.split(",")[i]).append("='").append(newFieldContent.get(i)).append("'");if (i != newFieldContent.size() - 1) {sqlStr.append(",");}} } sqlStr.append(" where ").append(primaryKey).append("=").append(output.getPrimaryKey());
更新
<update id="updateNewImage" statementType="STATEMENT">${sqlStr}
</update>
三、知识点
statementType:标记操作SQL的对象
取值说明:
1、STATEMENT:直接操作sql,如上所用。
2、PREPARED:预处理,参数?,进行预编译
3、CALLABLE:执行存储过程
mybatis动态查询字段、动态更新字段相关推荐
- EntityFramework4.5使用Expression类创建动态查询及动态查询导航属性
创建动态查询 想在项目中实现一个灵活的动态查询类,参考http://www.cnblogs.com/lyj/archive/2008/03/25/1122157.html和http://www.cnb ...
- mysql如何动态查询_Mysql动态查询
if条件查询 格式: 添加到sql的语句 where标签 简化SQL语句中WHERE条件判断 智能处理and和or 如果使用几个if条件标签,如果第一个条件不成立,那么该sql语句就不成立了. 把所有 ...
- Dapper的动态查询生成器
目录 介绍 背景 动态SQL 你好Bobby 表 参数化SQL 回到现代软件 Dapper 例子 不要重复自己 字符串插值内部 DapperQueryBuilder 快速开始 筛选器清单 Fluent ...
- MyBatis构建sql时动态传入表名以及字段名
http://wendy-wxie.iteye.com/blog/1605193 用了mybatis很长一段时间了,但是感觉用的都是比较基本的功能,很多mybatis相对ibatis的新功能都没怎么用 ...
- mybatis获取表名_mybatis动态调用表名和字段名
一直在使用Mybatis这个ORM框架,都是使用mybatis里的一些常用功能.今天在项目开发中有个业务是需要限制各个用户对某些表里的字段查询以及某些字段是否显示,如某张表的某些字段不让用户查询到.这 ...
- mybatis动态调用表名和字段名
一直在使用Mybatis这个ORM框架,都是使用mybatis里的一些常用功能.今天在项目开发中有个业务是需要限制各个用户对某些表里的字段查询以及某些字段是否显示,如某张表的某些字段不让用户查询到.这 ...
- mybatis获取表名——mybatis动态调用表名和字段名#{},${}
一直在使用Mybatis这个ORM框架,都是使用mybatis里的一些常用功能.今天在项目开发中有个业务是需要限制各个用户对某些表里的字段查询以及某些字段是否显示,如某张表的某些字段不让用户查询到.这 ...
- 有个需求mybatis 插入的时候不知道有哪些字段,需要动态的传入值和字段
有个需求mybatis 插入的时候不知道有哪些字段,需要动态的传入值和字段, Java code? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 @Test ...
- jpa多对多,中间表有额外查询字段设计,以及使用creteriaquery进行动态查询,使用自定义类进行数据封装返回
一.jpa多对多__利用一对多实现(推荐) 尽量不要使用@manyToMany,特别是中间表有冗余字段的时候; 最好是在两个主表中加上@oneToMany,从表中加上@manyToOne来配置,加强j ...
最新文章
- AC日记——[HNOI2010]BOUNCE 弹飞绵羊 洛谷 P3203
- python中国大学排名爬虫写明详细步骤-Python爬虫 2020中国大学排名
- Machine Learning week 9 quiz: Anomaly Detection
- c语言中table函数,Excel的TABLE函数是什么意思?
- python的字符串定界符可以使用_使用Template格式化Python字符串的方法
- Java枚举:您拥有优雅,优雅和力量,这就是我所爱!
- 第五天、LAMP架构
- python查看pypi第三方库可安装的全部版本
- 微信小游戏跳坑之旅(一)——使用白鹭引擎开发之创建项目
- ElasticNet算法解析
- python对文件的操作
- Towards Fully 8-bit Integer Inference for the Transformer Model
- 发放2013年迅雷vip账号了~!
- 漫城cms免费漫画+小说cms系统
- NS3000 电子海图长江导航应用分析
- app小程序手机端Python爬虫实战01-Uiautomator2自动化抓取工具介绍
- iOS tableview左滑编辑,长按拖动排序
- DDOS攻击器常见的三种DDoS攻击方式详解
- ES6 -- find 详解
- 图像分割 - Hough变换直线检测
热门文章
- Metasploit上使用RPC方式复现一个Linux提权漏洞
- Artifact springmvc-01-servlet:war exploded: 部署工件时出错。请参阅服务器日志
- 知名的网址导航网站及好用的网址导航分享
- 1000内不能被7整除的数
- 重磅成果丨ASAM SOVD 1.0.0正式发布
- 题目 给定一个字符串所表示的括号序列,包含以下字符: '(', ')', '{', '}', '[' and ']', 判定是否是有效的括号序列。 样例 括号必须依照 ()顺序表示, ()[]
- Java练手小游戏---黄金矿工
- Linux预处理功能,ZABBIX4.2预处理新功能---数据节流THROTTLING
- 【华为OD机试真题 python】连续出牌数量【2022 Q4 | 200分】
- 按颜色分类:青绿色系(Blue Green)