最近在使用 Spring + iBatis 做一些小的 Java 项目,感觉难以驾驭 iBatis ,在数据访问层上花了大量的工作,被搞得很被动。深入反省认为这是受了潮流的误导,小项目本来就不应该使用大型的框架。于是反潮流而作,想出了一种最直接的方法:不使用 XML 或者标签来隔离 SQL 语句中的逻辑,也不想使用复杂的对象映射来访问数据库,而是在 Java 代码中直接写 SQL 来访问数据库。我以为 SQL 本来就是十分优秀的表达方法,即使在 Java 中也不一定事事都硬要使用 OO 。所以想把这个想法做成一个开源项目,深入地挖掘一下这里面的内涵。因为从来就没有参与过任何开源项目,不知道如何开始比较好,所以来这里想听听大家的意见。直接在 Java 中写 SQL 是不可能的,但是可以写出类似 SQL 语法的代码,如果熟悉 SQL 的话会很快掌握这种方法。下面是我构想的一个简单的代码片段,打算以这样的方式来访问数据库:
// 可以直接使用字符串、数字作为变参进行查询
String code = "123456789012345678";// 使用类似 SQL 的语法从数据表 Account 中建立一个数据查询对象。
// conn 是一个已经准备好的数据库接连。
Account t = new Account();
Query q = new Query(conn, 
P(SELECT, t.Id, t.Name, t.Code, 
  WHERE, t.Code, EQ, code));// 定义从数据查询对象中提取数据的变量 Variable<?>
Variable<Integer> v_id = new Variable<Integer>(t.Id, 0);
Variable<String> v_name = new Variable<String>(t.Name, "");
Variable<String> v_code = new Variable<String>(t.Code, "");// 从查询对象中取出数据
if (q.retrieve(v_id, v_name, v_code))
println(System.out, ",", v_id, v_code, v_name);// 关闭查询对象
q.close();

解决方案 »

  1.   

    楼主是有心人,这个语法上虽然受到现在Java的语法制约,
    但是.Net的Linq和你装个想法是很相似的JPA,JDO都太重了,不灵活,JDBC显然太低级鼓励一下结贴吧~~~~~
      

  2.   

    呵呵,想法挺好的,现在的确框架挺多,不过数据库连接还是得要连接池,不管项目多小,都得用,当然,你说如果就是一个main函数还需要不?我觉得这样的话就没有实际的意义了,关于是做个开源的嘛,呵呵,挺支持楼主的,可以尝试嘛,我是比较菜,呵呵,所以现在还不敢去碰那些高深的东西,先学基本的了,呵呵,
      

  3.   

    java+SQL对小项目也不错,并且用commons-dbutils工具做帮助,开发效率不低
      

  4.   

    在近期的几个项目的项目周期中,因数据库映射错误及复杂的动态SQL语句导致的低级BUG消耗了大量的成本,从而使得项目没有了利润。比如 XML 配置的 SQL 映射中的属性拼写错误等。其实不管项目大小,都是可以使用的。项目越大,应该越好用,因为大项目的数据库结构反而比小项目更加稳定,写数据层的程序员本来就对数据结构了如指掌。这里边有一个思路是使用 Java IDE 的语法纠错能力帮助程序员更准确且快捷地写出正确的映射。写数据层的程序员一定要关心数据结构的,使用 XML 来配置的方法,个人觉得反不如直接使用 SQL 在 Java 代码中写出数据逻辑更加有效。
      

  5.   

    说做就做,开出来了,贴出来接些砖块吧。https://sourceforge.net/projects/lettuce/
      

  6.   

    忘说了,暂时只提交了一些代码,目前还处在规划阶段,还没有正式发布。如果大家对这些代码感兴趣的话,可以用 SVN 获得。希望大家多多支持。
      

  7.   

    楼主的意思是通过自定义的类来实现生成sql语句的功能?是这样吗?
    感觉作用不大。
    规模不大的系统确实用不着hibernate或iBatis作数据库操作层,甚至spring都可以不用