前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手写一个orm框架-5

手写一个orm框架-5

作者头像
何白白
发布2019-06-28 12:03:59
2800
发布2019-06-28 12:03:59
举报

手写一个orm框架-5

生成sql:insert

思路

新增的sql还是比较好实现的,我们需要的大致就是:

  1. 构建一个对象 User。
  2. 调用新增的方法,将User作为参数传入方法。
  3. 通过上一篇的解析结果,拿到所有的字段名称,与要保存的值。生成sql。
  4. 通过JdbcTemplate执行sql,插入数据库。

实现

首先我们要根据User.java拿到所有的表的字段个名称,和对应的值。就是上一篇写到的:EntityTableRowMapper

  1. 拿到字段和class属性的值 Map<String, Field> columnFieldMapper = entityTableRowMapper.getColumnFieldMapper(); insertColumns = new ArrayList(columnFieldMapper.size()); for (Map.Entry<String, Field> stringFieldEntry : columnFieldMapper.entrySet()) { Field field = stringFieldEntry.getValue(); Object value = EntityUtils.getValue(entity, field); if (value == null) { continue; } insertColumns.add(stringFieldEntry.getKey()); insertColumnValues.add(value); } 这里有两个变量: insertColumns:sql中的字段名。 insertColumnValues:sql中的字段对应的值。
  2. 生成插入的sql: StringBuilder builder = new StringBuilder(); int size = insertColumns.size(); builder.append("INSERT INTO ").append(getTableName()).append(StringUtils.SPACE); builder.append(StringUtils.append("( ", StringUtils.join(insertColumns, ", "), " ) ")); builder.append("VALUES "); for (int i = 0; i < insertCount; i++) { builder.append("( "); String[] repeat = StringUtils.repeat("?", size); builder.append(StringUtils.join(Arrays.asList(repeat), ", ")); builder.append(" )"); if (i != insertCount - 1) { builder.append(StringUtils.COMMA); } } builder.append(";");
  3. 生成的结果: //user User user = new User(); user.setId(10); user.setCreateDate(new Date()); user.setAge(20); user.setMark("ceshi"); user.setName("heiheihei"); //sql INSERT INTO user ( name, id, create_date, age, mark, status ) VALUES ( ?, ?, ?, ?, ?, ? ); //value [heiheihei, 10, Tue Jan 22 16:33:00 CST 2019, 20, ceshi, 0]
  4. 现在可以拿着生成的sql和值去执行啦~ jdbcTemplate.update(sql, insertColumnValues.toArray());

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 手写一个orm框架-5
    • 生成sql:insert
      • 思路
      • 实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档