开始准备生成sql

在上一篇里,我们已经取到了我们在生成sql语句中所需要的信息,这一篇里我们开始根据class来生成我们需要的sql。在这之前我们先确认几件事情

  1. sql里的参数我们使用占位符的形式。

    这里用的是jdbc中的PreparedStatement,sql中的参数使用“”的形式。

    大致上是这样的:

    Connection connection = dataSource.getConnection();
    PreparedStatement preparedStatement = connection.prepareStatement("select * from `user` where `status` = ? ;");
    preparedStatement.setObject(1, 0);
    ResultSet resultSet = preparedStatement.executeQuery();

    但是这样的话我们每次执行都需要手写这些执行sql的繁琐的代码,我在这里选择使用spring-jdbc中的JdbcTemplte。这样我就只需要生成sql,然后使用JdbcTemplte里的方法来执行sql就好了。

  2. 我们只生成单表的增删改查,不涉及复杂sql。

  3. 不贴出完整的代码,以说明思路为主。

    毕竟这个是已经写好的代码,地址在:https://github.com/hjx601496320/JdbcPlus 。所有代码可以在这里找到。

分析sql

我们主要解决的是增删该查的问题,所以我们先写如何生成一个新增的sql。

我么先观察一下sql一般来说都有什么构成。现在先放一个例子出来:

  1. insert

    INSERT INTO user (name, id, create_date, age, mark, status)
    VALUES (?, ?, ?, ?, ?, ?);
  2. delete

    DELETE
    FROM user
    WHERE id = ?
  3. update

    UPDATE user
    SET name = ?,
    id = ?,
    create_date = ?,
    age = ?,
    status = ?
    WHERE id = ?
  4. select

    SELECT name, id, create_date, age, mark, status
    FROM user
    WHERE id = ?

通过观察上面的sql,可以发现其中有一些共性:

  1. 都有表的名称。
  2. 基本上都包含表中的字段名称。
  3. 还有参数。
  4. 以上都是废话

    手把手教你写一个java的orm(四)的更多相关文章

    1. 手把手教你写一个java的orm(一)

      写之前的说明 其实吧. 这个东西已经写好了,地址在:https://github.com/hjx601496320/JdbcPlus 这系列文章算是我写的过程的总结吧.(恩系列,说明我可能会写好久,╮ ...

    2. 手把手教你写一个java的orm(五)

      生成sql:where 上一篇里我们实现了生成insert的sql,下面要开始实现update,delete,select的sql语句了.但是这些语句有一个比较麻烦的地方是:它们一般后面都会有wher ...

    3. 手把手教你写一个java的orm(二)

      创建映射关系 ​ 想要实现一个orm的功能,我觉得就是要将class和数据库中的表创建映射关系.把class的名称和表的名称,class属性名称和表的字段名称,属性类型与表的字段类型一一对应起来.可以 ...

    4. 手把手教你写一个java的orm(完)

      生成sql:select 上一篇讲了怎样生成一个sql中where的一部分,之后我们要做事情就简单很多了,就只要像最开始一样的生成各种sql语句就好了,之后只要再加上我们需要的条件,一个完整的sql就 ...

    5. 手把手教你写一个java的orm(三)

      使用反射解析class 上一篇我们完成了class到表映射关系的建立,但是这个并不能被代码正确处理,我们还需要让程序能够正确的识别这些映射关系. 这一篇主要讲的是建立一个从class到表的模型,使我们 ...

    6. 只有20行Javascript代码!手把手教你写一个页面模板引擎

      http://www.toobug.net/article/how_to_design_front_end_template_engine.html http://barretlee.com/webs ...

    7. 手把手教你写电商爬虫-第四课 淘宝网商品爬虫自动JS渲染

      版权声明:本文为博主原创文章,未经博主允许不得转载. 系列教程: 手把手教你写电商爬虫-第一课 找个软柿子捏捏 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫 手把手教你写电商爬虫-第三课 ...

    8. 手把手教你写一个RPC

      1.1 RPC 是什么 定义:RPC(Remote Procedure Call Protocol)--远程过程调用协议 ,RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数 ...

    9. 让我手把手教你写一个强大、方便使用的 IOC 容器

      一.介绍 1.介绍 最近无聊,也没什么事做,没事做总是要给自己找点事情做吧,毕竟人的生活在与折腾.于是,决定自己手动写一个 IOC 的框架.我们知道在 NetCore 的版本里面已经内置了 IOC 容 ...

    随机推荐

    1. SSE sqrt还是比C math库的sqrtf快了不少

      #include <stdio.h> #include <xmmintrin.h> #define NOMINMAX #include <windows.h> #i ...

    2. 工信部公示网络安全示范项目 网易云易盾“自适应DDoS攻击深度检测和防御系统”入选

      本文由  网易云发布. 工信部官网 2017年年底,经专家评审和遴选,中华人民共和国工业和信息化部(以下简称“工信部”)公示了2017年电信和互联网行业网络安全试点示范项目,网易云易盾的“自适应DDo ...

    3. 盘点Xcode中开发者最喜爱的十大开源插件

      Xcode IDE拥有着诸如导航.重构.校准等众多非常高大上的工具,而予以辅助的插件更是在Xcode的基础上对相关功能进行改进与扩展.在应用开发过程中,通过开源包管理器Alcatraz对插件进行安装管 ...

    4. Sentinel 哨兵 实现redis高可用

      本文链接:http://www.cnblogs.com/zhenghongxin/p/8885879.html 我们知道redis是有主从复制的,例如下图: 但如果master主进程挂掉之后,没有sl ...

    5. ES6字符串相关扩展

      变量的解构赋值 // 数组的解构赋值 let [a,b,c] = [1,2,3]; //1,2,3 let [a,b,c] = [,123,]; //undefined 123 undefined l ...

    6. 《JAVA与模式》之建造模式

      在阎宏博士的<JAVA与模式>一书中开头是这样描述建造(Builder)模式的: 建造模式是对象的创建模式.建造模式可以将一个产品的内部表象(internal representation ...

    7. Swift 里字符串(一)概览

      感受一下字符串相关的源文件个数  String 概览 是一个结构体 只有一个变量,类型是 _StringGuts  如上所示,String 真正的内容在__StringStorage或者__Sha ...

    8. centos7在分区上建立文件系统和挂载

      在上一篇博客中,我们只说了硬盘的分区,既然进行分区,那么我们就要知道如何使用这些分区,就是接下来的建立文件系统和挂载. mkfs(make filesystem)格式化,建立文件系统 可以看到各种文件 ...

    9. javascript数据结构与算法--二叉树遍历(后序)

      javascript数据结构与算法--二叉树遍历(后序) 后序遍历先访问叶子节点,从左子树到右子树,再到根节点. /* *二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 * * * */ ...

    10. PL/SQL DEVELOPER数字超长显示了科学计数法

      问题: 最近在做项目中,ID使用了长整形,10进制数值大约长度17位,在pl/sql developer 上数值由科学计数法显示. 在查看时不是很方便,且数值进行了省略显示,不准确. 解决方法: 在t ...